【实用脚本】使用mysqlbinlog部署binlog server实时同步binlog

tanglu 2937 2020-05-28

脚本作用

1、实时拉取指定数据库实例上的binlog日志到本地进行存储,会自动判断正确的binlog,无需手动指定。可应用于数据增量备份、MHA binlog server。

2、判断binlog同步情况并邮件通知


脚本内容

#!/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


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开始复制


通知脚本

#!/bin/bash
echo > /usr/local/shell/check_binlog_backup.log
#统计应同步实例数量
INSTANCE=`ls /data/mysql_backup/ | grep -v archived |wc -l`
#统计当前同步实例数量
COUNT=`ps aux | grep mysqlbinlog | grep -v grep |wc -l`
#判断未同步实例并通知
if [ $COUNT -eq $INSTANCE ];then
  echo "`date +%F\ %T` : Binlog Server运行数和实例一致" | mail -s "Binlog Server运行数和实例一致" ops@huize.com,lome@huize.com
else
  COUNT_LIST=`ps aux | grep binlog_backup | grep "/bin/sh" | awk  '{print $12}' | awk -F '/' '{print $5}'| awk -F '_' '{print $1}'`
  echo -e "`date +%F\ %T` : Binlog Server运行数:$COUNT , 应同步实例数:$INSTANCE,当前正常同步实例信息: \n$COUNT_LIST" >> /usr/local/shell/check_binlog_backup.log
  cat /usr/local/shell/check_binlog_backup.log | mail -s "Binlog Server运行数量少于实例数,请检查" ops@huize.com,lome@huize.com
fi


版权声明
本站所有文章均为原创,转载请注明出处!小站维护不易,如果对您有所帮助,希望能点击一下站内广告,谢谢!
上一篇:大数据组件之Kafka基本概念与集群配置详细教程
下一篇:【实用脚本】使用xtrabackup实现不落地异地备份
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

微信二维码