因为主从复制常常会因为各种因素导致有些许部分延迟,当master发生故障且不能ssh时,从库可能会丢失部分数据无法进行同步。
这时另起一台服务器,作为binlog server使用,实时从主库拉取binlog日志,以便master宕机后,其他从库可以从binlog server中恢复数据。
最好找一台额外的机器,必须要有5.6以上的版本,支持gtid并开启,我这里还是将就使用10.154.0.113也就是manager来作为binlog server。
1、编辑配置文件
$ vim /etc/mha/app1.cnf
[binlog1]
no_master=1
hostname=10.154.0.113
master_binlog_dir=/data/master/binlog
[binlog1]:标签,用于分别多台binlog server
no_master=1:不参与选主
master_binlog_dir:从主库拉取的日志存放在本地的路径,不是master存放binlog的日志路径
2、在manager上创建存放binlog目录
$ mkdir -p /data/master/binlog
$ chown -R mysql.mysql /data/*
3、拉取主库binlog日志
$ cd /data/master/binlog
$ mysqlbinlog -R --host=10.154.0.111 --user=mha --password=mha --raw --stop-never mysql-bin.000050 &
注意:
1、必须要进入该目录才能拉取日志。
2、--stop-never
:永不停止,源源不断的从master拉取日志,除非master宕机。
3、mysql-bin.000050
:从主库的哪个日志开始拉取,生产环境中,一般主从是已经接近同步状态,所以我们一般只拉取master当前使用的日志即可,无需从头拉起。在master的mysql中使用show master status;
查看当前使用的日志文件名。
特别注意第3点,如果master日志量过大,binlog server参数值又写的从头拉取日志,则会占用极大的带宽跟IO,造成网络波动。
4、重启MHA-manager
$ masterha_stop --conf=/etc/mha/app1.cnf
$ nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null> /var/log/mha/app1/manager.log 2>&1 &
$ masterha_check_status --conf=/etc/mha/app1.cnf
原文:https://www.cnblogs.com/tz90/p/14673124.html