背景
生产环境中,由于种种原因会导致数据库主从不同步,需要手动重新同步数据库。手动同步操作步骤较为繁杂,容易造成误操作,带来安全隐患,所以写此脚本实现自动化主从同步。
mysql自动主从同步脚本:
#!/bin/bash
#Auther: HCWEI
#Date: 2018-12-01 17:00:00
#QQ: 815169444
DATE=`date +%Y%m%d`
MYSQLIN="mysql -uroot -pPASSWORD -S /data/3307/mysql.sock" #登陆从库命令,PASSWORD处输入从库密码,-S后填入从库的sock文件路径
#备份主库
mysqldump -S /usr/local/mysql/data/mysql.sock --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A |gzip >/tmp/${DATE}.sql.gz #-S后填入主库的sock文件路径,此处用户名密码已在/etc/my.cnf中设置,如果未设置需要添加-u、-p参数,以完成数据库备份操作
#从库恢复
gzip -d /tmp/${DATE}.sql.gz
$MYSQLIN -e "stop slave;source /tmp/${DATE}.sql;"
#获取bin-log文件名及post信息
MASTER_LOG_FILE=`head -30 /tmp/${DATE}.sql | grep MASTER_LOG_FILE | awk -F "'" '{print$2}'`
MASTER_LOG_POS=`head -30 /tmp/${DATE}.sql |grep MASTER_LOG_POS|awk -F "=|;" '{print$3}'`
#主从同步
$MYSQLIN <<EOF
CHANGE MASTER TO
MASTER_HOST='10.0.0.13', #输入主库IP地址
MASTER_PORT=3306, #主库端口号
MASTER_USER='USER', #USER处填入配置主从同步时,设置的用户名
MASTER_PASSWORD='PASSWOED', #PASSWORD处填入配置主从同步时,设置的密码
MASTER_LOG_FILE='${MASTER_LOG_FILE}',
MASTER_LOG_POS=${MASTER_LOG_POS};
EOF
#检查同步状态
$MYSQLIN -e "start slave;"
$MYSQLIN -e "show slave status \G;" | egrep 'Slave_IO_Running|Slave_SQL_Running'