MySQL主从同步

主从复制主要是将主服务器的DDL和DML操作,通过二进制日志(binlog日志),传到从服务器上,然后在从服务器上执行这些操作,从而实现主服务器与从服务器的数据同步。主从复制可以用于以下功能:
1. 主服务器如果出现问题,可以切换到从服务器从而提供服务;
2. 可以在从服务器上执行查询,从而降低主服务器的压力;
3. 可以备份从服务器的数据,从而避免备份期间对主服务器提供服务的影响;

环境

主从服务器的操作系统版本一致,mysql版本都为5.7.21。
master主库
10.27.143.195
slave从库
10.27.143.196

主库配置

配置my.cnf

$ vi my.cnf
log-bin=mysql-bin
server_id=27143195

# 需要备份的数据库
# binlog-do-db=orders
# 不需要备份的数据库
# binlog-ignore-db=mysql

创建用户

-- 创建用户
>CREATE USER 'replication'@'10.27.143.196' IDENTIFIED BY '123456';
-- 配置主从复制权限
>GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.27.143.196';

查看binlog file文件名称和 position值位置

>show master status;
+------------------+-----------+--------------+------------------+--------------------------------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                          |
+------------------+-----------+--------------+------------------+--------------------------------------------+
| mysql-bin.000002 | 541773075 |              |                  | b0d8cb67-8a3a-11e8-a54a-002230a30c9f:1-253 |
+------------------+-----------+--------------+------------------+--------------------------------------------+

从库配置

-- 配置连接信息
>CHANGE MASTER TO MASTER_HOST='10.27.143.195', 
MASTER_USER='replication',
MASTER_PASSWORD='123456',
MASTER_PORT=5002,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=541773075;

-- 启动从服务器复制线程
>start slave

-- 查看主从复制状态
>show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.27.143.195
                  Master_User: replication
                  Master_Port: 5002
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 541773075
               Relay_Log_File: relay.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 541773075
              Relay_Log_Space: 517
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 27143195
                  Master_UUID: b0d8cb67-8a3a-11e8-a54a-002230a30c9f
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set: 7491868f-8bcd-11e8-a7e8-002278fbe73a:1-3
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

Slave_IO_State              从库的当前状态
Slave_IO_Running          读取主服务器的二进制日志的I/O线程是否正在运行
Slave_SQL_Running       读取主服务器的二进制日志事件的SQL线程是否正在运行,与I/O线程类似
Seconds_Behind_Master 该值为0,表示已经同步

测试

-- 在主库执行
>create database `testrep`;
>use `testrep`;
>CREATE TABLE `sync_test` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(255) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
>​insert into sync_test values(1,'test1');

-- 在从库查看
>show databases;

可以在从库中看到主库创建的数据库和表。

一些命令

-- 查看主服务器运行状态
>show master status;
+------------------+-----------+--------------+------------------+--------------------------------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                          |
+------------------+-----------+--------------+------------------+--------------------------------------------+
| mysql-bin.000002 | 541773075 |              |                  | b0d8cb67-8a3a-11e8-a54a-002230a30c9f:1-253 |
+------------------+-----------+--------------+------------------+--------------------------------------------+

-- 查看从服务器主机列表
>show slave hosts;
+-----------+---------------+------+-----------+--------------------------------------+
| Server_id | Host          | Port | Master_id | Slave_UUID                           |
+-----------+---------------+------+-----------+--------------------------------------+
|  27143196 | 10.27.143.196 | 5002 |  27143195 | 7491868f-8bcd-11e8-a7e8-002278fbe73a |
+-----------+---------------+------+-----------+--------------------------------------+

-- 查看binlog文件列表
>show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 | 541773560 |
+------------------+-----------+

-- 查看第一个binlog文件内容
>show binlog events;

-- 查看指定binlong文件内容
>show binlog events in 'mysql-bin.000001';

-- 启动从库复制线程,从服务器执行
>start slave;

-- 停止从库复制线程,从服务器执行
>stop slave;

-- 查看主库所拥有的从库
> select * from information_schema.processlist as p where p.command = 'Binlog Dump'\G
*************************** 1. row ***************************
           ID: 43636
         USER: replication
         HOST: 10.27.143.196:15692
           DB: NULL
      COMMAND: Binlog Dump
         TIME: 19998
        STATE: Master has sent all binlog to slave; waiting for more updates
         INFO: NULL
      TIME_MS: 19998010
    ROWS_SENT: 0
ROWS_EXAMINED: 0
1 row in set (0.00 sec)

