mysql自动主从同步脚本

hcwei 2020年06月10日 295次浏览

背景

生产环境中,由于种种原因会导致数据库主从不同步,需要手动重新同步数据库。手动同步操作步骤较为繁杂,容易造成误操作,带来安全隐患,所以写此脚本实现自动化主从同步。

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'