前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL传统点位复制在线转为GTID模式复制

MySQL传统点位复制在线转为GTID模式复制

作者头像
July
修改2019-11-24 09:01:27
1.9K0
修改2019-11-24 09:01:27
举报
文章被收录于专栏:数据库干货铺

1. GTID优缺点

MySQL传统点位复制在5.7版本前是主要的主从复制模式,而随着MySQL5.6版本引入GTID,并且MySQL5.7进行各方面的优化以后,在mySQL5.7(尤其是MySQL5.7.6)版本后GTID模式的主从复制方式成为一个新的选择方式。要使用GTID模式,首先也需知其优缺点,其主要的优缺点如下:

1.1 优点

a) 更简单的实现failover,无需找log_file和log_Pos。 b) 更简单的搭建主从复制。 c) 复制集群有一个统一的方式识别复制位置,给集群管理带来了便利。 d) 正常情况下,GTID是连续没有空洞的,因此主从库出现数据冲突时,可以用添加空事物的方式进行跳过

1.2 限制

a) 在一个事务里面混合使用引擎如Innodb(支持事务)、MyISAM(不支持事务), 造成多个GTIDs和同一个事务相关联出错 b) CREATE TABLE…..SELECT 不能使用,该语句产生的两个event在某一情况 会使用同一个GTID(同一个GTID在slave只能被使用一次),使用时会报如下错误:

代码语言:javascript
复制
错误代码:1786Statement violates GTID consistency: CREATE TABLE ... SELECT...

需改为 create table like tb; insert into tb ... select 方式处理 c) CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE 不能在事务内使用 (启用了--enforce-gtid-consistency参数)

2. 传统点位复制在线转为GTID模式复制

2.1 在线调整的条件

a) 要求MySQL 5.7.6及以后版本。

b) 所有组中节点的gtid_mode 为off状态。

2.2 在线调整

2.2.1 查看当前状态
代码语言:javascript
复制
/** 传统复制下enforce_gtid_consistency  gtid_mode 均为OFF **/
mysql> show  global variables like 'enforce_gtid_consistency';+--------------------------+-------+
| Variable_name            | Value |+--------------------------+-------+
| enforce_gtid_consistency | OFF   |+--------------------------+-------+
1 row in set (0.00 sec)
mysql> show  global variables like 'gtid_mode';
+---------------+-------+
| Variable_name | Value |+---------------+-------+
| gtid_mode     | OFF   |+---------------+-------+
1 row in set (0.00 sec)
2.2.2 修改enforce_gtid_consistency

所有节点均先将其修改为 WARN,同时注意查看日志是否出现警告信息,生产环境想调整为GTID模式时,需提前一段时间调整此参数,观察一段时间,确定无警告后再调整。

代码语言:javascript
复制
/**  所有节点均调整,主从无先后顺序 **/
mysql> set global enforce_gtid_consistency =warn;
Query OK, 0 rows affected (0.00 sec)

开启后观察数据库日志,只有在无警告的情况下才可以进行后续的操作。

代码语言:javascript
复制
2019-10-13T06:00:19.723310Z 10588 [Note] Changed ENFORCE_GTID_CONSISTENCY from OFF to WARN.
2.2.3 修改enforce_gtid_consistency = on

将各节点enforce_gtid_consistency 设置为 on,不分顺序,但需要全部执行完毕后再进行下一步

代码语言:javascript
复制
mysql> set global enforce_gtid_consistency = on;
Query OK, 0 rows affected (0.00 sec)
2.2.4 修改gtid_mode = off_permissive

将各节点gtid_mode设置为 off_permissive,不分顺序,但需要全部执行完毕后再进行下一步

代码语言:javascript
复制
mysql> set global gtid_mode = off_permissive;
Query OK, 0 rows affected (0.00 sec)
2.2.5 修改gtid_mode=on_permissive

建议先修改从库的gtid_mode为on_permissive,之后再修改主库的。此步骤执行完毕后生成的日志是带GTID的

代码语言:javascript
复制
mysql> set global gtid_mode=on_permissive;
Query OK, 0 rows affected (0.01 sec)
2.2.6 查看状态
代码语言:javascript
复制
/** 确定传统方式复制完毕,此时各节点Ongoing_anonymous_transaction_count状态为0 **/
mysql> show status like 'ongoing_anonymous_transaction_count';+-------------------------------------+-------+
| Variable_name                       | Value |+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0     |+-------------------------------------+-------+
1 row in set (0.00 sec)
/** 切换日志 **/
mysql> flush logs;
Query OK, 0 rows affected (0.16 sec)

需要所有的节点ongoing_anonymous_transaction_count均为0.

2.2.7 启用gtid_mode

前面的步骤确认正常后,各节点开启GTID_MODE

代码语言:javascript
复制
mysql> set global gtid_mode=on;Query OK, 0 rows affected (0.01 sec)

2.3 将传统复制转为GTID模式

停止原有复制,切换为gtid模式后,设置为自动查找位置复制。

代码语言:javascript
复制
sql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to master_auto_position=1;
Query OK, 0 rows affected (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

修改后复制即变为gtid模式。

代码语言:javascript
复制
mysql> SHOW GLOBAL  VARIABLES LIKE '%gtid%';+----------------------------------+--------------------------------------------------------------------------------------------+
| Variable_name                    | Value                                                                                      |+----------------------------------+--------------------------------------------------------------------------------------------+
| binlog_gtid_simple_recovery      | ON                                                                                         |
| enforce_gtid_consistency         | ON                                                                                         |
| gtid_executed                    | e29d3917-9dbb-11e9-8b64-e4434b6e2c80:1-93632,e595a4ee-9dbb-11e9-a0f5-e4434b6e3094:1-30042 |
| gtid_executed_compression_period | 1000                                                                                       |
| gtid_mode                        | ON                                                                                         |
| gtid_owned                       |                                                                                            |
| gtid_purged                      | e29d3917-9dbb-11e9-8b64-e4434b6e2c80:1-4803,e595a4ee-9dbb-11e9-a0f5-e4434b6e3094:1-30042  |
| session_track_gtids              | OFF                                                                                        |+----------------------------------+--------------------------------------------------------------------------------------------+
8 rows in set (0.01 sec)

3. 修改配置文件

在配置文件中添加GTID相关参数,涉及到gtid的参数如下:

代码语言:javascript
复制
server-id:每个MySQL 实例的ID值,不能相同。必选项
gtid_mode = ON:MySQL是开启GTID模式.
enforce-gtid-consistency=on:开启GTID复制是,保证GTID的一致性.
log-bin:MySQL 必须开启binlog.
binlog_format=row: MySQLbinlog 的事实标准,其他格式会导致数据丢失.
log-slave-updates=on:级联复制,当slave接受到master的更新且执行完毕之后,执行的binlog是否写入slave的binlog记录中.

有需要进一步沟通的同学可以添加我的微信公众号:数据库干货铺。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库干货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. GTID优缺点
    • 1.1 优点
      • 1.2 限制
      • 2. 传统点位复制在线转为GTID模式复制
        • 2.1 在线调整的条件
          • 2.2 在线调整
            • 2.2.1 查看当前状态
            • 2.2.2 修改enforce_gtid_consistency
            • 2.2.3 修改enforce_gtid_consistency = on
            • 2.2.4 修改gtid_mode = off_permissive
            • 2.2.5 修改gtid_mode=on_permissive
            • 2.2.6 查看状态
            • 2.2.7 启用gtid_mode
          • 2.3 将传统复制转为GTID模式
          • 3. 修改配置文件
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档