mysql备份恢复实例丢失事务分析
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,看到了一篇server id导致mysql备份恢复的时候丢失事务的文章,特此重现一下。主备开启了GTID,实验过程如下:1.主库执行:create database test1;create data
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
网络安全职称专业工作总结
集中管理服务器
服务器装系统卡住
服务器如何看硬盘有多少个
酒店会员管理系统软件开发
杭州小蜴网络技术地址
计算机三级数据库2020真题
怎么用电脑做服务器赚钱
我的世界小染服务器生存
适合开服务器的指令
信息网络安全手抄报三年级
经济与社会发展数据库
江阴智能软件开发节能规范
软件开发到部署整个流程
开展网络安全应急处置演练
超凡先锋连接不上服务器信息
数据库系统的数据控制功能
裸金属服务器架构华为
sql数据库追加数据
lol游戏服务器进不去
gg平台与服务器
西城区网络安全中心
服务器 国外品牌
如何查数据库的数据量
数据库工作笔记
网络安全与治理法律法规
电子表格自动提取数据库
大专网络技术实习工资
携程数据库技术员
cmmi不适合软件开发