Chinaunix首页 | 论坛 | 博客
  • 博客访问: 417248
  • 博文数量: 43
  • 博客积分: 613
  • 博客等级: 中士
  • 技术积分: 756
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-01 11:25
文章分类

全部博文(43)

文章存档

2016年(1)

2015年(5)

2014年(5)

2013年(14)

2012年(18)

分类: Mysql/postgreSQL

2013-01-07 16:57:44

环境centos5.5 64位,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 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 DATABASEALTER DATABASEDROP 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参数能同步所有跨数据库的更新。


 

阅读(2531) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~