四十六、MHA之binlog_server

binlog server介绍

因为主从复制常常会因为各种因素导致有些许部分延迟,当master发生故障且不能ssh时,从库可能会丢失部分数据无法进行同步。
这时另起一台服务器,作为binlog server使用,实时从主库拉取binlog日志,以便master宕机后,其他从库可以从binlog server中恢复数据。

四十六、MHA之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

学习来自:B站课程:搭建binlogserver P147