ITPub博客

首页 > 数据库 > MySQL > mysql 主从跨库操作同步探究

mysql 主从跨库操作同步探究

原创 MySQL 作者:kngnng 时间:2014-09-12 14:34:42 3 删除 编辑


我们知道mysql主从复制原理是通过主库binlog日志进行,从库进行日志的接收并恢复到其从库自身,但是有时我们会进行一些比较二的操作,

比如我们非得跨库操作,简单说就是:

1.use A库

2.操作B库

究竟能不能跨库实现同步,需要下面进一步测试

 

 

实验参数:

主库参数:binlog-do-db

从库参数:replicate-do-db和replicate-wild-do-table

下面分六个情况进行实验,并观察日志变更情况。

实验一:主库、从库均不设置参数

实验二:主库不设置参数、从库设置replicate-do-db

实验三:主库不设置参数、从库设置replicate-wild-do-table

实验四:主库不设置参数、从库设置replicate-do-db和replicate-wild-do-table

实验五:主库设置参数binlog-do-db、从库不设置参数

实验六:主库设置参数binlog-do-db、从库设置replicate-do-db

实验七:主库设置参数binlog-do-db、从库设置replicate-wild-do-table

实验八:主库设置参数binlog-do-db、从库设置replicate-do-db和replicate-wild-do-table

 

实验准备:

主库、从库已经有测试库www,并且有表test(id,name)

 

实验:

实验一、

主库:不设置参数

从库:不设置参数

1、查看binlog日志情况

主库binlog:


从库binlog:


2、主库默认库插入测试数据

use www;

insert into test values(1,'a');        

3、查看从库同步情况


数据已经同步

4、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

5、主库跨库插入数据

use mysql;

insert into www.test values(2,'b');        

6、查看从库同步情况


数据已经同步

7、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

 

结论:

a.经测试update、delete同insert;

b.create database同样有效,并且操作后日志会变化并且同步;

c.在主库、从库都不设置相应参数的情况下,经过默认库、跨库操作都可以同步。

 

 

实验二、

主库:不设置参数

从库:设置参数replicate-do-db = www

1、查看binlog日志情况

主库binlog:


从库binlog:


2、主库默认库插入测试数据

use www;

insert into test values(3,'c');        

3、查看从库同步情况


数据已经同步

4、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

5、主库跨库插入数据

use mysql;

insert into www.test values(4,'d');        

6、查看从库同步情况


数据未同步

7、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

 

结论:

a.经测试update、delete同insert;

b.create database不能同步。

c.在主库不设置相应参数、从库设置replicate-do-db的情况下,经过默认库操作可以同步、跨库操作不同步。

 

实验三、

主库:不设置参数

从库:设置参数replicate-wild-do-table = www.%

1、查看binlog日志情况

主库binlog:


从库binlog:


2、主库默认库插入测试数据

use www;

insert into test values(5,'e');        

3、查看从库同步情况


数据已经同步

4、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

5、主库跨库插入数据

use mysql;

insert into www.test values(6,'f');        

6、查看从库同步情况


数据已经同步

7、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

 

结论:

a.经测试update、delete同insert;

b.create database不能同步。

c.在主库不设置相应参数、从库设置replicate-wild-do-table的情况下,经过默认库、跨库操作可以同步。

 

 

实验四、

主库:不设置参数

从库:设置参数replicate-do-db = www和replicate-wild-do-table = www.%

1、查看binlog日志情况

主库binlog:


从库binlog:


2、主库默认库插入测试数据

use www;

insert into test values(7,'g');        

3、查看从库同步情况


数据已经同步

4、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

5、主库跨库插入数据

use mysql;

insert into www.test values(8,'h');        

6、查看从库同步情况


数据未同步

7、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

 

结论:

a.经测试update、delete同insert;

b.create database不能同步。

c.在主库不设置相应参数、从库设置replicate-do-db和replicate-wild-do-table的情况下,经过默认库操作可以同步、跨库操作不同步。

 

 

实验五、

