分享shell脚本编译安装mysql5.5脚本

回复 收藏
本帖最后由 summer123 于 2016-8-3 20:05 编辑

#!/bin/bash
log_file=install_mysql5.5_log
user=mysql
group=mysql
MasterIP=192.168.10.103
MasterMysqlPort=3306
Slave1IP=192.168.10.106
Slave2IP=192.168.10.125
MasterUser=realcloud
MasterPassword=realcloud
function checkOK()
{
    if [ $? -ne 0 ];then
        exit 1;
    fi
}
function write_log()
{
    now_time='['$(date +"%Y-%m-%d %H:%M:%S")']'
    echo ${now_time} $1 | tee -a ${log_file}
}
function ClearInstallLog{}
{
    #清除日志
    if [ -s ${log_file} ]; then
        cp /dev/null ${log_file}
    fi   
}
function CheckIdentity()
{
    #检查当前用户是否root
    if [ $(id -u) -ne 0 ];then
        write_log "Error ------> Please use the root user to install"
        exit 1;
    else
        write_log "Infor ------> The current user is root, installation to continue..."
    fi   
}

function CheckSourceCode()
{
    if [ -f cmake-2.8.8.tar.gz  ] && [  -f mysql-5.5.32.tar.gz ];then
        write_log "Infor ------> start install mysql5.5"
    else
        if [ ! -f cmake-2.8.8.tar.gz ]; then
            write_log  "Infor ------> check the source src code cmake-2.8.8.tar.gz is not exist.pls check"
        fi

        if [ ! -f mysql-5.5.32.tar.gz ];then
            write_log  "Infor ------> check the source src code mysql-5.5.32.tar.gz  is not exist.pls check ... "
        fi
        exit 1;
    fi   
}

function InstallCmake()
{
    #判断cmake是否已经安装
    which cmake
    if [ $? -eq 0 ]; then
        write_log "Infor ------> the current system has installed cmake,so skip..."
        write_log "Infor ------> the current system cmake exec path $(which cmake)..."
    else
        #安装cmake
        if [ ! -f cmake-2.8.8.tar.gz  ];then
            write_log  "Error ------> the source src code cmake-2.8.8.tar.gz is not exist.pls check"
        else
            write_log "Infor ------> install cmake......"
            tar -xf cmake-2.8.8.tar.gz
            checkOK
            write_log "Infor ------> cmake-2.8.8.tar.gz  Decompression finished "
            cd cmake-2.8.8
            checkOK
            ./configure
            checkOK
            gmake && gmake install
            checkOK
            write_log "Infor ------> cmake have installed"
        fi
    fi   
}

