MySQL replicate-ignore-db详解

[attach]274[/attach]     官方的解释是:在主从同步的环境中,replicate-ignore-db用来设置不需要同步的库。解释的太简单了,但是里面还有很多坑呢。       生产库上不建议设置过滤规则。如果非要设置,那就用Replicate_Wild_Ignore_Table: mysql.%这种方式。实验探坑如下:
第一种情况
从库:
replicate-ignore-db = mysql
主库:
use mysql
CREATE TABLE test.testrepl1(
id int(5))ENGINE=INNODB DEFAULT CHARSET=UTF8;
从库不会同步。坑!
 
第二种情况
从库:
replicate-ignore-db = mysql
 
主库:
use test
CREATE TABLE mysql.testrepl2(
id int(5))ENGINE=INNODB DEFAULT CHARSET=UTF8;
从库不会同步。坑!
 
 
第三种情况
use test
update mysql.user set user = 'testuser5' where user = 'testuser1';
从库会同步
 
第四种情况
grant all on [i].[/i] to testnowild@'%' identified by 'ge0513.hudie';
从库会同步
 
第二大类:
Replicate_Wild_Ignore_Table: mysql.%
 
第五种情况
主库:
use test
update mysql.user set user = 'testuser1' where user = 'testuser5';
从库没有同步。坑!
 
第六种情况
主库:
grant all on [i].[/i] to testwild@'%' identified by 'ge0513.hudie';
从库没有同步。坑!
    在复制中,如果实在要启用参数 replicate-ignore-db / replicate-do-db 后想要让复制正常运行,只需在连接数据库后不执行 "use db" 语句即可,如果是在php中,连接数据库后,不再执行 mysql_select_db() 即可。
    这是因为复制机制会判断是否使用了 replicate-do(ignore)-db 参数,然后判断当前数据库是否为指定的数据库,如果是,才执行相应的binlog,否则略过。如果不指定数据库的话,就可以忽略这个环节了。
文章参考:链接1   链接2    

0 个评论

要回复文章请先登录注册