主从复制环境:

主库:192.168.0.100

从库:192.168.0.101

MySQL5.7.22

当前主从状态展示如下:

 1 root@db 06:32:  [(none)]> show slave status\G
 2 *************************** 1. row ***************************
 3                Slave_IO_State: Waiting for master to send event
 4                   Master_Host: 192.168.0.100
 5                   Master_User: repluser
 6                   Master_Port: 3306
 7                 Connect_Retry: 60
 8               Master_Log_File: on.000001
 9           Read_Master_Log_Pos: 1480
10                Relay_Log_File: node02-relay-bin.000002
11                 Relay_Log_Pos: 1098
12         Relay_Master_Log_File: on.000001
13              Slave_IO_Running: Yes
14             Slave_SQL_Running: Yes
15               Replicate_Do_DB:
16           Replicate_Ignore_DB:
17            Replicate_Do_Table:
18        Replicate_Ignore_Table:
19       Replicate_Wild_Do_Table:
20   Replicate_Wild_Ignore_Table:
21                    Last_Errno: 0
22                    Last_Error:
23                  Skip_Counter: 0
24           Exec_Master_Log_Pos: 1480
25               Relay_Log_Space: 1306
26               Until_Condition: None
27                Until_Log_File:
28                 Until_Log_Pos: 0
29            Master_SSL_Allowed: No
30            Master_SSL_CA_File:
31            Master_SSL_CA_Path:
32               Master_SSL_Cert:
33             Master_SSL_Cipher:
34                Master_SSL_Key:
35         Seconds_Behind_Master: 0
36 Master_SSL_Verify_Server_Cert: No
37                 Last_IO_Errno: 0
38                 Last_IO_Error:
39                Last_SQL_Errno: 0
40                Last_SQL_Error:
41   Replicate_Ignore_Server_Ids:
42              Master_Server_Id: 3306100
43                   Master_UUID: b8439fb9-4f22-11e8-a24e-000c291a6b52
44              Master_Info_File: mysql.slave_master_info
45                     SQL_Delay: 0
46           SQL_Remaining_Delay: NULL
47       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
48            Master_Retry_Count: 86400
49                   Master_Bind:
50       Last_IO_Error_Timestamp:
51      Last_SQL_Error_Timestamp:
52                Master_SSL_Crl:
53            Master_SSL_Crlpath:
54            Retrieved_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:96-98
55             Executed_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:1-98
56                 Auto_Position: 1
57          Replicate_Rewrite_DB:
58                  Channel_Name:
59            Master_TLS_Version:
60 1 row in set (0.00 sec)
61
62 root@db 06:32:  [(none)]> 

操作过程如下:

(1) 先在从库中执行 stop slave,停止主从复制,然后调整为传统复制模式,让master_auto_position=0

1 root@db 07:04: [test]> stop slave;
2 Query OK, 0 rows affected (0.01 sec)
3
4 root@db 07:04: [test]>
5
6 root@db 10:39: [test]> CHANGE MASTER TO master_auto_position=0,Master_Host='192.168.0.100',MASTER_USER='repluser',MASTER_PASSWORD='rep123',Master_Log_File='on.000001',MASTER_LOG_POS=2280;
7 Query OK, 0 rows affected, 2 warnings (0.03 sec)
8
9 root@db 10:42: [test]>

然后开启slave复制功能

 1 root@db 10:46:  [test]> start slave;
 2 Query OK, 0 rows affected (0.01 sec)
 3
 4 root@db 10:47:  [test]> show slave status\G
 5 *************************** 1. row ***************************
 6                Slave_IO_State: Waiting for master to send event
 7                   Master_Host: 192.168.0.100
 8                   Master_User: repluser
 9                   Master_Port: 3306
10                 Connect_Retry: 60
11               Master_Log_File: on.000003
12           Read_Master_Log_Pos: 194
13                Relay_Log_File: node02-relay-bin.000006
14                 Relay_Log_Pos: 353
15         Relay_Master_Log_File: on.000003
16              Slave_IO_Running: Yes
17             Slave_SQL_Running: Yes
18               Replicate_Do_DB:
19           Replicate_Ignore_DB:
20            Replicate_Do_Table:
21        Replicate_Ignore_Table:
22       Replicate_Wild_Do_Table:
23   Replicate_Wild_Ignore_Table:
24                    Last_Errno: 0
25                    Last_Error:
26                  Skip_Counter: 0
27           Exec_Master_Log_Pos: 194
28               Relay_Log_Space: 601
29               Until_Condition: None
30                Until_Log_File:
31                 Until_Log_Pos: 0
32            Master_SSL_Allowed: No
33            Master_SSL_CA_File:
34            Master_SSL_CA_Path:
35               Master_SSL_Cert:
36             Master_SSL_Cipher:
37                Master_SSL_Key:
38         Seconds_Behind_Master: 0
39 Master_SSL_Verify_Server_Cert: No
40                 Last_IO_Errno: 0
41                 Last_IO_Error:
42                Last_SQL_Errno: 0
43                Last_SQL_Error:
44   Replicate_Ignore_Server_Ids:
45              Master_Server_Id: 3306100
46                   Master_UUID: b8439fb9-4f22-11e8-a24e-000c291a6b52
47              Master_Info_File: mysql.slave_master_info
48                     SQL_Delay: 0
49           SQL_Remaining_Delay: NULL
50       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
51            Master_Retry_Count: 86400
52                   Master_Bind:
53       Last_IO_Error_Timestamp:
54      Last_SQL_Error_Timestamp:
55                Master_SSL_Crl:
56            Master_SSL_Crlpath:
57            Retrieved_Gtid_Set:
58             Executed_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:1-101
59                 Auto_Position: 0
60          Replicate_Rewrite_DB:
61                  Channel_Name:
62            Master_TLS_Version:
63 1 row in set (0.00 sec)
64
65 root@db 10:47:  [test]> 

