分类: Mysql/postgreSQL
2013-01-07 16:57:44
--binlog-do-db=db_name
告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,应将更新记录到二进制日志中。其它所有没有明显指定的数据库 被忽略。如果使用该选项,你应确保只对当前的数据库进行更新。
一个不能按照期望执行的例子:如果用binlog-do-db=sales启动服务器,并且执行USE prices; UPDATE sales.january SET amount=amount+1000;,该语句不写入二进制日志。
· --binlog-ignore-db=db_name
告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,不应将更新保存到二进制日志中。如果你使用该选项,你应确保只对当前的数据库进行更新。
一个不能按照你期望的执行的例子:如果服务器用binlog-ignore-db=sales启动,并且执行USE prices; UPDATE sales.january SET amount=amount+1000;,该语句不写入二进制日志。
类似于--binlog-do-db,对于CREATE DATABASE、ALTER DATABASE和DROP DATABASE语句,有一个例外,即通过操作的数据库来决定是否应记录语句,而不是用当前的数据库。
也就是说更改库内的数据信息得在要修改的数据库内做操作才会记录到binlog文件中,这样从库才会同步。
从以上的说明来看,必须在当前需要变更的库操作才能主从正常同步。但是sql太多,而且顺序还不能错,手工一条一条切换库去操作,出错的几率很大。于是就找到下面的配置:
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table= information_schema.%
replicate-wild-ignore-table= performance_schema.%
并取消原来使用的replicate-do-db或者replicate-ignore-db参数。
replicate-wild-ignore-table参数能同步所有跨数据库的更新。