1.无损半同步复制:主库先将事务记录写入二进制日志(binlog),并等待从库确认已写入中继日志(relay-log)。确认完成后,主库再将事务写入 InnoDB 存储引擎,最后返回客户端结果。在此过程中,只有在事务完全确认后,其他客户端才能看到该事务结果,确保了数据一致性。2.半同步复制:主库在写入二进制日志后直接将事务提交到存储引擎,并允许其他客户端看到该事务。与此同时,主库等待从库确认已写入
核心区别在于:slave_preserve_commit_order=ON 时: 虽然是并行复制(工作线程1和2同时工作)但提交顺序必须严格按照binlog顺序:11 -> 22 -> 33即使工作线程2先完成了id=2的更新,也必须等待工作线程1完成id=1的更新后才能提交slave_preserve_commit_order=OFF 时: 仍然是并行复制但提交顺序取决于哪个工作线程
一图读懂MySQL组复制工作原理初始阶段:客户端向主节点发起事务提交请求主节点收集写入集(writeset),包含变更数据和主键信息复制与认证阶段:通过组通信系统将写入集复制到所有节点所有节点进行认证测试(冲突检测)提交阶段:如果认证成功,从节点当前返回成功信号主要节点提交事务并响应客户端特别说明:这是“虚拟”全部同步复制,从节点返回成功后可能尚未完成实际写入存在短暂的数据偏差为避免不一致,建议在
一图读懂MySQL即时添加列的工作原理:1.添加列之前: 数据字典中只记录了 id 和 name 两列的定义数据文件中存储着实际的行数据2.使用 ALGORITHM=INSTANT 添加列后: 只更新元数据(数据字典),添加新列的定义和默认值原有数据文件保持不变,无需重建表读取数据时,MySQL会自动为旧行的新列填充默认值新插入的行会包含新列的实际值这就是为什么即时添加列能够这么快的原因:无需移动
这个脚本的功能是统计/data/目录下 MySQL binlog 文件的数量、每个日期生成的总大小(MB),以及每小时的平均大小(MB)执行下面的命令:find . -name "mysql-bin.*" -exec ls -lt --time-style=+%F {} \; | \ awk 'BEGIN { FS=" "; printf "%-12s %-8s %-15s %-1
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号