主从服务器上同时调整GTID模式为on_permissive

主服务器上:

1 root@db 10:45:  [test]> set global gtid_mode=on_permissive;
2 Query OK, 0 rows affected (0.00 sec)
3
4 root@db 10:45:  [test]> 

从服务器上:

1 root@db 10:42:  [test]> set global gtid_mode=on_permissive;
2 Query OK, 0 rows affected (0.02 sec)
3
4 root@db 10:46:  [test]> 

需要在主从服务器上关闭GTID功能

主服务器:

root@db 11:18:  [test]> set global enforce_gtid_consistency=off;
Query OK, 0 rows affected (0.00 sec)root@db 11:18:  [test]> set global gtid_mode=off;
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions.
root@db 11:19:  [test]> 

从服务器:

root@db 11:19:  [test]> set global enforce_gtid_consistency=off;
Query OK, 0 rows affected (0.00 sec)root@db 11:21:  [test]> set global gtid_mode=off;
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions.
root@db 11:21:  [test]> 

发现主从服务器执行set global gitd_mode=off时报错,因为我在前面说过gtid_mode的值有有四种状态(off、off_permissive、on_permissive,on),虽然四种状态支持动态修改,但是不能跳跃修改,即只能严格依次顺序修改,

测试切换是否成功,在主库中插入数据进行测试:

 1 root@db 11:24:  [test]> desc tt;
 2 +-------+-------------+------+-----+---------+----------------+
 3 | Field | Type        | Null | Key | Default | Extra          |
 4 +-------+-------------+------+-----+---------+----------------+
 5 | id    | int(11)     | NO   | PRI | NULL    | auto_increment |
 6 | name  | varchar(20) | YES  | MUL | NULL    |                |
 7 | score | int(10)     | YES  |     | NULL    |                |
 8 +-------+-------------+------+-----+---------+----------------+
 9 3 rows in set (0.00 sec)
10
11 root@db 11:24:  [test]> insert into tt (name,score) values ('kids',99);
12 Query OK, 1 row affected (0.01 sec)
13
14 root@db 11:25:  [test]> select * from tt;
15 +----+-------+-------+
16 | id | name  | score |
17 +----+-------+-------+
18 |  1 | Tome  |    80 |
19 |  2 | Janne |    90 |
20 |  3 | Kases |    84 |
21 |  4 | kids  |    99 |
22 +----+-------+-------+
23 4 rows in set (0.00 sec)
24
25 root@db 11:25:  [test]> 

从库查看:

  1 root@db 11:17:  [test]> show slave status\G
  2 ERROR 2006 (HY000): MySQL server has gone away
  3 No connection. Trying to reconnect...
  4 Connection id:    14
  5 Current database: test
  6
  7 *************************** 1. row ***************************
  8                Slave_IO_State: Waiting for master to send event
  9                   Master_Host: 192.168.0.100
 10                   Master_User: repluser
 11                   Master_Port: 3306
 12                 Connect_Retry: 60
 13               Master_Log_File: on.000003
 14           Read_Master_Log_Pos: 194
 15                Relay_Log_File: node02-relay-bin.000006
 16                 Relay_Log_Pos: 353
 17         Relay_Master_Log_File: on.000003
 18              Slave_IO_Running: Yes
 19             Slave_SQL_Running: Yes
 20               Replicate_Do_DB:
 21           Replicate_Ignore_DB:
 22            Replicate_Do_Table:
 23        Replicate_Ignore_Table:
 24       Replicate_Wild_Do_Table:
 25   Replicate_Wild_Ignore_Table:
 26                    Last_Errno: 0
 27                    Last_Error:
 28                  Skip_Counter: 0
 29           Exec_Master_Log_Pos: 194
 30               Relay_Log_Space: 601
 31               Until_Condition: None
 32                Until_Log_File:
 33                 Until_Log_Pos: 0
 34            Master_SSL_Allowed: No
 35            Master_SSL_CA_File:
 36            Master_SSL_CA_Path:
 37               Master_SSL_Cert:
 38             Master_SSL_Cipher:
 39                Master_SSL_Key:
 40         Seconds_Behind_Master: 0
 41 Master_SSL_Verify_Server_Cert: No
 42                 Last_IO_Errno: 0
 43                 Last_IO_Error:
 44                Last_SQL_Errno: 0
 45                Last_SQL_Error:
 46   Replicate_Ignore_Server_Ids:
 47              Master_Server_Id: 3306100
 48                   Master_UUID: b8439fb9-4f22-11e8-a24e-000c291a6b52
 49              Master_Info_File: mysql.slave_master_info
 50                     SQL_Delay: 0
 51           SQL_Remaining_Delay: NULL
 52       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
 53            Master_Retry_Count: 86400
 54                   Master_Bind:
 55       Last_IO_Error_Timestamp:
 56      Last_SQL_Error_Timestamp:
 57                Master_SSL_Crl:
 58            Master_SSL_Crlpath:
 59            Retrieved_Gtid_Set:
 60             Executed_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:1-101
 61                 Auto_Position: 0
 62          Replicate_Rewrite_DB:
 63                  Channel_Name:
 64            Master_TLS_Version:
 65 1 row in set (0.00 sec)
 66
 67 root@db 11:17:  [test]> set global enforce_gtid_consistency=off;
 68 Query OK, 0 rows affected (0.00 sec)
 69
 70 root@db 11:19:  [test]>
 71
 72 root@db 11:25:  [test]> show slave status\G
 73 *************************** 1. row ***************************
 74                Slave_IO_State: Waiting for master to send event
 75                   Master_Host: 192.168.0.100
 76                   Master_User: repluser
 77                   Master_Port: 3306
 78                 Connect_Retry: 60
 79               Master_Log_File: on.000003
 80           Read_Master_Log_Pos: 460
 81                Relay_Log_File: node02-relay-bin.000006
 82                 Relay_Log_Pos: 619
 83         Relay_Master_Log_File: on.000003
 84              Slave_IO_Running: Yes
 85             Slave_SQL_Running: Yes
 86               Replicate_Do_DB:
 87           Replicate_Ignore_DB:
 88            Replicate_Do_Table:
 89        Replicate_Ignore_Table:
 90       Replicate_Wild_Do_Table:
 91   Replicate_Wild_Ignore_Table:
 92                    Last_Errno: 0
 93                    Last_Error:
 94                  Skip_Counter: 0
 95           Exec_Master_Log_Pos: 460
 96               Relay_Log_Space: 867
 97               Until_Condition: None
 98                Until_Log_File:
 99                 Until_Log_Pos: 0
