【实用脚本】使用mysqlbinlog部署binlog server实时同步binlog
一、MySQL binlog server部署
1、binlog server作用
通过mysqlbinlog工具可以部署binlog server,实现实时拉取指定数据库实例上的binlog日志到本地进行统一存储,通过脚本化可以自动判断正确的binlog,无需手动指定同步文件,如果发生异常后还有通过邮件进行通知(邮件服务需自己部署)。可应用于数据增量备份、MHA binlog server
2、mysqlbinlog常用选项介绍
--read-from-remote-server:用于备份远程服务器的binlog。如果不指定该选项,则会查找本地的binlog。
--raw:binlog日志会以二进制格式存储在磁盘中,如果不指定该选项,则会以文本形式保存。
--user:用哪个MySQL用户进行binlog的复制,该用户只需要授予REPLICATION SLAVE权限。
--stop-never:mysqlbinlog可以只从远程服务器获取指定的几个binlog,也可将不断生成的binlog保存到本地。指定此选项则代表远程服务器不关闭或者连接未断开就持续进行binlog的复制
--to-last-log:mysqlbinlog工具不仅能够获取指定的binlog,还能持续获取后面更新的binlog。该选项在指定--stop-never后会自动打开
mysql-bin.000001:代表从哪个binlog开始复制
3、脚本内容
#!/bin/sh MYSQL_BIN=/usr/local/mysql/bin/mysql BACKUP_BIN=/usr/local/mysql/bin/mysqlbinlog LOCAL_BACKUP_DIR=/data/mysql_binlog_backup/public/binlog BACKUP_LOG=/data/mysql_binlog_backup/public/backuplog REMOTE_HOST=10.3.0.221 REMOTE_PORT=3306 REMOTE_USER='binlog_backup' REMOTE_PASS='binlog_backup' SERVER_ID='3023401' FIRST_BINLOG=`${MYSQL_BIN} -uroot -p123456 -h${REMOTE_HOST} -P${REMOTE_PORT} -e "show master status;" 2> /dev/null | grep "mysql-bin" | awk '{print $1}'` #create local_backup_dir if necessary mkdir -p ${LOCAL_BACKUP_DIR} cd ${LOCAL_BACKUP_DIR} if [ `ls -A "${LOCAL_BACKUP_DIR}" | wc -l` -eq 0 ];then LASTFILE=${FIRST_BINLOG} else LASTFILE=`ls -al ${LOCAL_BACKUP_DIR} | tail -n 1 | awk '{print $9}'` fi echo 'Starting binlog backup' ${BACKUP_BIN} -h${REMOTE_HOST} -P${REMOTE_PORT} -u${REMOTE_USER} -p${REMOTE_PASS} --raw --stop-never --read-from-remote-server --stop-never-slave-server-id=${SERVER_ID} ${LASTFILE} ${LOCAL_BACKUP_DIR} echo "实例binlog实时同步出错 $(date +%F\ %T)" | mail -s "实例binlog实时同步出错 $(date +%F\ %T)" ops@huize.com,lome@huize.com
二、binlog server巡检脚本
#!/bin/bash echo > /usr/local/shell/check_binlog_backup.log #统计应同步实例数量 INSTANCE_COUNT=`ls /data/mysql_backup/ | grep -v archived |grep -v bi1 | wc -l` #统计应同步实例名 ls /data/mysql_backup/ | grep -v archived |grep -v bi1 > /usr/local/shell/instance_list.txt #统计当前同步实例数量 BINLOG_COUNT=`ps aux | grep "_binlog_backup" | egrep -v "/usr/local/mysql/bin/mysqlbinlog|--color|grep|check_binlog_backup" |awk '{print $9,$12}'|wc -l` #统计应同步实例名 ps aux | grep "_binlog_backup" | egrep -v "/usr/local/mysql/bin/mysqlbinlog|--color|grep|check_binlog_backup" |awk '{print $12}'|awk -F'/' '{print $5}' | awk -F'_' '{print $1}' > /usr/local/shell/binlog_instance_list.txt # #判断未同步实例并通知 if [ $BINLOG_COUNT -eq $INSTANCE_COUNT ];then echo "`date +%F\ %T` : Binlog Server运行数量与实例数量一致,Binlog备份正常" | mail -s "Binlog备份运行正常" ops@huize.com else echo -e "`date +%F\ %T` : Binlog Server运行数:$BINLOG_COUNT , 应同步实例数:$INSTANCE_COUNT" >> /usr/local/shell/check_binlog_backup.log echo "" >> /usr/local/shell/check_binlog_backup.log echo -e "当前正常同步实例信息:" >> /usr/local/shell/check_binlog_backup.log ps aux | grep "_binlog_backup" | egrep -v "/usr/local/mysql/bin/mysqlbinlog|--color|grep|check_binlog_backup" |awk '{print $1,$9,$12}'>> /usr/local/shell/check_binlog_backup.log echo "" >> /usr/local/shell/check_binlog_backup.log echo -e "备份异常实例信息:" >> /usr/local/shell/check_binlog_backup.log for i in `grep -vwf /usr/local/shell/binlog_instance_list.txt /usr/local/shell/instance_list.txt` do echo "${i}实例Binlog备份异常,请运行/usr/local/shell/${i}_binlog_backup.sh &" >> /usr/local/shell/check_binlog_backup.log done cat /usr/local/shell/check_binlog_backup.log | mail -s "Binlog Server运行数量少于实例数,请检查" ops@huize.com fi
版权声明:本文章版权归数据库运维网(www.ywdba.cn)所有。如需引用本站内容,请注明来源及作者。
评论