mysql 复制参数replicate_do_db和replicate_ignore_db介绍
演示环境:
1.MySQL5.7.24 二进制安装包
2.master库和slave库都是全新的环境进行配置
3.MySQL开启gtid 并且指定具体的数据库进行同步库
maser 库my.cnf配置操作:
slave库my.cnf配置操作:
##slave库上配置如下参数指定数据库进行同步,master库上不需要配置如下参数:
#####重启mysql服务:
**####导入数据到slave,然后change master to: **
到此处主从复制配置完成
参数replicate_do_db和replicate_ignore_db演示分析:
master库上操作:
slave库上操作:
master上操作:
slave库上操作:被同步到slave库上了,但是咱们一开始在salve 上是设置的是不同步mysql库的
master库上操作:
slave库上操作:看到slave库上的test02用户同时也被删除了
**在master上操作删除一开始use切入mysql库创建的用户test01@‘127.0.0.1’ **
在slave库上查看:同步报错
原因是:一开始use切入mysql库创建的用户test01@‘127.0.0.1’ 没有同步到slave库上,如果此时在master库上没有use切入到mysql库来执行删除用户的语句,由于slave上没有同步过来用户,自然master删除用户时,slave库上同步报错
解决办法就是在slave库上把这个用户创建出来:
由此而得出如下结论:
在salve库上使用replicate_do_db和replicate_ignore_db参数进行过滤数据库同步时,此时在系统默认的mysql库上存在一个隐患,就是在master库上进行跨库update更新mysql库下的表或者是grant 进行mysql授权,以及drop user时,slave库上配置的忽略mysql库同步的参数失效。也就是master库上夸库操作mysql库下的表时,是会同步到slave库的。要是use切换到mysql库进行操作时,grant 进行授权,update 更新mysql库下的表,drop 删除时,这样的话master上对mysql库的操作是不会同步到slave上的mysql库中的。
稍微有点绕,但是亲自测试下,就明白怎么回事了。