100            Master_SSL_Allowed: No
101            Master_SSL_CA_File:
102            Master_SSL_CA_Path:
103               Master_SSL_Cert:
104             Master_SSL_Cipher:
105                Master_SSL_Key:
106         Seconds_Behind_Master: 0
107 Master_SSL_Verify_Server_Cert: No
108                 Last_IO_Errno: 0
109                 Last_IO_Error:
110                Last_SQL_Errno: 0
111                Last_SQL_Error:
112   Replicate_Ignore_Server_Ids:
113              Master_Server_Id: 3306100
114                   Master_UUID: b8439fb9-4f22-11e8-a24e-000c291a6b52
115              Master_Info_File: mysql.slave_master_info
116                     SQL_Delay: 0
117           SQL_Remaining_Delay: NULL
118       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
119            Master_Retry_Count: 86400
120                   Master_Bind:
121       Last_IO_Error_Timestamp:
122      Last_SQL_Error_Timestamp:
123                Master_SSL_Crl:
124            Master_SSL_Crlpath:
125            Retrieved_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:102
126             Executed_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:1-102
127                 Auto_Position: 0
128          Replicate_Rewrite_DB:
129                  Channel_Name:
130            Master_TLS_Version:
131 1 row in set (0.00 sec)
132
133 root@db 11:25:  [test]> 

发现插入前后Excuted_Gtid_Set发生变化,说明我们这里切换没有成功,接下来我们把参数严格按照顺序修改,再进行测试:

切换之前我们查看下主从gitd_mode参数值:

主服务器:gtid_mode值

1 root@db 11:45:  [(none)]> show variables like '%gtid_mode%';
2 +---------------+-------+
3 | Variable_name | Value |
4 +---------------+-------+
5 | gtid_mode     | ON    |
6 +---------------+-------+
7 1 row in set (0.01 sec)
8
9 root@db 11:46:  [(none)]> 

从服务器gitd_mode值:

1 root@db 11:44:  [(none)]> show variables like '%gtid_mode%';
2 +---------------+-------+
3 | Variable_name | Value |
4 +---------------+-------+
5 | gtid_mode     | ON    |
6 +---------------+-------+
7 1 row in set (0.01 sec)
8
9 root@db 11:47:  [(none)]> 

 1 root@db 11:47:  [(none)]> show slave status\G
 2 *************************** 1. row ***************************
 3                Slave_IO_State: Waiting for master to send event
 4                   Master_Host: 192.168.0.100
 5                   Master_User: repluser
 6                   Master_Port: 3306
 7                 Connect_Retry: 60
 8               Master_Log_File: on.000012
 9           Read_Master_Log_Pos: 346
