当前位置: 首页 > 科技观察

部署MySQL延迟从库的几个好处

时间:2023-03-19 01:48:51 科技观察

MySQL的主从复制(replication)关系,不太严格的叫做“同步”或者“主从同步”。其实在早期,MySQL的主从并不能实现真正的“同步”(sync),而是“异步”(async)。MySQL主从复制可以有多种模式,最经典也是最早的异步复制(asyncreplication),从5.5版本开始有半同步复制(semi-syncreplication),5.7增强了半同步。本文要讨论的延迟从库也是5.6之后才有的功能。在此之前,需要借助perconapt-slave-delay工具变相实现。另外从5.6版本开始加入了并行复制,但是此时还是基于schema的并行模式(slave-parallel-type=DATABASE),效率很低,没有意义。直到5.7才实现了真正的并行复制(slave-parallel-type=LOGICAL_CLOCK),复制效率大大提高;还有一个新的多源复制,可以轻松实现多主一从架构。了解了MySQL复制的简史,我们就切入正题。MySQL延迟从库的主要好处有:1、万一误删,可以更快的恢复数据。有时手抖,线上数据被误删,或者库、表或其他对象被误删,或者不带WHERE条件的更新或删除,都可以在误操作前的那个点停止从库的延迟,恢复.2.使用延迟从库作为专用备份节点。虽然有一定延迟,但不影响使用本节点作为备份角色,也不影响生产节点数据库库。3.延迟从库也可以作为一些问题和案例研究的对象。偶尔可能会出现一些普通从库上的binlog事件的问题(比如早期版本缺少主键会导致从库更新很慢的经典问题)。这个时候有时间在延迟的奴隶库上慢慢琢磨研究。启用延迟从库的方法也很简单。下面是MySQL8.0中的方法:#直接用CHANGEMASTERTO设置,后面N的单位是秒数CHANGEMASTERTOMASTER_DELAY=N误操作时,延迟从库需要停在某个位置下来的时候,使用如下命令:STARTSLAVEUNTIL{#1,停止到指定的GTID位置{SQL_BEFORE_GTIDS|SQL_AFTER_GTIDS}=gtid_set#2,停止到指定的binlog位置|MASTER_LOG_FILE='log_name',MASTER_LOG_POS=log_pos#3,停止到指定的位置relaylogposition|RELAY_LOG_FILE='log_name',RELAY_LOG_POS=log_pos#4,直到slave上多个并行线程没有延迟间隙时停止#因为多线程复制,不同线程的复制进度不同,所以有一个gap|SQL_AFTER_MTS_GAPS}P.S,从5.7开始,修改MASTER_DELAY选项可以在线立即生效,无需重启从线程。至于具体MASTER_DELAY的合适设置,需要预估发生误操作时DBA到达现场的平均时间,一般建议1小时左右。