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安全错误
数据库的锁怎样保障安全
机械网络技术试验设备
软件开发小公司有哪些
丽水橙品网络技术有限公司
慈溪手机软件开发教程
如何将文本数据转换为数据库格式
网络没问题但打不开服务器上文件
武汉大学预约服务器内部错误
自己托管服务器还是阿里云
山东水性软件开发技术规范
数据库日志文件太大附件不上
网络安全国产化要求
安恒信息网络安全技术
数据库同一行怎么相加
数据库安全考虑措施
国外小说软件开发
所有 数据库
远程管理 ftp服务器
无线网络安全管理的自查报告
软件开发pm经验
软件连接数据库
网络安全护航成长600字作文
软件开发是哪个学校的
广州ips网络安全技术
鼓励相关企业 机构开展网络安全
网络安全度调查做完后怎么返回
数据库死锁怎么处理
数据库取最大值
爬虫需要什么数据库
u8怎么连接服务器
嘉定区专业性软件开发售后保障