function InstallMysql()
{
    #判断mysql是否已经安装
    which mysql
    if [ $? -eq 0 ]; then
        write_log "Infor ------> the current system has installed mysql,so skip..."
        write_log "Infor ------> the current system cmake exec path $(which mysql)..."
    else
        #安装mysql
        if [  -f mysql-5.5.32.tar.gz ];then
            yum install -y ncurses-devel

            #create group if not exists
            egrep "^$group" /etc/group >& /dev/null
            if [ $? -ne 0 ];then
                groupadd $group
            fi

            #create user if not exists
            egrep "^$user" /etc/passwd >& /dev/null
            if [ $? -ne 0 ];then
                useradd mysql -g mysql -M -s /bin/false
            fi

            tar -xf mysql-5.5.32.tar.gz
            checkOK
            write_log "Infor ------> mysql 5.5.32.tar.gz is installing"
            cd mysql-5.5.32
            write_log "Infor ------> mysql 5.5.32.tar.gz is compiling"
            cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \
            -DMYSQL_DATADIR=/application/mysql-5.5.32/data \
            -DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \
            -DDEFAULT_CHARSET=utf8 \
            -DDEFAULT_COLLATION=utf8_general_ci \
            -DEXTRA_CHARSET=gbk,gb2312,utf8,ascii \
            -DENABLED_LOCAL_INFILE=on \
            -DWITH_INNOBASE_STORAGE_ENGINE=1 \
            -DWITH_FEDERATED_STORAGE_ENGINE=1 \
            -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
            -DWITHOUT_EXAMPL_ESTORAGE_ENGINE=1 \
            -DWITHOUT_PARTITION_ESTORAGE_ENGINE=1 \
            -DWITH_FAST_MUTEXES=1 \
            -DWITH_ZLIB=bundled \
            -DENABLED_LOCAL_INFILE=1 \
            -DWITH_READLINE=1 \
            -DWITH_ENBEDDED_SERVER=1 \
            -DWITH_DEBUG=0
            checkOK
            write_log "Infor ------> mysql 5.5.32 have configured......"
            write_log "Infor ------> mysql 5.5.32.tar.gz has make and make install"
            make && make install
            checkOK
            write_log "Infor ------> mysql 5.5.32 have make installed......"
            /bin/cp support-files/my-small.cnf /etc/my.cnf
            ln -s /application/mysql-5.5.32/ /application/mysql
            echo "export PATH=/application/mysql/bin:$PATH" >>/etc/profile
            source /etc/profile
            chmod -R 1777 /tmp/
            cd /application/mysql/scripts/
            write_log "Infor ------> To initialize the mysql 5.5.32 database!"
            ./mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data/ --user=mysql
            write_log "Infor ------> Create the database data storage folder!"
            mkdir -p /application/mysql/data
            chown -R mysql.mysql /application/mysql/
            cd /usr/local/src/mysql-5.5.32/
            /bin/cp support-files/mysql.server /etc/init.d/mysqld
            chmod 700 /etc/init.d/mysqld
            /etc/init.d/mysqld start
            write_log "Infor ------> mysql 5.5.32 is starting....."
            checkOK
            chkconfig mysqld on
            chkconfig --list mysqld
            checkOK
            write_log "Infor ------> set the launcInfor ------>  of set up the boot"
            ps aux|grep mysqld|grep -v grep
            checkOK
            write_log "Infor ------> mysql 5.5.32 is running......"
            source /etc/profile
        else
            write_log  "Error ------> the source src code mysql-5.5.32.tar.gz  is not exist.pls check ... "
        fi
    fi
}
# 配置主从同步
#设置主mysql
function configureMasterMy_cnf()
{
    cp /etc/my.cnf /etc/my.cnf.bak
    sed -i "s/#log-bin=mysql-bin/log-bin=mysql-bin/g" /etc/my.cnf
    service mysqld restart
    checkOK  
    write_log "Infor ------> restart master mysql"
    mysql -e "CREATE USER 'realcloud'@'192.168.10.106' IDENTIFIED BY 'realcloud';"
    #mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'realcloud'@'192.168.10.125' IDENTIFIED BY 'realcloud';"
    mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'realcloud'@'${Slave1IP}' IDENTIFIED BY 'realcloud';"
    mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'realcloud'@'${Slave2IP}' IDENTIFIED BY 'realcloud';"
    mysql -e "FLUSH TABLES WITH READ LOCK;"
    mysqldump -uroot  --all-databases  --lock-tables=false  -- > /root/all.sql
    scp /root/all.sql root@192.168.10.106:/root  
    mysql -e "UNLOCK TABLES;"
    #找到 bin的Position值
    mysql -e "SHOW MASTER STATUS;"|grep "mysql-bin"|awk -F" " '{print $2}'
}
function configureSlave1My_cnf()
{
    cp /etc/my.cnf /etc/my.cnf.bak
    sed -i "s/#log-bin=mysql-bin/log-bin=mysql-bin/g" /etc/my.cnf
    MasterLogFile=$(mysql -e "SHOW MASTER STATUS;"|grep mysql-bin|awk -F" " '{print $1}')
    MasterLogPos=$(mysql -e "SHOW MASTER STATUS;"|grep mysql-bin|awk -F" " '{print $2}')
    IP_lastbit=${echo ${Slave1IP}| awk -F"." '{print $4}'}

    #此处需要优化
    sed "s/server-id       = 1/server-id       = 2/g" /etc/my.cnf

    mysql -u root  < /root/all.sql
    service mysqld restart
    #mysql -e "change master to master_host='192.168.10.103',master_port=3306,master_user='realcloud',master_password='realcloud',master_log_file='realcloud.000001',master_log_pos=502;"
    mysql -e "change master to master_host='${MasterIP}',master_port=${MasterMysqlPort},master_user='${MasterUser}',master_password='${MasterPassword}',master_log_file='${MasterLogFile}',master_log_pos=${MasterLogPos};"
    mysql -e "flush privileges;"
    mysql -e "slave start;"

    Slave_IO_Running=$(mysql -e "show slave status\G;"|grep Slave_IO_Running|awk -F":" '{print $2}')
    Slave_SQL_Running=$(mysql -e "show slave status\G;"|grep Slave_SQL_Running|awk -F":" '{print $2}')
    if [ ${Slave_IO_Running} != "Yes" ] && [ ${Slave_SQL_Running} != "Yes" ];then
        write_log "Error ------> MySQL master slave mode settings is Successful"
    else
        write_log "Error ------> MySQL master slave mode settings is fail"
        exit 1
    fi
}

function main()
{
    #检查源码包是否存在
    CheckSourceCode
    write_log "Infor ------> 检查源码存在"

    #检查身份,必须是root用户执行
    CheckIdentity
    write_log "Infor ------> 当前是root用户"

    #清理安装日志
    ClearInstallLog  
    write_log "Infor ------> 日志已经清理完毕"

    #安装cmake
    InstallCmake
    write_log "Infor ------> cmake安装完毕"

    #安装mysql
    InstallMysql
    write_log "Infor ------> mysql安装完毕"

    #配置主从模式的主mysql
    #configureMasterMy_cnf

}

main
2016-08-03 16:46 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: