有关mysql主从跨库更新的问题

发布时间:2021-01-17编辑:脚本学堂
系统:centos5.5 64位 Mysql:mysql 5.5.18 线上数据变更,开发同事发给.sql文件里面包含对多个库的操作。

系统:centos5.5 64位
mysql:mysql 5.5.18
 
线上数据变更,开发同事发给.sql文件里面包含对多个库的操作。例如:
 

复制代码 代码如下:
update a.aa set aaa=xxx;
insert into b.bb values (5435,54);
 

这类sql很多,而且还必须按照提供的文件的顺序执行。
 
以前看Mysql文档的时候提到过主从同步的问题:
--binlog-do-db=db_name

告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,应将更新记录到二进制日志中。其它所有没有明显指定的数据库  被忽略。如果使用该选项,你应确保只对当前的数据库进行更新。

一个不能按照期望执行的例子:如果用binlog-do-db=sales启动服务器,并且执行USE prices; UPDATE sales.january SET alinuxjishu/9952.html target=_blank class=infotextkey>mount=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参数能同步所有跨数据库的更新。>>> 更多内容,请访问:mysql主从复制mysql主从同步系列教程