MySql主从同步的一些参数探索,主要是指定和忽略库及存储过程相关的

629 阅读3分钟

整理几个MYSQL主从同步指定库的参数

mysql主从同步,往往需要配置指定同步库和不需要同步的库

整理了几个控制同步的参数,并做了一些细节部分的比较

replicate-do-db

用法:replicate-do-db=database_name(指定需要同步的库)

replicate-ignore-db

用法:replicate-ignore-db=db_name(指定需要忽略同步的库)

replicate-wild-do-table

用法:replicate-wild-do-table=db_name.%(指定需要同步的库下的所有表,通配符)

replicate-wild-ignore-table

用法:replicate-wild-do-table=db_name.%(指定需要忽略同步的库下的所有表,通配符)

关于存储过程和函数同步的一些小问题

replicate-wild-do-tablereplicate-wild-ignore-table对存储过程、函数不起作用,无论是否忽略或指定,存储过程都会触发主从同步,例如主实例下A、B俩库,从实例上只有A库,没有B库,使用这俩参数配置只同步A库,表数据啥的都是正常同步A库不同步B库,此时在主实例上新建一个B库下的存储过程,也会触发主从同步,而且会导致报错,从实例上会直接执行CREATE B.PROCEDURE失败 报B库不存在的错误

使用replicate-do-dbreplicate-ignore-db 可以有效的控制存储过程和函数的同步,但是这俩参数,有跨库操作的隐患,会导致主从不一致的情况,通常不会用这俩参数,而是用wild通配来指定库.%配置,真是难以抉择

使用wild参数针对存储过程不受控制的解决方案

一、所有库都在从实例上建立起来,即使只需要同步部分库的数据,也把别的建立好,这样涉及到函数和存储过程,都可以正常同步,对数据也没啥影响,也不会出现主从报错终止的情况了

二、使用slave-skip-errors参数,跳过指定code的错误 指定忽略存储过程同步报错的error_code,自动跳过错误,这样对数据也没有影响,主从也不会终止 (此方法未实验,有点一棒子打死的感觉,我采用的方案一,有兴趣的同学试一试)

花式组合参数的实验效果

replicate-wild-do-table = A.%

replicate-ignore-db=C

use A 同步A成功

use A 同步B失败

use A 同步C失败

use B 同步A成功

use C 同步A失败


replicate-do-db=A

replicate-wild-ignore-table = C.%

use A 同步A成功

use A 同步B成功

use A 同步C失败

use B 同步A失败

use C 同步A失败


replicate-do-db=A

replicate-ignore-db=C

use A 同步A成功

use A 同步B成功

use A 同步C成功

use B 同步A失败

use C 同步A失败


replicate-wild-do-table = A.%

replicate-wild-ignore-table = C.%

use A 同步A成功

use A 同步B失败

use A 同步C失败

use B 同步A成功

use C 同步A成功

以上就是整理的一些资料和实验结果,有疑问或者想法的道友,欢迎探讨~