10                Relay_Log_File: node02-relay-bin.000024
11                 Relay_Log_Pos: 505
12         Relay_Master_Log_File: on.000012
13              Slave_IO_Running: Yes
14             Slave_SQL_Running: Yes
15               Replicate_Do_DB:
16           Replicate_Ignore_DB:
17            Replicate_Do_Table:
18        Replicate_Ignore_Table:
19       Replicate_Wild_Do_Table:
20   Replicate_Wild_Ignore_Table:
21                    Last_Errno: 0
22                    Last_Error:
23                  Skip_Counter: 0
24           Exec_Master_Log_Pos: 346
25               Relay_Log_Space: 753
26               Until_Condition: None
27                Until_Log_File:
28                 Until_Log_Pos: 0
29            Master_SSL_Allowed: No
30            Master_SSL_CA_File:
31            Master_SSL_CA_Path:
32               Master_SSL_Cert:
33             Master_SSL_Cipher:
34                Master_SSL_Key:
35         Seconds_Behind_Master: 0
36 Master_SSL_Verify_Server_Cert: No
37                 Last_IO_Errno: 0
38                 Last_IO_Error:
39                Last_SQL_Errno: 0
40                Last_SQL_Error:
41   Replicate_Ignore_Server_Ids:
42              Master_Server_Id: 3306100
43                   Master_UUID: b8439fb9-4f22-11e8-a24e-000c291a6b52
44              Master_Info_File: mysql.slave_master_info
45                     SQL_Delay: 0
46           SQL_Remaining_Delay: NULL
47       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
48            Master_Retry_Count: 86400
49                   Master_Bind:
50       Last_IO_Error_Timestamp:
51      Last_SQL_Error_Timestamp:
52                Master_SSL_Crl:
53            Master_SSL_Crlpath:
54            Retrieved_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:103
55             Executed_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:1-103
56                 Auto_Position: 0
57          Replicate_Rewrite_DB:
58                  Channel_Name:
59            Master_TLS_Version:
60 1 row in set (0.00 sec)
61
62 root@db 11:48:  [(none)]> 

重复以前的步骤,先在从库上关闭slave,停止主从复制,然后修改复制模式为传统模式,master_auto_position=0

 1 root@db 11:48:  [(none)]> stop slave;
 2 Query OK, 0 rows affected (0.00 sec)
 3
 4 root@db 11:50:  [(none)]> CHANGE MASTER TO master_auto_position=0,Master_Host='192.168.0.100',MASTER_USER='repluser',MASTER_PASSWORD='rep123',Master_Log_File='on.000012',MASTER_LOG_POS=346;
 5 Query OK, 0 rows affected, 2 warnings (0.03 sec)
 6
 7 root@db 11:52:  [(none)]> start slave;
 8 Query OK, 0 rows affected (0.01 sec)
 9
10 root@db 11:53:  [(none)]> set global gtid_mode=on_permissive;
11 Query OK, 0 rows affected (0.01 sec)
12
13 root@db 11:53:  [(none)]> set global gtid_mode=off_permissive;
14 Query OK, 0 rows affected (0.01 sec)
15
16 root@db 11:54:  [(none)]> set global gtid_mode=off;
17 Query OK, 0 rows affected (0.01 sec)
18
19 root@db 11:55:  [(none)]> set global enforce_gtid_consistency=off;
20 Query OK, 0 rows affected (0.00 sec)
21
22 root@db 11:55:  [(none)]> 

root@db 11:55: [(none)]> show variables like '%gtid_mode%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| gtid_mode | OFF |
+---------------+-------+
1 row in set (0.00 sec)

root@db 11:58: [(none)]>

同样主库做如下操作:

 1 root@db 11:45:  [(none)]> show variables like '%gtid_mode%';
 2 +---------------+-------+
 3 | Variable_name | Value |
 4 +---------------+-------+
 5 | gtid_mode     | ON    |
 6 +---------------+-------+
 7 1 row in set (0.01 sec)
 8
 9 root@db 11:46:  [(none)]> set global gtid_mode=on_permissive;
10 Query OK, 0 rows affected (0.02 sec)
11
12 root@db 11:53:  [(none)]> set global gtid_mode=off_permissive;
13 Query OK, 0 rows affected (0.01 sec)
14
15 root@db 11:54:  [(none)]> set global gtid_mode=off;
16 Query OK, 0 rows affected (0.02 sec)
17
18 root@db 11:55:  [(none)]> set global enforce_gtid_consistency=off;
19 Query OK, 0 rows affected (0.00 sec)
20
21 root@db 11:55:  [(none)]> show variables like '%gtid_mode%';
22 +---------------+-------+
23 | Variable_name | Value |
24 +---------------+-------+
25 | gtid_mode     | OFF   |
26 +---------------+-------+
27 1 row in set (0.00 sec)
28
29 root@db 11:57:  [(none)]> 

两边gtid复制模式方式现已关闭,同时开始传统模式,开始验证传统复制模式是否生效:

验证前查记录下当前Excuted_Gtid_Set值,方便后面做对比。

Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:1-103
Auto_Position: 0
Replicate_Rewrite_DB:

在主库插入数据:

 1 root@db 12:11:  [test]> select * from tt;
 2 +----+-------+-------+
 3 | id | name  | score |
 4 +----+-------+-------+
 5 |  1 | Tome  |    80 |
 6 |  2 | Janne |    90 |
 7 |  3 | Kases |    84 |
 8 |  4 | kids  |    99 |
 9 +----+-------+-------+
10 4 rows in set (0.00 sec)
11 root@db 12:12:  [test]> insert into tt (name,score) values('MySQL',82);
12 Query OK, 1 row affected (0.01 sec)
13
14 root@db 12:13:  [test]> select * from tt;
15 +----+-------+-------+
16 | id | name  | score |
17 +----+-------+-------+
18 |  1 | Tome  |    80 |
19 |  2 | Janne |    90 |
20 |  3 | Kases |    84 |
21 |  4 | kids  |    99 |
22 |  5 | MySQL |    82 |
23 +----+-------+-------+
24 5 rows in set (0.00 sec)
25
26 root@db 12:13:  [test]> 