-- 查看从库所拥有的从库
>show variables like 'server_id';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| server_id     | 27143195 |
+---------------+----------+
1 row in set (0.00 sec)

主从复制实现细节

MySQL实现主从复制一共有三个线程,分别为主服务器binlog转储线程,从服务器I/O线程,从服务器SQL线程。

主服务器Binlog Dump线程

当从服务器与主服务器建立连接以后,主服务器会创建binlog dump线程,该线程会将binlog文件内容发送到从服务器。binlog dump线程获取binlog文件的锁,用于读取要发送到从服务器的每个事件,一旦读取了事件,便释放锁。

从服务器I/O线程

当在从服务器中执行 start slave 命令时,从服务器将创建一个I/O线程,该线程连接到主服务器,并要求它发送binlog的更新日志。从服务器I/O线程读取主服务器转储线程发送的日志更新,并将它们复制到本地的binlog日志中。

从服务器SQL线程

从服务器SQL线程用来读取I/O线程写入的日志,并执行其中的事件。

具体过程如下:
1. 从库执行 start salve ,开启主从复制开关。
2. 从库的 IO 线程会使用主库上授权的用户请求连接主库,并请求指定的 binlog 日志。
3. 主库接收到来自从库的 IO 线程的请求后,主库上负责复制的IO线程根据从库的请求信息,读取指定的 binlog 文件的指定位置,返回给从数据库的  IO线程,返回的信息除了本次请求的日志内容外,还是有本次返回的日志内容后在主库上新的 binlog 文件名称及在 binlog 中的位置(供从库下次请求 binlog 使用)。
4. 从库的 IO 线程获取到来自主数据上的 IO 线程发送的 binlog 后,将 binlog 中的内容依次写入到从库自身的 relaylog(中继日志)文件(Mysql-info-realy-bin.XXXX) 的最末端,并将新的 binlog 文件名和位置记录到 Master-info 文件中,以便下一次读取主库的新 binlog 日志时,能够告诉主库需要从新 binlog 日志的哪个文件哪个位置开始返回给从库。
5. 从库的 sql 线程会实时的检测本地 relay log 中新增的日志内容,然后及时把 log 文件中的内容解析成在主库曾经执行的 sql 语句,并在从库上按顺序执行这些 sql 语句。
至此,正常情况下,主从数据库,就可以实现同步。

mysql主从复制 主主复制 

上述线程可以使用命令show processlist\G来查看。

-- 在主服务器中执行
>show processlist\G
*************************** 1. row ***************************
           Id: 17784
         User: root
         Host: localhost
           db: testrep
      Command: Query
         Time: 0
        State: starting
         Info: show processlist
    Rows_sent: 0
Rows_examined: 0
*************************** 2. row ***************************
           Id: 17921
         User: replication
         Host: 10.27.143.196:21098
           db: NULL
      Command: Binlog Dump
         Time: 7816
        State: Master has sent all binlog to slave; waiting for more updates
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
2 rows in set (0.00 sec)
--第二条记录即为主服务器上的转储线程

-- 在从服务器中执行
>show processlist\G
*************************** 1. row ***************************
           Id: 486
         User: root
         Host: localhost
           db: testrep
      Command: Query
         Time: 0
        State: starting
         Info: show processlist
    Rows_sent: 0
Rows_examined: 0
*************************** 2. row ***************************
           Id: 1436
         User: system user
         Host:
           db: NULL
      Command: Connect
         Time: 43
        State: Waiting for master to send event
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
*************************** 3. row ***************************
           Id: 1437
         User: system user
         Host:
           db: NULL
      Command: Connect
         Time: 43
        State: Slave has read all relay log; waiting for more updates
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
*************************** 4. row ***************************
           Id: 1438
         User: system user
         Host:
           db: NULL
      Command: Connect
         Time: 43
        State: Waiting for an event from Coordinator
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
*************************** 5. row ***************************
           Id: 1439
         User: system user
         Host:
           db: NULL
      Command: Connect
         Time: 43
        State: Waiting for an event from Coordinator
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
*************************** 6. row ***************************
           Id: 1440
         User: system user
         Host:
           db: NULL
      Command: Connect
         Time: 43
        State: Waiting for an event from Coordinator
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
*************************** 7. row ***************************
           Id: 1441
         User: system user
         Host:
           db: NULL
      Command: Connect
         Time: 43
        State: Waiting for an event from Coordinator
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
*************************** 8. row ***************************
           Id: 1442
         User: system user
         Host:
           db: NULL
      Command: Connect
         Time: 43
        State: Waiting for an event from Coordinator
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
*************************** 9. row ***************************
           Id: 1443
         User: system user
         Host:
           db: NULL
      Command: Connect
         Time: 43
        State: Waiting for an event from Coordinator
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
*************************** 10. row ***************************
           Id: 1444
         User: system user
         Host:
           db: NULL
      Command: Connect
         Time: 43
        State: Waiting for an event from Coordinator
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
*************************** 11. row ***************************
           Id: 1445
         User: system user
         Host:
           db: NULL
      Command: Connect
         Time: 43
        State: Waiting for an event from Coordinator
         Info: NULL
    Rows_sent: 0
