一键安装MySQL 主从复制SHELL脚本

脚本思路: 在从库上远程备份主库数据,再在从库上进行数据恢复,同时启动从库.

环境: CentOS6.5 已安装MySQL多实例,端口为3306 ,3307.

现通过自动安装主从脚本将两实例做主从复制。

#!/bin/bash

. /etc/rc.d/init.d/functions

if [ $# -ne 0 ];then
   echo "Usage:sh `basename $0`"
   exit 1
fi

#MASTER VARIABLES
MASTER_USER=root
MASTER_PASS="terjoy2016"
MASTER_PORT=3306
MASTER_IP="192.168.1.31"
REP_USER=‘rep‘
REP_PWD=‘rep123‘ 
MASTER_DATA_PATH=/data/backup
MASTER_STATUS_FILE=${MASTER_DATA_PATH}/mysqllogs_`date +%F`.log
MASTER_DATA_FILE=${MASTER_DATA_PATH}/mysql_backup_`date +%F`.sql.gz
 
MYSQL_DIR=/usr/local/mysql/bin
MASTER_MYSQL_CMD="$MYSQL_DIR/mysql -u$MASTER_USER -p$MASTER_PASS -h$MASTER_IP -P$MASTER_PORT"
MASTER_MYSQL_DUMP="$MYSQL_DIR/mysqldump -u$MASTER_USER -p$MASTER_PASS -h$MASTER_IP -P$MASTER_PORT  -A  -B -F --single-transaction --events "

#SLAVE VARIABLES
SLAVE_USER=root
SLAVE_PASS="terjoy2016"
SLAVE_PORT=3307
SLAVE_IP="192.168.1.31"
SLAVE_MYSQL_CMD="$MYSQL_DIR/mysql -u$SLAVE_USER -p$SLAVE_PASS -h$SLAVE_IP -P$SLAVE_PORT"
TO_MAIL="[email protected]"
SENDMAIL="mail -v -s "MySQL-Slave-build-status" $TO_MAIL"

[ ! -d $MASTER_DATA_PATH ] && mkdir -p $MASTER_DATA_PATH
[ `$MASTER_MYSQL_CMD -e "select user,host from mysql.user" 2> /dev/null |grep rep|wc -l` -ne 1 ] &&$MASTER_MYSQL_CMD -e "grant replication slave on *.* to ‘rep‘@‘192.168.1.%‘ identified by ‘rep123‘;" 2> /dev/null
[ $? -eq 0  ] && action "主库创建复制用户" /bin/true  
 
$MASTER_MYSQL_CMD -e "flush tables with read lock;"  2> /dev/null
[ $? -eq 0  ] && action "开始锁表" /bin/true ||  action "开始锁表" /bin/false || exit 1 
echo "-----show master status result-----" >$MASTER_STATUS_FILE
$MASTER_MYSQL_CMD -e "show master status;" 2> /dev/null >>$MASTER_STATUS_FILE
[ $? -eq 0  ] && action "查看MASTER状态" /bin/true ||  action "查看MASTER状态" /bin/false ||  exit 1
#echo "${MASTER_MYSQL_DUMP} | gzip > $MASTER_DATA_FILE"
${MASTER_MYSQL_DUMP} 2> /dev/null | gzip > $MASTER_DATA_FILE 
[ $? -eq 0  ] && action "备份主库" /bin/true || action "备份主库" /bin/false || exit 1
$MASTER_MYSQL_CMD -e "unlock tables;" >/dev/null 2>&1
[ $? -eq 0  ] && action "表锁释放" /bin/true
#cat $MASTER_STATUS_FILE

###############################################################################

 
#recover

[ -d ${MASTER_DATA_PATH} ]  && cd ${MASTER_DATA_PATH} && rm -f mysql_backup_`date +%F`.sql
gzip -d mysql_backup_`date +%F`.sql.gz
[ $? -eq 0  ] && action "解压备份文件" /bin/true || action "解压备份文件" /bin/false || exit 1
$SLAVE_MYSQL_CMD  2> /dev/null < mysql_backup_`date +%F`.sql
[ $? -eq 0  ] && action "恢复数据至从库" /bin/true || action "恢复数据至从库" /bin/false || exit 1
MASTER_LOG_FILE=`tail -1 $MASTER_STATUS_FILE|cut -f1`
MASTER_LOG_POS=`tail -1 $MASTER_STATUS_FILE|cut -f2`

 
#config slave

$SLAVE_MYSQL_CMD -e "CHANGE MASTER TO  MASTER_HOST=‘$MASTER_IP‘, MASTER_PORT=$MASTER_PORT, MASTER_USER=‘$REP_USER‘, MASTER_PASSWORD=‘$REP_PWD‘, MASTER_LOG_FILE=‘$MASTER_LOG_FILE‘,MASTER_LOG_POS=$MASTER_LOG_POS;" 2> /dev/null

if [ $? -eq 0  ] ;then 
     action "执行CHANGE MASTER TO命令" /bin/true 
else
      action "执行CHANGE MASTER TO命令" /bin/false 
      $SLAVE_MYSQL_CMD -e "show slave status\G" 2> /dev/null >> $MASTER_STATUS_FILE
      #echo "$SENDMAIL < $MASTER_STATUS_FILE"
      $SENDMAIL  < $MASTER_STATUS_FILE 2> /dev/null
      exit 1
fi

$SLAVE_MYSQL_CMD -e "start slave;" 2> /dev/null

[ $? -eq 0  ] && action "启动从库复制" /bin/true || action "启动从库复制" /bin/false || exit 1
$SLAVE_MYSQL_CMD -e "show slave status\G" 2> /dev/null |egrep "IO_Running|SQL_Running"  >>$MASTER_STATUS_FILE

MasterLogFile=`$SLAVE_MYSQL_CMD -e "show slave status\G" 2> /dev/null |egrep -i "\<Master_Log_File\>"| awk ‘{print $2}‘`
RelayMasterLogFile=`$SLAVE_MYSQL_CMD -e "show slave status\G" 2> /dev/null |egrep -i "\<Relay_Master_Log_File\>"| awk ‘{print $2}‘`
ReadMasterLogPos=`$SLAVE_MYSQL_CMD -e "show slave status\G" 2> /dev/null |egrep -i "\<Read_Master_Log_Pos\>"| awk ‘{print $2}‘`
ExecMasterLogPos=`$SLAVE_MYSQL_CMD -e "show slave status\G" 2> /dev/null |egrep -i "\<Exec_Master_Log_Pos\>"| awk ‘{print $2}‘`
REP_STATUS=`$SLAVE_MYSQL_CMD -e "show slave status\G" 2> /dev/null |egrep "Slave_IO_Running|Slave_SQL_Running" |grep -c "Yes"`

if [ $MasterLogFile == $RelayMasterLogFile  ] && [ $ReadMasterLogPos == $ExecMasterLogPos  ] && [ $REP_STATUS -eq 2 ];then
   action "主从复制状态检测正常" /bin/true 
else
   action "主从复制状态检测正常" /bin/false
   $SLAVE_MYSQL_CMD -e "show slave status\G" 2> /dev/null >> $MASTER_STATUS_FILE
   $SENDMAIL  < $MASTER_STATUS_FILE 2> /dev/null
   exit 1
fi

$SENDMAIL  < $MASTER_STATUS_FILE 2> /dev/null

执行命令:

./auto_master_slave.sh

安装完成。

检查结果:

从库状态正常!

时间: 2024-10-09 19:50:52

一键安装MySQL 主从复制SHELL脚本的相关文章

Linux中源码包安装MySQL的shell脚本

#!/bin/bash#安装MYSQL yum -y install ncurses-develyum -y install autoconftar zxf /cmake- -C /cd /cmake-./configure && gmake && gmake installcdgroupadd mysqluseradd -M -s /sbin/nologin/ mysql -g mysqltar zxf /mysql- -C /usr/srccd /usr/src/mys

二进制安装mysql的shell脚本

配合文档看,挺简单的. #!/bin/bash ###2016-3-23 ###version 1.0 ####tishi yonghu cat<< AA you must mv the mysql_package to /root/tools/ . AA sleep 2 ###define var tools_dir="/root/tools" package_name="`cd $tools_dir && ls mysql-*-linux*`&

一键安装mysql

一键安装MySQL python 程序脚本 主要功能:一键安装mysl服务器端,mysql client 端. 在运行该脚本之前需要两个必要的文件 mysql.tar.gz:该文件是编译完成后的文件压缩包,需要注意的是这个压缩包不是对目录的压缩,目录下面的文件以及子目录压缩. 例如,basedir 目录是/usr/local/mysql ,不需要对整个mysql目录进行压缩, 压缩里面的文件和子目录就行了, cd /usr/local/mysql  tar -zcvf mysql.tar.gz

Centos 6.4上面用Shell脚本一键安装mysql 5.6.15

Centos 6.4上面用Shell脚本一键安装mysql 5.6.15  #!/bin/bash if [ `uname -m` == "x86_64" ];then machine=x86_64 else machine=i686 fi mysqlBasedir=/storage/server/mysql mysqlDatadir=${mysqlBasedir}/data/ mysqlLogdir=/storage/log/mysql mysqlUser=mysql mysqlGr

Rehat一键安装mysql脚本和备份数据库脚本

Rehat一键安装mysql脚本 ##说明:适用,Rehat 5 6 7 1.运行状态,运行成功输出mysql临时密码 2.代码如下 #!/bin/bash #获取系统信息 sudo cat /etc/issue>myfile aa=sudo grep '5.' myfile bb=sudo grep '6.' myfile cc=sudo grep '7.' myfile echo $aa echo "It is a test" > myfile #获取系统信息 sudo

RHEL自动安装zookeeper的shell脚本

RHEL自动安装zookeeper的shell脚本 A:本脚本运行的机器,Linux RHEL6 B,C,D,...:待安装zookeeper cluster的机器, Linux RHEL6 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装zk的机器B,C,D,...上,然后就可以在A上运行本脚本: $ ./install_zookeeper 前提: B, C, D机器必须配置好repo,本脚本使用的是cdh5的repo, 下面的内容保存到:/etc/yum.repos.d/cloude

Linux自动安装JDK的shell脚本

Linux自动安装JDK的shell脚本 A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在A上运行本脚本: $ ./install-jdk.sh B的IP or: $ ./install-jdk.sh "B的IP" "JDK的URI" 就可以在机器B上安装JDK.jdk使用的tar包需要用户自己设定DEFAULT_JDK_SRC=?,保证可以wget得到即可

Mysql 主从复制监控脚本

Mysql 主从复制监控脚本, 监控IO和SQL线程.如果问题.发送邮件报警. #!/bin/bash #write by lijun #Date 2014-08-12 #Description monitor the master pass the data to the slave #===================== mail="邮件地址" #=================== #获取slave io 进程和sql进程的状态 b="`mysql -uroot

一键安装mysql的脚本

最近在弄配置mysql的主从测试,老是重复安装mysql 所以做了个脚本,mysql流程是参考别人的 但是shell是自己写的 #!/bin/bash #切换到下载目录 cd /usr/local/src #下载免免编译的包 wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.29-linux-glibc2.5-x86_64.tar.gz #解压 tar zxvf mysql-5.6.29-linux-glibc2.5-x86_64.ta