从库查看插入数据:

 1 root@db 12:06:  [(none)]> use test
 2 Database changed
 3 root@db 12:14:  [test]> select * from tt;
 4 +----+-------+-------+
 5 | id | name  | score |
 6 +----+-------+-------+
 7 |  1 | Tome  |    80 |
 8 |  2 | Janne |    90 |
 9 |  3 | Kases |    84 |
10 |  4 | kids  |    99 |
11 |  5 | MySQL |    82 |
12 +----+-------+-------+
13 5 rows in set (0.00 sec)
14
15 root@db 12:14:  [test]>

发现数据已经过来了 ,再查看Excuted_Gtid_Set的值。

root@db 12:14: [test]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: on.000015
Read_Master_Log_Pos: 461
Relay_Log_File: node02-relay-bin.000008
Relay_Log_Pos: 620
Relay_Master_Log_File: on.000015
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

--------------------省略--------------

Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:1-103
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:

通过对比发现GTID的值没有增加,证明切换成功。

接下来做相反操作,通过传统模式切换到GTID模式

在主从库上修修改enforce_gtid_consistency=warn,确保在error.log中不出现警告信息,如果有需要先修复。

主库:

 1 root@db 12:13:  [test]> set global enforce_gtid_consistency=warn;
 2 Query OK, 0 rows affected (0.00 sec)
 3
 4 root@db 12:19:  [test]> show variables like '%enforce_gtid_consistency%';
 5 +--------------------------+-------+
 6 | Variable_name            | Value |
 7 +--------------------------+-------+
 8 | enforce_gtid_consistency | WARN  |
 9 +--------------------------+-------+
10 1 row in set (0.01 sec)
11
12 root@db 12:20:  [test]> 

从库:

 1 root@db 12:18:  [test]> set global enforce_gtid_consistency=warn;
 2 Query OK, 0 rows affected (0.00 sec)
 3
 4 root@db 12:19:  [test]> show variables like '%enforce_gtid_consistency%';
 5 +--------------------------+-------+
 6 | Variable_name            | Value |
 7 +--------------------------+-------+
 8 | enforce_gtid_consistency | WARN  |
 9 +--------------------------+-------+
10 1 row in set (0.01 sec)
11
12 root@db 12:20:  [test]>

在主从库上调整enforce_gtid_consistency=on,保证GTID的一致性

主库:

 1 root@db 12:20:  [test]> set global enforce_gtid_consistency=on;
 2 Query OK, 0 rows affected (0.00 sec)
 3
 4 root@db 12:21:  [test]> show variables like '%enforce_gtid_consistency%';
 5 +--------------------------+-------+
 6 | Variable_name            | Value |
 7 +--------------------------+-------+
 8 | enforce_gtid_consistency | ON    |
 9 +--------------------------+-------+
10 1 row in set (0.01 sec)
11
12 root@db 12:21:  [test]> 

从库:

 1 root@db 12:20:  [test]> set global enforce_gtid_consistency=on;
 2 Query OK, 0 rows affected (0.00 sec)
 3
 4 root@db 12:22:  [test]> show variables like '%enforce_gtid_consistency%';
 5 +--------------------------+-------+
 6 | Variable_name            | Value |
 7 +--------------------------+-------+
 8 | enforce_gtid_consistency | ON    |
 9 +--------------------------+-------+
10 1 row in set (0.01 sec)
11
12 root@db 12:22:  [test]> 

然后在主从库安装前面的顺序再一次修改回去,直至gtid_mode=on为止

主库操作:

 1 root@db 12:21:  [test]> set global gtid_mode=off_permissive;
 2 Query OK, 0 rows affected (0.02 sec)
 3
 4 root@db 12:24:  [test]> set global gtid_mode=on_permissive;
 5 Query OK, 0 rows affected (0.01 sec)
 6
 7 root@db 12:24:  [test]> set global gtid_mode=on;
 8 Query OK, 0 rows affected (0.01 sec)
 9
10 root@db 12:24:  [test]> show variables like '%gtid_mode%';
11 +---------------+-------+
12 | Variable_name | Value |
13 +---------------+-------+
14 | gtid_mode     | ON    |
15 +---------------+-------+
16 1 row in set (0.00 sec)
17
18 root@db 12:24:  [test]> 

从库操作:

 1 root@db 12:22:  [test]> set global gtid_mode=off_permissive;
 2 Query OK, 0 rows affected (0.01 sec)
 3
 4 root@db 12:25:  [test]> set global gtid_mode=on_permissive;
 5 Query OK, 0 rows affected (0.01 sec)
 6
 7 root@db 12:25:  [test]> set global gtid_mode=on;
 8 Query OK, 0 rows affected (0.01 sec)
 9
10 root@db 12:25:  [test]> show variables like '%gtid_mode%';
11 +---------------+-------+
12 | Variable_name | Value |
13 +---------------+-------+
14 | gtid_mode     | ON    |
15 +---------------+-------+
16 1 row in set (0.01 sec)
17
18 root@db 12:26:  [test]> 

提示:上述gtid_mode参数值修改必须严格安装顺序依次修改,否则会报错。