Rows_examined: 0
11 rows in set (0.00 sec)
-- 第2、4、5、6、7、8、9、10、11为I/O线程,第3条为SQL线程。

搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析 

MySQL多实例

为了配置MySQL的级联复制,在环境中的从服务器上需要配置多个(2个)MySQL实例。以下为配置步骤。

配置多实例一共有两种方式,第一种为使用多个配置文件启动不同的进程实现多实例,第二种为利用mysqld_multi,使用单个配置文件来实现多实例。这里使用多个配置文件实现多实例。

从服务器上已经有一个MySQL数据库实例,这里再添加一个。

# 第一个库
$ sudo mkdir -p /opt/local/mysql/var/ /opt/tmp
$ sudo chown -R mysql:mysql /opt/local/mysql/var /opt/tmp

# 第二个库
$ sudo mkdir -p /opt/local/mysql/var1/ /opt/tmp1
$ sudo chown -R mysql:mysql /opt/local/mysql/var1 /opt/tmp1

初始化数据库

MySQL加载配置文件的过程为:/etc/my.cnf > basedir/my.cnf > datadir/my.cnf,所以这里把配置文件放到每个实例的数据目录下。

# 初始化第一个库实例
$ sudo mysqld --initialize-insecure --datadir=/opt/local/mysql/var/ --user=mysql
# 初始化第二个库实例
$ sudo mysqld --initialize-insecure --datadir=/opt/local/mysql/var1/ --user=mysql

启动

# 启动第一个实例
$ sudo mysqld_safe --defaults-file=/opt/local/mysql/var/my.cnf &
# 启动第二个实例
$ sudo mysqld_safe --defaults-file=/opt/local/mysql/var1/my.cnf &

登录

# 登录第一个实例
$ mysql --user=root --password="" -S /opt/tmp/mysql.sock
# 登录第二个实例
$ mysql --user=root --password="" -S /opt/tmp1/mysql.sock

enlightened在配置时,出现以下错误

InnoDB: The Auto-extending innodb_system data file '/opt/local/mysql/var/ibdata1' is of a different size 768 pages (rounded down to MB) than specified in the .cnf file: initial 6400 pages, max 0 (relevant if non-zero) pages!

解决:
Upgrading MySQL 5.1 to 5.6 service failed to start 
MySQL 5.7.12 refusing to run due to innodb_system data file ‘/var/db/mysql/ibdata1’ being too small 

MySQL多实例安装配置 

MySQL级联复制(A->B->C)

B是A的从,C是B的从,A/B/C的配置如下:
A: 10.27.143.195:5002
B: 10.27.143.196:5002
C: 10.27.143.196:5005

配置A

登录A

-- 创建用户
>CREATE USER 'replication'@'10.27.143.196' IDENTIFIED BY '123456';
-- 配置主从复制权限
>GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.27.143.196';

-- 查看数据状态
>show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000003
         Position: 686
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set: b0d8cb67-8a3a-11e8-a54a-002230a30c9f:1-260
1 row in set (0.00 sec)

配置B

配置my.cnf

$ vi my.cnf
[client]
port=5002
socket=/opt/tmp/mysql.sock

[mysql]
port=5002
basedir=/usr
datadir=/opt/local/mysql/var/
tmpdir=/opt/tmp

log-bin=mysql-bin
server_id=27143197

log-slave-updates

登录B

-- 创建用户
> CREATE USER 'replication'@'10.27.143.196' IDENTIFIED BY '123456';
-- 配置主从复制权限
> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.27.143.196';

-- 配置连接信息
> CHANGE MASTER TO MASTER_HOST='10.27.143.195', 
MASTER_USER='replication',
MASTER_PASSWORD='123456',
MASTER_PORT=5002,
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=686;

-- 查看数据状态
> show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 633
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set: 66c1f6ff-8fb8-11e8-995b-002278fbe73a:1-2
1 row in set (0.00 sec)

-- 启动复制线程
>start slave;

