数据库中load data语句怎么保证主备复制数据一致性


小编给大家分享一下数据库中load data语句怎么保证主备复制数据一致性,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
背景
机器配置
* CPU:16 vcpus
* 磁盘:100G flash卡 data&binlog混用
* 内存:64G
数据库版本:MySQL 5.7.18
数据库IP信息:主库IP 10.10.30.241,从库IP 10.10.30.250
数据库参数配置:
*
主库:双一,log_slave_updates,log-bin,secure_file_priv=”,server-id=3306241,binlog_rows_query_log_events=ON,sql_mode=’ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’
*
从库:双一,log_slave_updates,log-bin,binlog_rows_query_log_events=ON,server-id=3306250,sql_mode=’ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZE开发云主机域名RO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’
测试目的:通过示例演示并查看过程中binlog中如何记录load data语句等方式来验证 load data语句如何保证主备复制数据一致性
*
将分别在四种隔离级别下(会话级别修改tx_isolation)针对binlog_format(会话级别修改binlog_format)的三种格式分别进行演示执行load
data语句,观察MySQL server层如何处理,主库binlog中如何记录load
data语句,备库的binlog中如何如何记录load data语句
* 本文假定你已经搭建好了主备复制环境,如果未搭建请先自行搭建主备复制环境
PS:本文仅针对测试目的做验证演示,关于binlog_format三种格式以及事务的四种隔离级别详细说明请查阅相关资料,本文不做解读
* binlog_format参考资料:https://dev.mysql.com/doc/refman/5.7/en/replication-formats.html
* 事务隔离级别参考资料:https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html
建库
建表
插入测试数据
执行select …into outifile语句生成load data需要的数据文本文件
先在主库中把binlog_format修改为statement,隔离级别修改为read-uncommitted,并刷新主从库binlog
主库清空表test_load并执行load data语句
从以上结果中可以看到,在RU隔离级别下,binlog_format设置为statement不允许load data语句执行,从报错信息上可以看到,在RC和RU隔离级别下,binlog只能以row格式记录,所以statement无法记录binlog
查看主库表test_load中的数据
从以上结果中可以看到,表数据并没有导入成功,现在解析binlog查看一下
从上面的结果中可以看到,解析binlog的结果中除了use db和truncate table语句之外,没有其他的操作了,说明并没有数据写入,load data语句被mysql server直接拒绝执行了
先在主库中把binlog_format修改为mixed,隔离级别不要动,并刷新主从库binlog
主库清空表test_load并执行load data语句
从以上结果中可以看到,在RU隔离级别下,binlog_format设置为mixed允许load data语句执行
查看主库表test_load中的数据
从以上结果中可以看到,表数据导入成功,现在解析binlog查看一下
从上面解析binlog的结果中可以看到,数据写入成功,load data语句被转换为row格式记录在binlog中
查看备库中数据是否正确复制
解析备库binlog中是如何记录的load data语句
先在主库中把binlog_format修改为row,隔离级别不要动,并刷新主从库binlog
主库清空表test_load并执行load data语句
从以上结果中可以看到,在RU隔离级别下,binlog_format设置为row允许load data语句执行
查看主库表test_load中的数据
从以上结果中可以看到,表数据导入成功,现在解析binlog查看一下
从上面解析binlog的结果中可以看到,数据写入成功,load data语句被转换为row格式记录在binlog中
查看备库中数据是否正确复制
解析备库binlog中是如何记录的load data语句 看完了这篇文章,相信你对“数据库中load data语句怎么保证主备复制数据一致性”有了一定的了解,如果想了解更多相关知识,欢迎关注开发云行业资讯频道,感谢各位的阅读!

相关推荐: 怎么在MySQL 8.0.18中给数据库添加用户和赋权

怎么在MySQL 8.0.18中给数据库添加用户和赋权?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 首选使用root用户登录数据库mysql -uroot -p2. 使用mysql 数据库U…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/22 16:06
下一篇 06/22 16:06

相关推荐