查看从库的参数Ongoing_anonymous_transaction_count参数值是否为0,如果为0,意味着没有等待的事务,可以直接进行后面的操作

1 root@db 12:29:  [test]> show global status like '%ongoing_anonymous%';
2 +-------------------------------------+-------+
3 | Variable_name                       | Value |
4 +-------------------------------------+-------+
5 | Ongoing_anonymous_transaction_count | 0     |
6 +-------------------------------------+-------+
7 1 row in set (0.01 sec)
8
9 root@db 12:29:  [test]> 

说明没有等待提交的事务,可以进入后面的操作。

再次核对GTID相关参数状态:

主服务器:

 1 root@db 12:24:  [test]> show variables like '%gtid%';
 2 +----------------------------------+-------------------------------------------+
 3 | Variable_name                    | Value                                     |
 4 +----------------------------------+-------------------------------------------+
 5 | binlog_gtid_simple_recovery      | ON                                        |
 6 | enforce_gtid_consistency         | ON                                        |
 7 | gtid_executed_compression_period | 1000                                      |
 8 | gtid_mode                        | ON                                        |
 9 | gtid_next                        | AUTOMATIC                                 |
10 | gtid_owned                       |                                           |
11 | gtid_purged                      | b8439fb9-4f22-11e8-a24e-000c291a6b52:1-92 |
12 | session_track_gtids              | OFF                                       |
13 +----------------------------------+-------------------------------------------+
14 8 rows in set (0.06 sec)
15
16 root@db 12:30:  [test]> 

从服务器:

 1 root@db 12:29:  [test]>  show variables like '%gtid%';
 2 +----------------------------------+-------------------------------------------+
 3 | Variable_name                    | Value                                     |
 4 +----------------------------------+-------------------------------------------+
 5 | binlog_gtid_simple_recovery      | ON                                        |
 6 | enforce_gtid_consistency         | ON                                        |
 7 | gtid_executed_compression_period | 1000                                      |
 8 | gtid_mode                        | ON                                        |
 9 | gtid_next                        | AUTOMATIC                                 |
10 | gtid_owned                       |                                           |
11 | gtid_purged                      | b8439fb9-4f22-11e8-a24e-000c291a6b52:1-95 |
12 | session_track_gtids              | OFF                                       |
13 +----------------------------------+-------------------------------------------+
14 8 rows in set (0.01 sec)
15
16 root@db 12:31:  [test]> 

我们把传统的复制模式改为GTID模式要把传统的复制停掉,然后执行stop slave,然后执行change master to master_auto_position=1

停止slave,查看当前主从状态:

 1 root@db 12:35:  [test]> stop slave;
 2 Query OK, 0 rows affected (0.01 sec)
 3
 4 root@db 12:35:  [test]> show slave status\G
 5 *************************** 1. row ***************************
 6                Slave_IO_State:
 7                   Master_Host: 192.168.0.100
 8                   Master_User: repluser
 9                   Master_Port: 3306
10                 Connect_Retry: 60
11               Master_Log_File: on.000018
12           Read_Master_Log_Pos: 194
13                Relay_Log_File: node02-relay-bin.000014
14                 Relay_Log_Pos: 353
15         Relay_Master_Log_File: on.000018
16              Slave_IO_Running: No
17             Slave_SQL_Running: No
18               Replicate_Do_DB:
19           Replicate_Ignore_DB:
20            Replicate_Do_Table:
21        Replicate_Ignore_Table:
22       Replicate_Wild_Do_Table:
23   Replicate_Wild_Ignore_Table:
24                    Last_Errno: 0
25                    Last_Error:
26                  Skip_Counter: 0
27           Exec_Master_Log_Pos: 194
28               Relay_Log_Space: 601
29               Until_Condition: None
30                Until_Log_File:
31                 Until_Log_Pos: 0
32            Master_SSL_Allowed: No
33            Master_SSL_CA_File:
34            Master_SSL_CA_Path:
35               Master_SSL_Cert:
36             Master_SSL_Cipher:
37                Master_SSL_Key:
38         Seconds_Behind_Master: NULL
39 Master_SSL_Verify_Server_Cert: No
40                 Last_IO_Errno: 0
41                 Last_IO_Error:
42                Last_SQL_Errno: 0
43                Last_SQL_Error:
44   Replicate_Ignore_Server_Ids:
45              Master_Server_Id: 3306100
46                   Master_UUID: b8439fb9-4f22-11e8-a24e-000c291a6b52
47              Master_Info_File: mysql.slave_master_info
48                     SQL_Delay: 0
49           SQL_Remaining_Delay: NULL
50       Slave_SQL_Running_State:
51            Master_Retry_Count: 86400
52                   Master_Bind:
53       Last_IO_Error_Timestamp:
54      Last_SQL_Error_Timestamp:
55                Master_SSL_Crl:
56            Master_SSL_Crlpath:
57            Retrieved_Gtid_Set:
58             Executed_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:1-103
59                 Auto_Position: 0
60          Replicate_Rewrite_DB:
61                  Channel_Name:
62            Master_TLS_Version:
63 1 row in set (0.00 sec)
64
65 root@db 12:35:  [test]> 

