MySQL5.7在线开启/关闭GTID

Posted 秋天的枫叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL5.7在线开启/关闭GTID相关的知识,希望对你有一定的参考价值。

环境介绍
Part1:写在最前

截止本文撰写当日,mysql5.7.16是官网的最新稳定版,本文将用MySQL5.7.16来进行演示。从MySQL5.6开始,支持了GTID复制模式,这种模式其实是把双刃剑,虽然容易搭建主从复制了,但使用不当,就容易出现一些错误,例如error 1236。在MySQL5.6如果开启GTID模式,需要在my.cnf中加入以下几个参数:

①log-bin=mysql-bin

②binlog_format=row

③log_slave_updates=1

④gtid_mode=ON

⑤enforce_gtid_consistency=ON

Warning:警告这里的一些参数不是动态参数,也就是需要重启mysql才能生效。

Part2:环境

[root@HE1 ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \\g.
Your MySQL connection id is 4
Server version: 5.7.16-log MySQL Community Server (GPL)
 
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type \'help;\' or \'\\h\' for help. Type \'\\c\' to clear the current input statement.

 

 mysql> select version();      --查询当前数据库版本

 

 mysql> show global variables like \'log_slave%\';    查看日志是否开启,这里显示关闭,在5.7版本这里不用开启

 

 

Part2:传统复制模式切换为GTID

①主库从库都需执行以下命令

mysql> set global gtid_mode=\'OFF_PERMISSIVE\';
Query OK, 0 rows affected (0.01 sec)
mysql> set global gtid_mode=\'ON_PERMISSIVE\';
Query OK, 0 rows affected (0.01 sec)
mysql> set global enforce_gtid_consistency=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> set global gtid_mode=\'ON\';
Query OK, 0 rows affected (0.00 sec)

 

②主库插数从库执行

mysql> show master status;
+------------------+----------+--------------+------------------+----------------------------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                      |
+------------------+----------+--------------+------------------+----------------------------------------+
| mysql-bin.000005 |      154 |              |                  | 82b160c7-9a8f-11e6-8412-000c29c6361d:1 |
+------------------+----------+--------------+------------------+----------------------------------------+
1 row in set (0.00 sec)

 

 

以看到gtid_set下面有数了,这说明已经开启了gtid模式

Part3:GTID变更为传统模式

mysql> stop slave;-----从库执行
Query OK, 0 rows affected (0.00 sec)
 
mysql> set global gtid_mode=\'ON_PERMISSIVE\';
Query OK, 0 rows affected (0.00 sec)
 
mysql> set global gtid_mode=\'OFF_PERMISSIVE\';
Query OK, 0 rows affected (0.01 sec)
 
mysql> CHANGE MASTER TO MASTER_AUTO_POSITION=0;
Query OK, 0 rows affected (0.05 sec)
 
mysql> set global gtid_mode=\'OFF\';
Query OK, 0 rows affected (0.00 sec)
 
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show variables like \'%gtid%\';
+----------------------------------+----------------------------------------+
| Variable_name                    | Value                                  |
+----------------------------------+----------------------------------------+
| binlog_gtid_simple_recovery      | ON                                    |
| enforce_gtid_consistency        | ON                                    |
| gtid_executed_compression_period | 1000                                  |
| gtid_mode                        | OFF                                    |
| gtid_next                        | AUTOMATIC                              |
| gtid_owned                      |                                        |
| gtid_purged                      | 82b160c7-9a8f-11e6-8412-000c29c6361d:1 |
| session_track_gtids              | OFF                                    |
+----------------------------------+----------------------------------------+
8 rows in set (0.01 sec)


可以看到这里GTID模式已经关了,下面再次开启GTID模式来观察id的变化

 

 mysql> set global gtid_mode=\'OFF_PERMISSIVE\';
Query OK, 0 rows affected (0.01 sec)
mysql> set global gtid_mode=\'ON_PERMISSIVE\';
Query OK, 0 rows affected (0.01 sec)
mysql> set global enforce_gtid_consistency=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> set global gtid_mode=\'ON\';
Query OK, 0 rows affected (0.01 sec)
mysql> 
mysql> 
mysql> show variables like \'%gtid%\';
+----------------------------------+----------------------------------------+
| Variable_name                    | Value                                  |
+----------------------------------+----------------------------------------+
| binlog_gtid_simple_recovery      | ON                                    |
| enforce_gtid_consistency        | ON                                    |
| gtid_executed_compression_period | 1000                                  |
| gtid_mode                        | ON                                    |
| gtid_next                        | AUTOMATIC                              |
| gtid_owned                      |                                        |
| gtid_purged                      | 82b160c7-9a8f-11e6-8412-000c29c6361d:1 |
| session_track_gtids              | OFF                                    |
+----------------------------------+----------------------------------------+
8 rows in set (0.00 sec)
 
主库做操作,从库执行如下命令会看到gtid_set的值在变化
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000011 |      154 |              |                  | 82b160c7-9a8f-11e6-8412-000c29c6361d:1-2 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
 
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000011 |      154 |              |                  | 82b160c7-9a8f-11e6-8412-000c29c6361d:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

 

以上是关于MySQL5.7在线开启/关闭GTID的主要内容,如果未能解决你的问题,请参考以下文章

MySQL5.7 传统复制到GTID复制

Windows7+IIS+PHP7+MySQL5.7环境搭建

MySQL5.7 服务 crash 后无法启动

centos67在线升级mysql到mysql5.7

mysql5.7主从复制--在线变更复制类型

mysql5.7 开启增强半同步复制