MySQL备份数据都是MySQL备份+binlog,这样才能保证数据的完整性。下面就是利用mysqlbinlog搭建mysql binlog server,可以把binlog传到远程存储上。
试验环境
MySQL binlog 源服务器:10.72.16.112
MySQL binlog server目的服务器:10.72.16.50
因为需要把10.72.16.112的binlog传到10.72.16.50上,在10.72.16.50执行
mysqlbinlog --read-from-remote-server --raw --host=10.72.16.112 --port=3306 --user=repl --password=密码 --stop-never mysql-bin.000006
参数说明如下:
--read-from-remote-server:用于备份远程服务器的binlog。如果不指定该选项,则会查找本地的binlog。
--raw:binlog日志会以二进制格式存储在磁盘中,如果不指定该选项,则会以文本形式保存。
--user:复制的MySQL用户,只需要授予REPLICATION SLAVE权限。
--stop-never:mysqlbinlog可以只从远程服务器获取指定的几个binlog,也可将不断生成的binlog保存到本地。指定此选项,代表只要远程服务器不关闭或者连接未断开,mysqlbinlog就会不断的复制远程服务器上的binlog。
mysql-bin.000006:代表从哪个binlog开始复制,一般会从mysql-bin.000001开始
--stop-never-slave-server-id:在备份远程服务器的binlog时,mysqlbinlog本质上就相当于一个从服务器,该选项就是用来指定从服务器的server-id的。默认为-1。
--to-last-log:代表mysqlbinlog不仅能够获取指定的binlog,还能获取其后生成的binlog,获取完了,才终止。如果指定了--stop-never选项则会隐式打开--to-last-log选项。
提示:备份的目录是命令所运行的目录
有个问题就是mysqlbinlog断掉后,只能重新运行并指定从哪个binlog开始同步。写个shell监控mysqlbinlog进程,如下:
#!/bin/bash
# 将日期记入日志date
# 由于磁盘空间有限,删除3天前的binlog
find /root/70_binlogs/ -name "mysql-bin*" -mtime +3 -exec rm -rf {} \;
# 找到最新的binlog名字
binlogfile=`ls -lthr /root/70_binlogs|tail -n1|awk '{print $NF}'`
# 判断mysqlbinlog进程是否存在,如果不存在就重启mysqlbinlogps -ef|grep -w mysqlbinlog|grep -v grep
if [[ $? = 0 ]];then
echo "mysqlbinglog process is ok."
else
echo "mysqlbinglog process is not work."cd/root/70_binlogsif [[ $? = 0 ]];then
/usr/local/mysql/bin/mysqlbinlog --read-from-remote-server --raw --host=IP --port=3307 --user=user --password=password --stop-never $binlogfile &
else
echo "mysqlbinglog command excute fail."exitfi
fi
加入crontab,每分钟执行一次
[root@test1~]# crontab -l
# mysqlbinlog server monitor*/1 * * * * sh /root/mysqlbinlog_check.sh >> /tmp/mysqlbinlog_server.log
欢迎转载,请注明出处
参考
如何远程备份MySQL binlog - iVictor - 博客园 https://www.cnblogs.com/ivictor/p/5502240.html