MySQL 复制全解析 Part10 基于GTID的MySQL复制的一些限制
前情提要
MySQL复制全解析 Part 2 一步步搭建基于二进制文件位置的MySQL复制
MySQL复制全解析 Part 3 MySQL半同步复制设置
MySQL 复制全解析 Part 4 使用备库搭建MySQL复制
MySQL复制全解析 Part 5 MySQL GTID的格式和存储
MySQL复制全解析 Part 6 MySQL GTID 生命周期
MySQL复制全解析 Part 7 gtid_next和gtid_purged系统变量解析
MySQL复制全解析 Part 8 GTID Auto-Positioning
MySQL 复制全解析 Part 9 一步步搭建基于GTID的MySQL复制
实验环境
此次实验的环境如下
- MySQL 5.7.25
- Redhat 6.10
- 操作系统账号:mysql
- 数据库复制账号:repl
- 复制格式:基于行的复制
IP地址 |
主从关系 |
复制账号 |
复制格式 |
---|---|---|---|
11.12.14.29 |
主库 |
repl |
Row-Based |
11.12.14.30 |
从库(半同步) |
repl |
Row-Based |
这节我们的内容为MySQL的复制,MySQL复制有两种形式
- 基于二进制日志文件位置
- 基于GTID
上节说了如何一步步搭建基于GTID的复制
由于其是基于事务的,有一些特性可能不受支持,接下来我们详细说下
当我们设置enforce-gtid-consistency=true时,如下操作会返回错误,前提是二进制日志功能被启用并且写入到二进制文件中
但我们也必须设置该参数,否则复制会出问题
1. update语句中引用了非事务型的表
如果我们update事务表(如innodb)时引用了非事务表(如MyISAM ),这样是不行的,因为事务可能被分配多个GTID
这种情况也有可能在主从库的存储引擎不一致时发生
2. CREATE TABLE … SELECT 语句
当使用行格式的二进制日志时,CREATE TABLE … SELECT 语句不受支持,因为该语句会分成2个语句及2个GTID(一个create一个insert)
这种情况我们可以直接写成两个语句来达到目的
3. 临时表
在事务,存储过程,函数和触发器内部不可以使用 CREATE TEMPORARY TABLE 和 DROP TEMPORARY TABLE 语句
如果需要使用需要在事务外部,并且 autocommit=1
4. sql_slave_skip_counter
该参数在启用了GTID后不被支持,如果需要跳过事务,可以使用gtid_next变量
非GTID模式:
mysql> stop slave sql_thread;
mysql> set global sql_slave_skip_counter=1;
mysql> start slave sql_thread;
GTID模式:
mysql> SET @@SESSION.GTID_NEXT= '508fb971-3402-11e5-a0aa-08002788310b:1346';
mysql> BEGIN;
mysql> COMMIT;
mysql> SET GTID_NEXT='AUTOMATIC';
注意此方法可能会导致数据库丢失,跳过后请检查主从数据的一致性
5. 忽略服务器
IGNORE_SERVER_IDS 参数会被废弃
6.mysql_upgrade
启用GTID后,不要在mysql_upgrade时写入日志,默认是不写入的的
好了上面就是一些启用GTID功能后的一些限制,我们无需理会他们,MySQL会自动处理这些问题
7. 参考资料
本专题内容翻译自官方文档并结合自己的环境
https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-restrictions.html
觉得文章不错的欢迎关注,转发,收藏~
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Android 通过代码安装 APK的方法详解
- Android ListView实现无限循环滚动
- ignite:一个漂亮的多用户SS/SSR面板
- FreshRSS:开源免费的RSS阅读器
- 使用snap快速安装RocketChat你的聊天服务器
- CuteOne:一款基于Python3的OneDrive多网盘挂载程序,带会员/同步等功能
- Baidu Sitemap Generator在PHP7无法生成XML的解决方法
- MFC实现的Socket通信
- 128-在线翻译
- C语言CGI编程二 - 编写cmd后门
- android 获取视频第一帧作为缩略图的方法
- Flutter利用注解生成可自定义的路由的实现
- Android实现随意拖动View效果的实例代码
- Kotlin的枚举与异常示例详解
- Android自定义View的使用及其原理知识点总结