mysql备份恢复实例丢失事务分析
发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,看到了一篇server id导致mysql备份恢复的时候丢失事务的文章,特此重现一下。主备开启了GTID,实验过程如下:1.主库执行:create database test1;create data
千家信息网最后更新 2024年11月19日mysql备份恢复实例丢失事务分析
看到了一篇server id导致mysql备份恢复的时候丢失事务的文章,特此重现一下。
主备开启了GTID,实验过程如下:
1.主库执行:create database test1;create database test2;2.主从没有延迟后备份,利用从库备份,物理或者逻辑都可以:mysqldump -uroot -poracle --single-transaction --master-data=2 --all-databases > dump.sql3.主库执行:create database test3;4.将主库干掉5.从库提升为主库,并且:create database test4;6.利用从库的备份恢复老的主库,并指向新主这个时候会发现,恢复出来的从库丢失了一个事务test3:mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || ming || mysql || performance_schema || sakila || sys || test1 || test2 || test4 || tt || world |+--------------------+11 rows in set (0.00 sec)
文章说是因为server_id的缘故。
server id一个很大的作用是避免数据回环。所以事务中记录的sever id会是持久不变的,就像我们的身份证一样,
走到哪儿都不变。
老主库因为是利用从库的备份集还原出来的,执行过的事务是 6f5b02b9-1f08-11ea-9853-000c2970dcdf:1-4,
那么就要去向新主请求6f5b02b9-1f08-11ea-9853-000c2970dcdf:5事务。
新主的master-bin log文件中该事务如下:server id是1573854809 。而该server id正好是老主的server id,
此时该条记录就会被过滤掉。就不会传递到老主那边去。
# at 836#200328 11:23:25 server id 1573854809 end_log_pos 901 CRC32 0x23ffdc70 GTID last_committed=4 sequence_number=5 rbr_only=noSET @@SESSION.GTID_NEXT= '6f5b02b9-1f08-11ea-9853-000c2970dcdf:5'/*!*/;# at 901#200328 11:23:25 server id 1573854809 end_log_pos 998 CRC32 0x2f611a1d Query thread_id=2 exec_time=4290974348 error_code=0SET TIMESTAMP=1585365805/*!*/;create database test3/*!*/;
那么为什么test4会被传递到老主被应用呢?因为该事务在新主master-bin log中如下,server id 1051295是新主的,
就不会被IO thread过滤.
# at 998#200211 6:19:19 server id 1051295 end_log_pos 1063 CRC32 0xec9c6a1e GTID last_committed=5 sequence_number=6 rbr_only=noSET @@SESSION.GTID_NEXT= '4c312339-ab38-11e9-86a8-000c29050245:1'/*!*/;# at 1063#200211 6:19:19 server id 1051295 end_log_pos 1160 CRC32 0xaccb28ab Query thread_id=2 exec_time=0 error_code=0SET TIMESTAMP=1581373159/*!*/;SET @@session.sql_mode=1151336480/*!*/;create database test4/*!*/;
那么为什么两条记录不一致呢?这是因为test3事务是老主传递过来的,那么在relay log中,master-bin log中,
以及向后传递到其它从库中的时候,server id是会一直被带下去的。test4事务是新主自己的事务,
那么从他自己的master-bin log,以及向后传递的从库的relay log和应用后生成的master-bin log中都会是新主的server id。
所以test3会被过滤,test4会被应用。
老的主库此时:
mysql> show master status\G*************************** 1. row *************************** File: mysql-bin.000002 Position: 1443 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1508afe9-70a7-11ea-8d70-000c2970dcdf:1-3, --自己库里执行的事务4c312339-ab38-11e9-86a8-000c29050245:1,--主从传递下来的事务6f5b02b9-1f08-11ea-9853-000c2970dcdf:1-4--自己作为主的时候执行的事务1 row in set (0.00 sec)
新的主库:
mysql> show master status\G*************************** 1. row *************************** File: mysql-bin.000002 Position: 1322 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 4c312339-ab38-11e9-86a8-000c29050245:1-2,6f5b02b9-1f08-11ea-9853-000c2970dcdf:1-51 row in set (0.00 sec)
事务
备份
时候
应用
主从
文章
很大
一致
作用
去向
后生
回环
指向
数据
文件
物理
缘故
被带
说是
身份
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
lamp数据库搭建环境
大华管理平台服务器刷机
淄博智扬互联网科技有限公司
电子商务与网络安全技术
依据国家安全法和网络安全法
从事软件开发的人叫什么
qt软件开发文档
浙江拓源网络技术有限公司
数据库工具箱插件下载
有哪些知名软件开发公司
WPS软件开发笔试
井号在数据库中表示什么
无锡医联体软件开发有限公司
opc数据库手机app
北京门头沟区服务器回收云主机
数据库应用业大考试题
多进程提取游标中的数据库
网络安全法第二十一怎么罚款
ps5港版的原神是哪个服务器
云南至善园互联网科技有限公司
都市之互联网科技
jsp日期存入数据库
思科服务器安全隐患
临床试验数据库锁定
网络安全的经验和做法
arcgis房产数据库导出
邢台软件开发
公司网络安全审计措施
丧尸围城在哪个服务器
学网络安全参加比赛要收费吗