-- 查看状态(同步一些操作后)
> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.27.143.195
                  Master_User: replication
                  Master_Port: 5002
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 283424746
               Relay_Log_File: relay.000003
                Relay_Log_Pos: 283423424
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 283424746
              Relay_Log_Space: 283424783
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 27143195
                  Master_UUID: b0d8cb67-8a3a-11e8-a54a-002230a30c9f
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: b0d8cb67-8a3a-11e8-a54a-002230a30c9f:264-471
            Executed_Gtid_Set: 66c1f6ff-8fb8-11e8-995b-002278fbe73a:1-2,
b0d8cb67-8a3a-11e8-a54a-002230a30c9f:264-471
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

配置C

配置my.cnf

[client]
port=5005
socket=/opt/tmp1/mysql.sock

[mysqld]
basedir=/usr
datadir=/opt/local/mysql/var1/
tmpdir=/opt/tmp1

log-bin=mysql-bin
server_id=27143196

登录C

-- 配置连接信息
>CHANGE MASTER TO MASTER_HOST='10.27.143.196', 
MASTER_USER='replication',
MASTER_PASSWORD='123456',
MASTER_PORT=5002,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=633;

-- 启动复制线程
>start slave;

-- 查看状态(同步一些操作后)
> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.27.143.196
                  Master_User: replication
                  Master_Port: 5002
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 283421989
               Relay_Log_File: relay.000002
                Relay_Log_Pos: 283421676
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 283421989
              Relay_Log_Space: 283421873
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 27143197
                  Master_UUID: 66c1f6ff-8fb8-11e8-995b-002278fbe73a
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: b0d8cb67-8a3a-11e8-a54a-002230a30c9f:264-471
            Executed_Gtid_Set: b0d8cb67-8a3a-11e8-a54a-002230a30c9f:264-471
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

测试级联复制

-- 在主库执行
> create database `testrep`;
> use `testrep`;
> CREATE TABLE `sync_test` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(255) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
>​ insert into sync_test values(1,'test1');

挡在主库A执行完上述操作以后,在B和C都自动同步A的操作,即在B和C都可看到上述创建的记录。

主从复制错误修复方法

在主库上存在一个未同步的数据库employees,从库没有该数据库,现在在主库上删除该数据库。

>drop database employees;
Query OK, 8 rows affected (0.03 sec)

-- 查看从库的状态
> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.27.143.195
                  Master_User: replication
                  Master_Port: 5002
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 1682
               Relay_Log_File: relay.000002
                Relay_Log_Pos: 1144
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 1008
                   Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'b0d8cb67-8a3a-11e8-a54a-002230a30c9f:267' at master log mysql-bin.000003, end_log_pos 1682. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1510
              Relay_Log_Space: 1553
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1008
               Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'b0d8cb67-8a3a-11e8-a54a-002230a30c9f:267' at master log mysql-bin.000003, end_log_pos 1682. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 27143195
                  Master_UUID: b0d8cb67-8a3a-11e8-a54a-002230a30c9f
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State:
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp: 180725 14:59:49
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: b0d8cb67-8a3a-11e8-a54a-002230a30c9f:264-267
            Executed_Gtid_Set: 66c1f6ff-8fb8-11e8-995b-002278fbe73a:1-2,
b0d8cb67-8a3a-11e8-a54a-002230a30c9f:264-266
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)
-- 从上述状态可看出从库的SQL线程停止运行

-- 停止复制
> stop slave;

-- 设置为出错的GTID_NO,从Last_Error可以看到是b0d8cb67-8a3a-11e8-a54a-002230a30c9f:267。
> SET GTID_NEXT='b0d8cb67-8a3a-11e8-a54a-002230a30c9f:267';

-- 插入一个空事务
> begin; commit;

-- 重新设置 GTID_NEXT 为自动获取
> SET GTID_NEXT="AUTOMATIC";

-- 启动slave复制
> start slave; 

-- 查看状态
> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.27.143.195
                  Master_User: replication
                  Master_Port: 5002
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 1682
               Relay_Log_File: relay.000003
                Relay_Log_Pos: 360
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1682
              Relay_Log_Space: 1719
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 27143195
                  Master_UUID: b0d8cb67-8a3a-11e8-a54a-002230a30c9f
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: b0d8cb67-8a3a-11e8-a54a-002230a30c9f:264-267
            Executed_Gtid_Set: 66c1f6ff-8fb8-11e8-995b-002278fbe73a:1-2,
b0d8cb67-8a3a-11e8-a54a-002230a30c9f:264-267
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

如有问题请留言:)