主库:设置参数binlog-do-db = www

从库:不设置参数

1、查看binlog日志情况

主库binlog:


从库binlog:


2、主库默认库插入测试数据

use www;

insert into test values(9,'j');        

3、查看从库同步情况


数据已经同步

4、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

5、主库跨库插入数据

use mysql;

insert into www.test values(10,'k');        

6、查看从库同步情况


数据未同步

7、查看binlog日志情况

主库:


从库:


插入数据后,日志没有变化,并且同步到从库

 

结论:

a.经测试update、delete同insert;

b.create database不能同步。

c.在主库设置binlog-do-db、从库不设置参数的情况下,经过默认库操作可以同步、跨库操作不同步。

 

 

实验六、

主库:设置参数binlog-do-db = www

从库:设置参数replicate-do-db = www

1、查看binlog日志情况

主库binlog:


从库binlog:


2、主库默认库插入测试数据

use www;

insert into test values(11,'L');        

3、查看从库同步情况


数据已经同步

4、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

5、主库跨库插入数据

use mysql;

insert into www.test values(12,'m');        

6、查看从库同步情况


数据未同步

7、查看binlog日志情况

主库:


从库:


插入数据后,日志没有变化,并且同步到从库

 

结论:

a.经测试update、delete同insert;

b.create database不能同步。

c.在主库设置binlog-do-db、从库设置replicate-do-db的情况下,经过默认库操作可以同步、跨库操作不同步。

 

 

实验七、

主库:设置参数binlog-do-db = www

从库:设置参数replicate-wild-do-table = www.%

1、查看binlog日志情况

主库binlog:


从库binlog:


2、主库默认库插入测试数据

use www;

insert into test values(13,'n');        

3、查看从库同步情况


数据已经同步

4、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

5、主库跨库插入数据

use mysql;

insert into www.test values(14,'o');        

6、查看从库同步情况


数据未同步

7、查看binlog日志情况

主库:


从库:


插入数据后,日志没有变化,并且同步到从库

 

结论:

a.经测试update、delete同insert;

b.create database不能同步。

c.在主库设置binlog-do-db、从库设置replicate-wild-do-table的情况下,经过默认库操作可以同步、跨库操作不同步。

 

 

实验八、

主库:设置参数binlog-do-db = www

从库:设置参数replicate-do-db和replicate-wild-do-table = www.%

1、查看binlog日志情况

主库binlog:


从库binlog:


2、主库默认库插入测试数据

use www;

insert into test values(15,'p');        

3、查看从库同步情况


数据已经同步

4、查看binlog日志情况

主库:


从库:


插入数据后,日志有变化,并且同步到从库

5、主库跨库插入数据

use mysql;

insert into www.test values(16,'q');        

6、查看从库同步情况


数据未同步

7、查看binlog日志情况

主库:


从库:


插入数据后,日志没有变化,并且同步到从库

 

结论:

a.经测试update、delete同insert;

b.create database不能同步。

c.在主库设置binlog-do-db、从库设置replicate-do-db和replicate-wild-do-table的情况下,经过默认库操作可以同步、跨库操作不同步。

 

 

总结:

1、主库、从库有没有任何参数,默认库操作都是可以同步的。

2、主库未设置binlog-do-db的情况下:

    a.从库设置replicate-do-db,跨库操作不同步

    b.从库设置replicate-wild-do-table,跨库操作同步

    c.从库设置replicate-do-db和replicate-wild-do-table,跨库操作不同步

    d.跨库操作后binlog会有变化

3、主库设置binlog-do-db的情况下:

    a.从库设置replicate-do-db,跨库操作不同步

    b.从库设置replicate-wild-do-table,跨库操作不同步

    c.从库设置replicate-do-db和replicate-wild-do-table,跨库操作不同步

    d.跨库操作后binlog没有变化

4、只有在主库、从库不设置参数的情况下,主库新建库,从库才可以同步。

 

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26252014/viewspace-1268479/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-09-06

  • 博文量
    36
  • 访问量
    243015