zoukankan      html  css  js  c++  java
  • Mysql 一键安装脚本

    • 测试环境搭建用的脚本,CentOS6上没做测试,只在CentOS7上跑过
    • 因为已经足够使用,就没有再完善。

    1.单实例脚本

    用法

    sh autoInstallMysql.sh mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
    

    脚本

    autoInstallMysql.sh

    #!/bin/bash
    # autoInstallMysql.sh
    # Author 那个,我
    # base目录: /usr/local/mysql
    # data目录: /data/mysql/3306/data
    # 可用系统: CentOS6&7
    
    # 改动参数路径可能导致脚本失效
    mycnf=/etc/my.cnf
    mysock=/tmp/mysql.sock
    
    get_soft(){
    if [ $# -lt 1 ];then
    echo "请传入Mysql*.tar.gz包"
    exit 1
    fi
    }
    
    status(){
    if [ $? == 0 ];then
    	log 0 $2
    else 
    	log 1 $2
    fi
    }
    
    log() {
        if [ $1 -eq 0 ]; then
            echo -e "33[34;2m $2 33[0m"
        elif [ $1 -eq 1 ]; then
            echo -e "33[31;5m $2 33[0m"
            exit 1
        fi
    }
    
    get_soft $1
    mysqlsoft=$1
    
    log 0 "-创建用户"
    if [ ! $(id -u mysql) ];then
        useradd -s /sbin/nologin mysql
    fi >/dev/null 2>&1
    
    log 0 "-创建路径"
    if [ ! -d "/data/mysql/3306/{data,binlog}" ]; then
        mkdir -p /data/mysql/3306/{data,binlog}
        chown -R mysql. /data/mysql
    fi
    
    log 0 "-解压缩文件"
    basedir=/usr/local/${mysqlsoft%.tar*}
    if [ ! -d $basedir ];then
        tar -xf $mysqlsoft -C /usr/local
    fi
    
    log 0 "-创建软连接"
    cd /usr/local
    if [ -L mysql ];
    	then rm -rf mysql;
    elif [ -d mysql ];
    	then mv mysql mysql.`date +%Y%m%d`;
    fi
    
    ln -s $basedir /usr/local/mysql
    
    # 参数文件配置
    rpm -q mariadb-libs >/dev/null 2>&1
    if [ $? == 0 ];then
        rpm -e --nodeps mariadb-libs
    fi
    cat > $mycnf <<EOF
    [mysqld]
    # server
    explicit_defaults_for_timestamp=1
    basedir=/usr/local/mysql
    datadir=/data/mysql/3306/data
    socket=$mysock
    user=mysql
    skip_name_resolve=on
    log-error=/data/mysql/3306/mysql.error
    
    # binlog
    log-bin=/data/mysql/3306/binlog/mysql-bin
    binlog_format=ROW
    log-slave-updates
    expire_logs_days=10
    sync_binlog=1
    
    #relay-log
    relay_log_info_repository = TABLE
    relay_log=/data/mysql/3306/binlog/mysql-relay
    relay_log_recovery = 1
    
    # InnoDB
    default-storage-engine=InnoDB
    character-set-server=utf8mb4
    lower_case_table_names=1
    transaction-isolation=READ-COMMITTED
    innodb_flush_log_at_trx_commit=1
    innodb_buffer_pool_size=1G
    
    # Replication
    server_id=1
    gtid_mode=ON
    enforce_gtid_consistency=ON
    master_info_repository = TABLE
    slave_parallel_type = LOGICAL_CLOCK
    slave_parallel_workers=4
    slave_preserve_commit_order = 1
    
    # 半同步复制
    plugin-load="semisync_master.so;semisync_slave.so"
    rpl_semi_sync_master_enabled = 1
    rpl_semi_sync_slave_enabled = 1
    rpl_semi_sync_master_wait_no_slave=ON
    rpl_semi_sync_master_timeout=3
    rpl_semi_sync_master_wait_point=AFTER_SYNC
    rpl_semi_sync_master_wait_for_slave_count=1
    EOF
    
    # PATH变量
    echo "export PATH=/usr/local/mysql/bin:$PATH" >>/etc/profile
    source /etc/profile
    
    log 0 "-初始化"
    mysqld --initialize-insecure
    
    log 0 "-启动"
    echo yes | cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    release=`cat /etc/redhat-release|awk '{print $4}'`
    case $release in 
    6*)
        chkconfig mysqld on
        service mysqld status
        chkconfig --list mysqld
        ;;
    7*)
        chkconfig --add mysqld
        chkconfig mysqld on
        systemctl start mysqld
        ;;
    esac
    sleep 5
    
    log 0 "-创建DBA用户(root@'%') ,Pass(root_123)"
    log 0 "-按回车继续..."
    mysqladmin -u root -p password 'root_123'
    # 创建远程管理用户
    mysql -u root -p'root_123' -e "
    create user root identified by 'root_123';
    grant all on *.* to root with grant option;
    "
    log 0 "-安装完成,请退出并重新登录"
    exit
    

    2.多实例脚本

    用法

    sh autoInstallMysql_multi.sh mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz 3306
    sh autoInstallMysql_multi.sh mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz 3307
    

    脚本

    myautoInstallmulti.sh

    #!/bin/bash
    # autoInstallMysql_multi.sh
    # Author 那个,我
    # base目录: /usr/local/mysql
    # 可用系统: CentOS6&7
    
    # 改动参数路径可能导致脚本失效
    
    if [ ! $2 ];then
    	export myport=3306
    else
    	export myport=$2
    fi
    
    myhome=/data/mysql/$myport
    mycnf=$myhome/my.cnf
    mytmp=$myhome/tmp
    mysock=$mytmp/mysql.sock
    
    get_soft(){
    if [ $# -lt 1 ];then
    echo "请传入Mysql*.tar.gz包"
    exit 1
    fi
    }
    
    status(){
    if [ $? == 0 ];then
    	log 0 $2
    else 
    	log 1 $2
    fi
    }
    
    log() {
        if [ $1 -eq 0 ]; then
            echo -e "33[34;2m $2 33[0m"
        elif [ $1 -eq 1 ]; then
            echo -e "33[31;5m $2 33[0m"
            exit 1
        fi
    }
    
    get_soft $1
    mysqlsoft=$1
    
    log 0 "-创建用户"
    if [ ! $(id -u mysql) ];then
        useradd -s /sbin/nologin mysql
    fi >/dev/null 2>&1
    
    log 0 "-创建路径"
    if [ ! -d "$myhome/{data,binlog,tmp}" ]; then
        mkdir -p $myhome/{data,binlog,tmp}
        chown -R mysql. $myhome
    fi
    
    log 0 "-解压缩文件"
    basedir=/usr/local/${mysqlsoft%.tar*}
    if [ ! -d $basedir ];then
        tar -xf $mysqlsoft -C /usr/local
    fi
    
    log 0 "-创建软连接"
    cd /usr/local
    if [ -L mysql ];
    	then rm -rf mysql;
    elif [ -d mysql ];
    	then mv mysql mysql.`date +%Y%m%d`;
    fi
    
    ln -s $basedir /usr/local/mysql
    
    # 参数文件配置
    cat > $mycnf <<EOF
    [mysqld]
    # server
    explicit_defaults_for_timestamp=1
    basedir=/usr/local/mysql
    datadir=$myhome/data
    port=$myport
    socket=$mysock
    user=mysql
    skip_name_resolve=on
    log-error=$mytmp/mysql.error
    
    # binlog
    log-bin=$myhome/binlog/mysql-bin
    binlog_format=ROW
    log-slave-updates
    expire_logs_days=10
    sync_binlog=1
    
    # InnoDB
    default-storage-engine=InnoDB
    character-set-server=utf8mb4
    lower_case_table_names=1
    transaction-isolation=READ-COMMITTED
    innodb_flush_log_at_trx_commit=1
    innodb_buffer_pool_size=1G
    
    # Replication
    server_id=1
    gtid_mode=ON
    enforce_gtid_consistency=ON
    master_info_repository = TABLE
    relay_log_info_repository = TABLE
    relay_log=$myhome/binlog/mysql-relay
    relay_log_recovery = 1
    slave_parallel_type = LOGICAL_CLOCK
    slave_parallel_workers=4
    slave_preserve_commit_order = 1
    
    # 半同步复制
    plugin-load="semisync_master.so;semisync_slave.so"
    rpl_semi_sync_master_enabled = 1
    rpl_semi_sync_slave_enabled = 1
    rpl_semi_sync_master_wait_no_slave=ON
    rpl_semi_sync_master_timeout=3
    rpl_semi_sync_master_wait_point=AFTER_SYNC
    rpl_semi_sync_master_wait_for_slave_count=1
    EOF
    
    # PATH变量
    echo "export PATH=/usr/local/mysql/bin:$PATH" >>/etc/profile
    source /etc/profile
    
    log 0 "-初始化"
    mysqld --defaults-file=$mycnf --initialize-insecure
    
    log 0 "-启动"
    release=`cat /etc/redhat-release|awk '{print $4}'`
    case $release in 
    6*)
    mysqld --defaults-file=$mycnf &
    ;;
    7*)
    cat > /etc/systemd/system/mysqld$myport.service <<EOF
    #!/bin/bash
    # systemd for Mysql
    [Unit]
    Description=Mysql Server
    After=syslog.target
    After=network.target
    Documentation=man:mysqld(8)
    Documentation=https://dev.mysql.com/doc/refman/8.0/en/using-systemd.html
    
    [Service]
    User=mysql
    Group=mysql
    ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=$mycnf
    LimitNOFILE=65535
    Restart=on-failure
    RestartSec=3
    RestartPreventExitStatus=1
    PrivateTmp=false
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    systemctl daemon-reload
    systemctl restart mysqld$myport
    systemctl enable mysqld$myport
    ;;
    esac
    sleep 5
    
    log 0 "-创建DBA用户(root@'%') ,Pass(root_123)"
    log 0 "-按回车继续..."
    mysqladmin -S $mysock -u root -p password 'root_123'
    # 创建远程管理用户
    mysql -S $mysock -u root -p'root_123' -e "
    create user root identified by 'root_123';
    grant all on *.* to root with grant option;
    "
    log 0 "-安装完成,请退出并重新登录"
    log 0 "-登录方式: ( mysql -S $mysock -uroot -proot_123 )"
    exit
    
    学习如茶,需细细品味。
  • 相关阅读:
    Docker的使用
    Django常见问题
    Linux系统使用
    Nginx
    Redis
    MySQL基础、主从复制、优化
    Python常见的问题
    Python基础知识
    Vue的使用
    python监控tomcat日记文件
  • 原文地址:https://www.cnblogs.com/plluoye/p/15370720.html
Copyright © 2011-2022 走看看