执行change master to master_auto_position=1.开启复制状态,start slave

 1 root@db 12:36:  [test]> change master to  master_auto_position=1;
 2 Query OK, 0 rows affected (0.02 sec)
 3
 4 root@db 12:36:  [test]> start slave;
 5 Query OK, 0 rows affected (0.00 sec)
 6
 7 root@db 12:37:  [test]> show slave status\G
 8 *************************** 1. row ***************************
 9                Slave_IO_State: Waiting for master to send event
10                   Master_Host: 192.168.0.100
11                   Master_User: repluser
12                   Master_Port: 3306
13                 Connect_Retry: 60
14               Master_Log_File: on.000018
15           Read_Master_Log_Pos: 194
16                Relay_Log_File: node02-relay-bin.000002
17                 Relay_Log_Pos: 353
18         Relay_Master_Log_File: on.000018
19              Slave_IO_Running: Yes
20             Slave_SQL_Running: Yes
21               Replicate_Do_DB:
22           Replicate_Ignore_DB:
23            Replicate_Do_Table:
24        Replicate_Ignore_Table:
25       Replicate_Wild_Do_Table:
26   Replicate_Wild_Ignore_Table:
27                    Last_Errno: 0
28                    Last_Error:
29                  Skip_Counter: 0
30           Exec_Master_Log_Pos: 194
31               Relay_Log_Space: 561
32               Until_Condition: None
33                Until_Log_File:
34                 Until_Log_Pos: 0
35            Master_SSL_Allowed: No
36            Master_SSL_CA_File:
37            Master_SSL_CA_Path:
38               Master_SSL_Cert:
39             Master_SSL_Cipher:
40                Master_SSL_Key:
41         Seconds_Behind_Master: 0
42 Master_SSL_Verify_Server_Cert: No
43                 Last_IO_Errno: 0
44                 Last_IO_Error:
45                Last_SQL_Errno: 0
46                Last_SQL_Error:
47   Replicate_Ignore_Server_Ids:
48              Master_Server_Id: 3306100
49                   Master_UUID: b8439fb9-4f22-11e8-a24e-000c291a6b52
50              Master_Info_File: mysql.slave_master_info
51                     SQL_Delay: 0
52           SQL_Remaining_Delay: NULL
53       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
54            Master_Retry_Count: 86400
55                   Master_Bind:
56       Last_IO_Error_Timestamp:
57      Last_SQL_Error_Timestamp:
58                Master_SSL_Crl:
59            Master_SSL_Crlpath:
60            Retrieved_Gtid_Set:
61             Executed_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:1-103
62                 Auto_Position: 1
63          Replicate_Rewrite_DB:
64                  Channel_Name:
65            Master_TLS_Version:
66 1 row in set (0.00 sec)
67
68 root@db 12:37:  [test]> 

验证切换是否成功,主库插入数据:

 1 root@db 12:30:  [test]> insert into tt (name,score) values('gtid',82);
 2 Query OK, 1 row affected (0.00 sec)
 3
 4 root@db 12:38:  [test]> insert into tt (name,score) values('gtid_on',85);
 5 Query OK, 1 row affected (0.00 sec)
 6
 7 root@db 12:38:  [test]> select * from tt;
 8 +----+---------+-------+
 9 | id | name    | score |
10 +----+---------+-------+
11 |  1 | Tome    |    80 |
12 |  2 | Janne   |    90 |
13 |  3 | Kases   |    84 |
14 |  4 | kids    |    99 |
15 |  5 | MySQL   |    82 |
16 |  6 | gtid    |    82 |
17 |  7 | gtid_on |    85 |
18 +----+---------+-------+
19 7 rows in set (0.01 sec)
20
21 root@db 12:38:  [test]> 

从库查看数据和Excuted_Gtid_Set对应值是否发生变化:

 1 root@db 12:37:  [test]> select * from tt;
 2 +----+---------+-------+
 3 | id | name    | score |
 4 +----+---------+-------+
 5 |  1 | Tome    |    80 |
 6 |  2 | Janne   |    90 |
 7 |  3 | Kases   |    84 |
 8 |  4 | kids    |    99 |
 9 |  5 | MySQL   |    82 |
10 |  6 | gtid    |    82 |
11 |  7 | gtid_on |    85 |
12 +----+---------+-------+
13 7 rows in set (0.00 sec)
14
15 root@db 12:40:  [test]> show slave status\G
16 *************************** 1. row ***************************
17                Slave_IO_State: Waiting for master to send event
18                   Master_Host: 192.168.0.100
19                   Master_User: repluser
20                   Master_Port: 3306
21                 Connect_Retry: 60
22               Master_Log_File: on.000018
23           Read_Master_Log_Pos: 729
24                Relay_Log_File: node02-relay-bin.000002
25                 Relay_Log_Pos: 888
26         Relay_Master_Log_File: on.000018
27              Slave_IO_Running: Yes
28             Slave_SQL_Running: Yes
29               Replicate_Do_DB:
30           Replicate_Ignore_DB:
31        --------省略部分---------------------
32   Last_IO_Error_Timestamp:
33      Last_SQL_Error_Timestamp:
34                Master_SSL_Crl:
35            Master_SSL_Crlpath:
36            Retrieved_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:104-105
37             Executed_Gtid_Set: b8439fb9-4f22-11e8-a24e-000c291a6b52:1-105
38                 Auto_Position: 1
39          Replicate_Rewrite_DB:
40                  Channel_Name:
41            Master_TLS_Version:
42 1 row in set (0.00 sec)
43
44 root@db 12:40:  [test]> 

