整理几个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-table和replicate-wild-ignore-table对存储过程、函数不起作用,无论是否忽略或指定,存储过程都会触发主从同步,例如主实例下A、B俩库,从实例上只有A库,没有B库,使用这俩参数配置只同步A库,表数据啥的都是正常同步A库不同步B库,此时在主实例上新建一个B库下的存储过程,也会触发主从同步,而且会导致报错,从实例上会直接执行CREATE B.PROCEDURE失败 报B库不存在的错误
使用replicate-do-db和replicate-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成功
以上就是整理的一些资料和实验结果,有疑问或者想法的道友,欢迎探讨~