MySQL DBA MySQL复制技术的变革(九)

本文深入探讨MySQL复制技术,对比statement与row格式复制的优劣,解析GTID在复制架构中的作用,以及半同步和增强半同步复制的机制与挑战。针对复制过程中的常见问题,提出了解决方案和优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复制环境搭建:基于ROW+GTID

statement格式复制不足及解决办法

GTID用于解决什么问题

半同步复制有什么缺点?增强半同步用于解决什么问题?半同步会不会有延迟?

复制的瓶颈点及改进建议

复制建议选择

 

 

statement格式复制不足

理解binlog

记录最小的单位是一个Event。前4个字节是magic number,接下来的19个字节记录Format desc event:FDE

一个事务由多个Event组成

(hexdump mysql-bin.00000x |head -n 3)

now()取到的是set timestamp的值

sysdate()取到的是系统的时间

show binlog events in 'mysql-bin.00000x'

 

row格式,binlog每条语句都带有库名

statement是加use

 

row格式优点

相对statement格式更加安全的复制格式

在某些情况下复制速度更快(sql复杂,表有主键)

系统的特殊函数也可以复制

更少的锁

 

缺点

binary log比较大(支持binlog_row_image)

单条语句更新【删除】表的行数过多,会形成大量的binlog

无法从binlog看见用户执行的sql(Event:binlog_row_query_log_events,记录用户的query)

 

uuid()结果太多离散,insert写入慢

 

 GTID用于解决什么问题

事务是由谁产生的,产生了多少事务,复制架构中求事务个数差集非常简单

gtid_purged  --表示已经过期的日志的位置

监控方便

 

半同步                                         

半同步复制有什么缺点?

增强半同步用于解决什么问题?

半同步会不会有延迟?

rpl_semi_sync_master_wait_point=after_commit

redo(xid)->binlog->redo commit(同时redo中写入binlog filename,pos)

Xid同一个binlog是顺序增长的

redo->Xid

业务层幻读

引擎层已经commit,但是dump线程还未dump binlog时master crash,那么主库的数据就会比从库多

 

 

 

 

增强半同步                                                                            

半同步复制有什么缺点?

rpl_semi_sync_master_wait_point=after_sync

如果在dump线程还未dump binlog时master crash,那么主库重启后的数据会比从库多

幽灵事务--掉电情况会发生

rpl_semi_sync_master_timeout

没有从库会hang住

https://bugs.mysql.com/bug.php?id=83158

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/geek-ace/p/11149006.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值