mysql-中间件-Atlas

MHA主从切换优先级参数

candidate_master=1 check_repl_delay=0

这两个参数同时加上,则该标签里的优先级被强制提高,切换一定是到这个。

[root@db04 ~]# cat /etc/mha/app1.cnf 
[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1
master_binlog_dir=/usr/local/mysql/data
password=mha
ping_interval=2
repl_password=1
repl_user=slave
ssh_user=root
user=mha

[server1]
hostname=172.16.1.51
port=3306

[server2]
hostname=172.16.1.52
port=3306

[server3]
candidate_master=1   #+
check_repl_delay=0   #+
hostname=172.16.1.53
port=3306

[server4]
hostname=172.16.1.54
port=3306

加这两个参数就会强制切换到server3上去。但是这样切换速度会比较慢。

加上数据验证

use test;
create table student(
Sno int(10) NOT NULL COMMENT '学号',
Sname varchar(16) NOT NULL COMMENT '姓名',
Ssex char(2) NOT NULL COMMENT '性别',
Sage tinyint(2)  NOT NULL default '0' COMMENT '学生年龄',
Sdept varchar(16)  default NULL  COMMENT '学生所在系别', 
PRIMARY KEY  (Sno) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

编写一个脚本

[root@db04 ~]# cat sql.sh 
#!/bin/bash
MysqlLogin="mysql"
i=1
while true; do
 ${MysqlLogin} -e "insert into test.student values (NULL,'zls"$i"','m','21','computer"$i"');"
 ((i++))
 sleep 1;
done

当前主库是54

停掉51的IO线程, stop slave io_thread;

怎么能保证一定能切换到DB03,要保证DB03的数据时最新的。

把DB52的IO线程也停掉。  stop slave io_thread;

## MySQL压测查询语句

mysqlslap --defaults-file=/etc/my.cnf \
--concurrency=100 --iterations=1 --create-schema='test' \
--query="select * from test.student' where sname='zls'" engine=innodb \
--number-of-queries=200000 -verbose

# ifconfig 创建虚拟IP

**创建**

[root@db01 ~]# ifconfig eth1:1 172.16.1.77 netmask 255.255.255.0

**查看**

[root@db01 ~]# ifconfig eth1:1
eth1:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.1.77  netmask 255.255.255.0  broadcast 172.16.1.255
        ether 00:0c:29:d7:a4:59  txqueuelen 1000  (Ethernet)

**取消**

[root@db01 ~]# ifconfig eth1:1 down

- 似乎需要需要网卡,对应否则卡住,自动退出Xshell
- ifconfig eth0:0 10.0.0.77 netmask 255.255.255.0
- 命令行设置是临时生效,需要永久生效需要写网卡配置文件。

https://www.cnblogs.com/JohnABC/p/5951347.html

MHA VIP地址漂移 (无缝用户体验-高可用)

MySQL高可用方案: MHA   MMM   mycat   hartbeat+DRBD  双主+keepalived  MGR

不建议keepalived配合MHA使用。

但是总监说,我就想使用keepalived,你这时可以对总监说,我请你吃你最喜欢吃的大嘴巴子。

所以我们推荐使用MHA自带的VIP漂移功能,这是个用PERL写的脚本。

wget http://download.driverzeng.com/master_ip_failover

把下面的参数加入到mha配置文件中

[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1
master_binlog_dir=/usr/local/mysql/data
password=mha
master_ip_failover_script=/usr/local/bin/master_ip_failover #+
ping_interval=2
repl_password=1
repl_user=slave
ssh_user=root
user=mha
...


[root@db04 ~]# cp master_ip_failover /usr/local/bin/

1.语法 2.格式 3.权限 都没问题,MHA软件才可以启动。

chmod +x /usr/local/bin/master_ip_failover
dos2unix /usr/local/bin/master_ip_failover  WINDOWS传的文件有时候要转成unix格式

在主库上绑定虚拟网卡 ifconfig eth1:1 172.16.1.55/24

[root@db04 ~]# hostname -I
10.0.0.54 172.16.1.54
[root@db04 ~]# ifconfig eth1:1 172.16.1.55/24
[root@db04 ~]# hostname -I
10.0.0.54 172.16.1.54 172.16.1.55 

**VIP漂移切换基础原理**

ssh 172.16.1.53 ifconfig eth1:1 down
ssh 172.16.1.51 ifconfig eth1:1 172.16.1.55/24

![](../../xmd-img/ximg/2018-12-07-11-44-47.png)

![](../../xmd-img/ximg/2018-12-07-11-44-47.png)

首先完成MHA基础集群,确认主从复制工作正常。

**important**

MHA基础集群,比如1主3从,主库挂掉,MHA管理节点自动选择一台从库将其提升为新的主库,另外2台从库指向新的主库。但是这种架构还是有点问题,那就是切换为新主库后,主库的IP地址肯定就变动了,这样程序代码还是无法访问,需要手动去修改程序代码,以指向新的主库,这显然还不够智能。因此我们利用MHA软件自带的虚拟IP地址漂移的功能,让程序代码始终指向虚拟IP地址,这样在主从切换的过程中,虚拟IP地址也发生了切换,这种切换面向用户或者说代码是透明的,程序无需任何改动,真正做到无缝用户体验。

0 快速复原MHA主从复制集群

配置VIP漂移之前,首先确认1主3从,4台机器的主从复制正常。

**快速恢复数据库到初始状态**

/etc/init.d/mysqld stop
rm -rf /usr/local/mysql/data
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
/etc/init.d/mysqld start
mysql
show databases;

**快速回复配置文件**


#基于GTID的主从复制
cat >/etc/my.cnf<<EOF
[mysqld]
server_id = 4
relay_log_purge = 0
log_bin = mysql-bin
gtid_mode=ON
enforce_gtid_consistency
log-slave-updates
skip_name_resolve
EOF
/etc/init.d/mysqld restart


#传统模式的主从复制
/etc/init.d/mysqld stop
cat >/etc/my.cnf<<EOF
[mysqld]
server_id = 3
relay_log_purge = 0
log_bin = mysql-bin
skip_name_resolve
EOF
/etc/init.d/mysqld start

快速恢复从库

stop slave;
reset slave all;
change master to
    master_host='172.16.1.51',
    master_user='slave',
    master_password='1',
    master_auto_position=1;
start slave;
show slave status\G


stop slave;
reset slave all;
change master to
    master_host='172.16.1.77',
    master_user='slave',
    master_password='1',
    master_log_file='mysql-bin.000017',
    master_log_pos=120;
start slave;
show slave status\G

1 在主库上配置VIP

[root@db01 ~]# ifconfig eth1:1 172.16.1.77/24
[root@db01 ~]# hostname -I
10.0.0.51 172.16.1.51 172.16.1.77 

VIP需要和其它IP地址不同

2 在MHA管理节点上增加控制脚本

官方IP切换脚本帮助 https://github.com/yoshinorim/mha4mysql-manager/wiki/Parameters#master_ip_failover_script

shell> cat /usr/local/bin/master_ip_failover
#!/usr/bin/env perl

use strict;
use warnings FATAL => 'all';
use Getopt::Long;

my (
  $command,        $ssh_user,         $orig_master_host,
  $orig_master_ip, $orig_master_port, $new_master_host,
  $new_master_ip,  $new_master_port,  $new_master_user,
  $new_master_password
);

my $vip = '172.16.1.77/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig eth1:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth1:$key down";

GetOptions(
    'command=s'          => \$command,
    'ssh_user=s'         => \$ssh_user,
    'orig_master_host=s' => \$orig_master_host,
    'orig_master_ip=s'   => \$orig_master_ip,
    'orig_master_port=i' => \$orig_master_port,
    'new_master_host=s'  => \$new_master_host,
    'new_master_ip=s'    => \$new_master_ip,
    'new_master_port=i'  => \$new_master_port,
);

exit &main();

sub main {

    print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";

    if ( $command eq "stop" || $command eq "stopssh" ) {

        my $exit_code = 1;
        eval {
            print "Disabling the VIP on old master: $orig_master_host \n";
            &stop_vip();
            $exit_code = 0;
        };
        if ($@) {
            warn "Got Error: $@\n";
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "start" ) {

        my $exit_code = 10;
        eval {
            print "Enabling the VIP - $vip on the new master - $new_master_host \n";
            &start_vip();
            $exit_code = 0;
        };
        if ($@) {
            warn $@;
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "status" ) {
        print "Checking the Status of the script.. OK \n";
        exit 0;
    }
    else {
        &usage();
        exit 1;
    }
}

sub start_vip() {
    `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}

sub stop_vip() {
    return 0 unless ($ssh_user);
    `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`
}

sub usage {
    print
    "Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}

3 授权控制脚本权限

chmod +x /usr/local/bin/master_ip_failover
dos2unix /usr/local/bin/master_ip_failover

4 在MHA配置文件中引入控制脚本

shell> cat /etc/mha/app1.cnf 
[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
user=mha
password=mha
repl_user=slave
repl_password=1
ping_interval=2
ssh_user=root

[server1]
hostname=172.16.1.51
port=3306

[server2]
hostname=172.16.1.52
port=3306

[server3]
hostname=172.16.1.53
port=3306

[server4]
hostname=172.16.1.54
port=3306

5 检查并启动MHA软件

启动前检查

masterha_check_repl --conf=/etc/mha/app1.cnf

启动

nohup masterha_manager  --conf=/etc/mha/app1.cnf  --remove_dead_master_conf  --ignore_last_failover &>> /var/log/mha/app1/manager.log &

启动后检查

shell> masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:9375) is running(0:PING_OK), master:172.16.1.52

停止

masterha_stop --conf=/etc/mha/app1.cnf

6 模拟测试

模拟主库故障,观察虚拟IP如何漂移。

1 打开MHA日志

root@db04 ~]# tailf /var/log/mha/app1/manager.log 

2 停掉主库

[root@db01 ~]# hostname -I
10.0.0.51 172.16.1.51 172.16.1.77 
[root@db01 ~]# /etc/init.d/mysqld stop

3 关键日志内容截取如下

Fri Dec  7 19:41:44 2018 - [info]   /usr/local/bin/master_ip_failover --orig_master_host=172.16.1.51 --orig_master_ip=172.16.1.51 --orig_master_port=3306 --command=stopssh --ssh_user=root  
IN SCRIPT TEST====/sbin/ifconfig eth1:1 down==/sbin/ifconfig eth1:1 172.16.1.77/24===
Disabling the VIP on old master: 172.16.1.51 
Fri Dec  7 19:41:45 2018 - [info]  done.

From:
172.16.1.51(172.16.1.51:3306) (current master)
 +--172.16.1.52(172.16.1.52:3306)
 +--172.16.1.53(172.16.1.53:3306)
 +--172.16.1.54(172.16.1.54:3306)
To:
172.16.1.52(172.16.1.52:3306) (new master)
 +--172.16.1.53(172.16.1.53:3306)
 +--172.16.1.54(172.16.1.54:3306)

Fri Dec  7 19:41:47 2018 - [info]   /usr/local/bin/master_ip_failover --command=start --ssh_user=root --orig_master_host=172.16.1.51 --orig_master_ip=172.16.1.51 --orig_master_port=3306 --new_master_host=172.16.1.52 --new_master_ip=172.16.1.52 --new_master_port=3306 --new_master_user='mha' --new_master_password='mha'  
IN SCRIPT TEST====/sbin/ifconfig eth1:1 down==/sbin/ifconfig eth1:1 172.16.1.77/24===
Enabling the VIP - 172.16.1.77/24 on the new master - 172.16.1.52 
Fri Dec  7 19:41:47 2018 - [info]  OK.

----- Failover Report -----
app1: MySQL Master failover 172.16.1.51(172.16.1.51:3306) to 172.16.1.52(172.16.1.52:3306) succeeded
172.16.1.52(172.16.1.52:3306): Resetting slave info succeeded.
Master failover to 172.16.1.52(172.16.1.52:3306) completed successfully.

从MHA日志中可以清楚的看到172.16.1.52已经提升为新主库,虚拟IP 172.16.1.77已经漂移到52机器上。

4 人工检查一下虚拟IP

51机器上已经没有虚拟IP

[root@db01 ~]# hostname -I
10.0.0.51 172.16.1.51

虚拟IP来到了52机器上

[root@db02 ~]# hostname -I
10.0.0.52 172.16.1.52 172.16.1.77

5 恢复51机器

  • 在MHA日志中过滤change master语句
  • 启动51机器
  • 让51机器作为从库指向新主库52
  • 修复MHA配置文件
  • 检查MHA状态
  • 启动MHA软件

    [root@db04 ~]# grep -i 'change master to'  /var/log/mha/app1/manager.log 
    CHANGE MASTER TO MASTER_HOST='172.16.1.52', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=120, MASTER_USER='slave', MASTER_PASSWORD='xxx';
    [root@db01 ~]# /etc/init.d/mysqld start
    [root@db01 ~]# mysql
    mysql> CHANGE MASTER TO MASTER_HOST='172.16.1.52', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=120, MASTER_USER='slave', MASTER_PASSWORD='xxx';
    mysql> start slave;
    

MySQL中间件Atlas (读写分离)

官方帮助 https://github.com/Qihoo360/Atlas/wiki

常见读写分离的软件 mycat atlas mysql-proxy

基础架构

1 安装Atlas

官方安装教程: https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E5%AE%89%E8%A3%85

wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
rpm -ivh /root/Atlas-2.2.1.el6.x86_64.rpm

2 配置Atlas

无注释版

[root@db04 ~]# cat /usr/local/mysql-proxy/conf/test.cnf
[mysql-proxy]
admin-username = user
admin-password = pwd
proxy-backend-addresses = 172.16.1.77:3306
proxy-read-only-backend-addresses = 172.16.1.52:3306,172.16.1.53:3306,172.16.1.54:3306
pwds = mha:O2jBXONX098=
daemon = true
keepalive = true
event-threads = 4
log-level = error
log-path = /usr/local/mysql-proxy/log
sql-log = ON
sql-log-slow = 10
proxy-address = 0.0.0.0:3307
admin-address = 0.0.0.0:2345
charset = utf8

完整注释版

[root@db04 ~]# cat /usr/local/mysql-proxy/conf/test.cnf
[mysql-proxy]

#带#号的为非必需的配置项目

#管理接口的用户名
admin-username = user

#管理接口的密码
admin-password = pwd

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
#AS:这里可以填写虚拟IP地址
proxy-backend-addresses = 172.16.1.77:3306

#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
#AS: 填写从库的端口和IP地址,如果想让主库也分担读的请求可将主库也填写进去
proxy-read-only-backend-addresses = 172.16.1.52:3306,172.16.1.53:3306,172.16.1.54:3306

#(必备,根据实际情况配置)用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,用户名与密码之间用冒号分隔。主从数据库上需要先创建该用户并设置密码(用户名和密码在主从数据库上要一致)。比如用户名为myuser,密码为mypwd,执行./encrypt mypwd结果为HJBoxfRsjeI=。
#[root@db04 ~]# /usr/local/mysql-proxy/bin/encrypt mha
#O2jBXONX098=

pwds = mha:O2jBXONX098=

#(必备,默认值即可)Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true
daemon = true

#(必备,默认值即可)设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true
keepalive = true

#(必备,根据实际情况配置)工作线程数,推荐设置成系统的CPU核数的2至4倍
event-threads = 4

#(必备,默认值即可)日志级别,分为message、warning、critical、error、debug五个级别
log-level = error

#(必备,默认值即可)日志存放的路径
log-path = /usr/local/mysql-proxy/log

#(必备,根据实际情况配置)SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,该模式下日志刷新是基于缓冲区的,当日志填满缓冲区后,才将日志信息刷到磁盘。REALTIME用于调试,代表记录SQL日志且实时写入磁盘,默认为OFF
sql-log = ON

#慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输出全部日志。
sql-log-slow = 10

#实例名称,用于同一台机器上多个Atlas实例间的区分
#instance = test

#(必备,默认值即可)Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:3307

#(必备,默认值即可)Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345

#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
#tables = person.mt.id.3

#默认字符集,设置该项后客户端不再需要执行SET NAMES语句
charset = utf8

#允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接
#client-ips = 127.0.0.1, 192.168.1

#Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置
#lvs-ips = 192.168.1.1

3 启动

启动: /usr/local/mysql-proxy/bin/mysql-proxyd test start

停止: /usr/local/mysql-proxy/bin/mysql-proxyd test stop

重启: /usr/local/mysql-proxy/bin/mysql-proxyd test restart

检查: ps -ef | grep mysql-proxy

[root@db04 ~]# netstat -lntup | grep mysql-proxy
tcp   0   0 0.0.0.0:2345   0.0.0.0:*    LISTEN      4470/mysql-proxy #atlas运维管理入口
tcp   0   0 0.0.0.0:3307   0.0.0.0:*    LISTEN      4470/mysql-proxy #altas用户访问入口

4 管理

用户访问Atlas

shell> mysql -h127.0.0.1 -P3307 -umha -pmha

运维管理Atlas

shell> mysql -h127.0.0.1 -P2345 -uuser -ppwd
mysql> select * from help;
+----------------------------+---------------------------------------------------------+
| command                    | description                                             |
+----------------------------+---------------------------------------------------------+
| SELECT * FROM help         | shows this help                                         |
| SELECT * FROM backends     | lists the backends and their state                      |
| SET OFFLINE $backend_id    | offline backend server, $backend_id is backend_ndx's id |
| SET ONLINE $backend_id     | online backend server, ...                              |
| ADD MASTER $backend        | example: "add master 127.0.0.1:3306", ...               |
| ADD SLAVE $backend         | example: "add slave 127.0.0.1:3306", ...                |
| REMOVE BACKEND $backend_id | example: "remove backend 1", ...                        |
| SELECT * FROM clients      | lists the clients                                       |
| ADD CLIENT $client         | example: "add client 192.168.1.2", ...                  |
| REMOVE CLIENT $client      | example: "remove client 192.168.1.2", ...               |
| SELECT * FROM pwds         | lists the pwds                                          |
| ADD PWD $pwd               | example: "add pwd user:raw_password", ...               |
| ADD ENPWD $pwd             | example: "add enpwd user:encrypted_password", ...       |
| REMOVE PWD $pwd            | example: "remove pwd user", ...                         |
| SAVE CONFIG                | save the backends to config file                        |
| SELECT VERSION             | display the version of Atlas                            |
+----------------------------+---------------------------------------------------------+

MHA配合Atlas-实现Altas的高可用

stop slave;
reset slave all;
change master to
    master_host='172.16.1.51',
    master_user='slave',
    master_password='1',
    master_port=3306,
    master_log_file='mysql-bin.000022',
    master_log_pos=120;
start slave;
show slave status\G

修改mysql启动端口(修改端口本地指定错误端口也能连接,待解决?)

#传统模式的主从复制(注意更改server_id)
/etc/init.d/mysqld stop
cat >/etc/my.cnf<<EOF
[mysqld]
server_id = 3
relay_log_purge = 0
log_bin = mysql-bin
port = 3306
skip_name_resolve
EOF
/etc/init.d/mysqld start
cat /etc/my.cnf

mysql> show variables like '%port%';

[root@db04 ~]# cat /usr/local/mysql-proxy/conf/test.cnf
[mysql-proxy]
admin-username = user
admin-password = pwd
proxy-backend-addresses = 172.16.1.77:3306
proxy-read-only-backend-addresses = 172.16.1.52:3305,172.16.1.53:3305,172.16.1.54:3305
pwds = mha:O2jBXONX098=
daemon = true
keepalive = true
event-threads = 4
log-level = error
log-path = /usr/local/mysql-proxy/log
sql-log = ON
sql-log-slow = 10
proxy-address = 0.0.0.0:3306
admin-address = 0.0.0.0:2345
charset = utf8

binlog-server

如果主库发生断电之后如何操纵

可以利用rsync实时同步,把binlog日志同步到另外一台机器。这种方案有些问题。

在MHA配置文件中增加如下内容

[binlog1]
no_master=1
hostname=172.16.1.54
master_binlog_dir=/data/mysql/binlog/


[root@db04 ~]# cat /etc/mha/app1.cnf
[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
password=mha
ping_interval=2
repl_password=1
repl_user=slave
ssh_user=root
user=mha

[server1]
hostname=172.16.1.51
port=3306

[server2]
hostname=172.16.1.52
port=3306

[server3]
hostname=172.16.1.53
port=3306

[server4]
hostname=172.16.1.54
port=3306

[binlog1]
no_master=1
hostname=172.16.1.54
master_binlog_dir=/data/mysql/binlog/


**利用MySQL客户端备份工具mysqlbinlog远程备份其它机器的binlog**

shell> hostname -I
10.0.0.54 172.16.1.54
shell> mkdir -p /data/mysql/binlog/
shell> cd /data/mysql/binlog/
shell> mysqlbinlog  -R --host=172.16.1.51 --user=mha --password=mha --raw  --stop-never mysql-bin.000001 &
shell> ps -ef | grep mysqlbinlog

执行上述命令,后台mysqlbinlog进程会自动连接到主库(172.16.1.51),并通过mha账号拿取主库上的binlog,从第一份binlog开始,把全部的binlog都拿过来,当主库上的binlog更新,比如我们自己flush logs时,这个后台mysqlbinlog程序会自动把新的binlog拉取过来。

[root@db04 binlog]# ls -l /data/mysql/binlog/
total 16
-rw-rw---- 1 root root 120 Dec  7 14:48 mysql-bin.000001
-rw-rw---- 1 root root 143 Dec  7 14:48 mysql-bin.000002
-rw-rw---- 1 root root 167 Dec  7 14:49 mysql-bin.000003
-rw-rw---- 1 root root 120 Dec  7 14:49 mysql-bin.000004

如果拉取binlog失败,建议全部MySQL机器开启GTID的主从复制。