通过上述查询,发现数据已经复制过来,说明数据同步成功,而Excuted_Gtid_Set的值由“ b8439fb9-4f22-11e8-a24e-000c291a6b52:1-103” 变换为:“b8439fb9-4f22-11e8-a24e-000c291a6b52:1-105”,说明切换成功,因为GTID的值增加了 ,证明开启了GTID的复制方式。

至此MySQL的传统复制方式和GTID方式互相切换演示完成,需要注意的是gtid_mode的值虽然支持动态修改,但是在修改时不能跳跃式的修改,必须得严格按照顺序修改。

转载于:https://www.cnblogs.com/kindnull/p/9061968.html

MySQL主从复制之传统复制与GTID模式之间切换相关推荐

  1. MySQL 5.7--多源复制(非GTID模式)

    ==================================================== 在MYSQL5.7版本中引入多源复制,一个从库允许复制多个主库的数据,每个主库被配置为一个单独 ...

  2. Mysql 主从复制(AB复制)

    Mysql 主从复制(AB复制) Mysql的主从复制又叫做AB复制,主要作用就是将主服务器上的数据及时复制到从服务器上,来实现数据的同步,这样做的好处有,在进行数据备份时,可以减轻主服务器的运行压力 ...

  3. MySQL 传统复制与 GTID 复制原理及操作详解

    MySQL 复制在业界里有叫:mysql 同步,ab 复制等.专业名称就是叫:复制. 复制是单向的,只能从 master 复制到 slave 上,延时基本上是毫秒级别的. 一组复制结构中可以有多个 s ...

  4. MySQL主从复制配置过程(一主一从模式)

    1.概述 MySQL 的主从复制又叫 Replication.AB 复制.至少需要两个 MySQL 服务(可以是同一台机器,也可以是不同机器之间进行). 比如A服务器做主服务器,B服务器做从服务器,在 ...

  5. clickhouse 同步mysql_ClickHouse和他的朋友们(11)MySQL实时复制之GTID模式

    原文出自:https://bohutang.me/2020/08/26/clickhouse-and-friends-mysql-gtid-replication/ 最后更新: 2020-09-03 ...

  6. Mysql主从复制之异步与半同步以及主从切换(实验)

    什么是异步,半同步: 一.异步复制(Asynchronous replication) 1.逻辑上 MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库 ...

  7. MySQL——主从复制、ssl主从复制、gtid主从复制

    一.主从复制(Master-Slave) MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升 ...

  8. mysql 5.6 gtid mha_MySQL MHA--故障切换模式(GTID模式和非GTID模式)

    GTID和非GTID故障切换模式选择 MySQL 5.6版本引入GTID来解决主从切换时BINLOG位置点难定位的问题,MHA从0.56版本开始支持基于GTID的复制,在切换时可以采用GTID模式和非 ...

  9. Mysql主从复制集群配置与实战

    主从复制实战的服务器是我在腾讯云官网上购买的几台云服务器进行操作的,不得不说云是一个好东西,以前都是在centos上进行模拟,现在在云服务器上模拟感觉对自己的提升更大.这里想强调一下,如果是在云服务器 ...

最新文章

  1. C++输出流的格式控制
  2. Spring应用的单元测试
  3. 探访火车票“守护者”:一卷票据值百万 压力大到失眠
  4. 企业办公自动化系统_办公自动化怎么理解?如何实现?
  5. “牛津第一,16岁上大学”,中国美女学霸被骂学术媛?学术人“光鲜亮丽”就是错?...
  6. S5PV210裸机之Nandflash
  7. python---之plt.subplot画图详解
  8. 房子值500万租金仅3500元,卖房拿利息和出租哪个合算?
  9. python+opencv 问题解决方案,OpenCV Error: Unspecified error (The function is not implemented. Rebuild the
  10. JDK8新特性03 Lambda表达式03_Java8 内置的四大核心函数式接口
  11. 力扣 460. LFU 缓存
  12. chrome 插件个人使用推介
  13. 算法:找出1-10000之间的所有素数
  14. next. js_Next.js添加到您的应用程序中的图标
  15. 通信码元速率和带宽理解
  16. 关于java中的反射
  17. ADG修改主备数据同步规则--ARCHIVE_LAG_TARGET参数
  18. 国家涉及身份安全新规解读 | 《关键信息基础设施安全保护要求》
  19. 美国标准信息交换标准码(ASCII)
  20. 先锋M.2 NVMe 2280 SSD 256GB固态硬盘 测速

热门文章

  1. zabbix应用之获取监控项的graph曲线图
  2. 【ZZ】使用github管理Eclipse分布式项目开发
  3. DELL Poweredge服务器安装操作系统指南 补全之磁盘驱动制作
  4. 在OperaMasks中使用ELite和JRuby动态语言的秘笈
  5. DataRow复制一行到另一个DataTable
  6. 一站式SpringBoot for NoSQL Study Tutorial 开发教程学习手册
  7. JavaScript语言精粹JSON解析器源码阅读
  8. BZOJ 2084 [Poi2010]Antisymmetry(manacher)
  9. Jedis操作Redis数据库
  10. Echart的angularjs封装