mysql两份日志: binlog :server innodb redo log:engine 两份日志顺序一致性:否则主备不一致 两份日志:原子性,同时都有,同时都无 2PC二阶段协义: 第一阶段:准备界段 第二阶段:提交阶段 买房子示例 准备界段: 房产局确认: 买方:钱是否准备好 卖方:房子是否可卖 提交界段: 政务中心: 买方: 确认按手印 卖方:确认按手印 ---------------------------------------------------------------- mysql 日志两阶段提交: 刷日志 准备阶段: innodb_prepare binlog_prepare 提交阶段 binlog_commit innodb_commit 优化后的状态: 准备阶段: innodb_prepare binlog_prepare //binlog commit合并到此操作 ??? 提交阶段 innodb_commit ------------------------------------------------------------------- 两种日志异常处理: binlog的commit log 与innodb的commit log同时存在:不操作 binlog的prepare log与innodb的prepare log同时存在 :innodb commit binlog的prepare log存在,innodb的prepare log 不存在 :re-play innodb binlog的prepare log不存在,innodb的prepare log 存在 :rollback (以binlog 为准,主备一致原则) mysql日志gpoup commit mysql数据库innodb 存储引警一直有一个bug,就是当开启binlog时,无法进行group commit, 究其原因,是为了保证innodb 存储引警的事务日志与binlog日志的顺序一致性 在prepare 前需要取得mutex,直到commit 完成之后释放,这也禁用了group commit功能 mariadb 彻底解决了这个组提交的问题 MYSQL数据同步 1.全量dump某个时点之前的数据,并记当全量dump完成后数据库日志的位置 2.将全量的备份LOAD到mysql 3.从刚才全量完成dump后的日志开始,通过解析日志为可执行的sql,远程LOAD到MYSQL 4.通过不断的应用log,使MYSQL 慢慢追上主库 5.将用户的数据库设置为只读,继续应用日志到MYSQL,直到完全同步 mysql闪回功能 binlog_format 必须是 row 模式 下载专门的mysqlbinlog工具 暂支持insert update delete 做闪回 MYSQL 闪回功能操作步聚: 1. 查看binlog中的position包括start position 和 stop position确认要闪回的位置点 mysql>show binlog events in "xxxx.log"; 2.执行闪回命令 mysqlbinlog -B -v --start-position=120 --stop -position=8836 /home/mysql/binlog.000002|mysql test
时间: 2024-10-09 21:46:53