1.引言

使用Mysql的replication机制实现主从同步时,其是由三个线程实现了,主库一个I/O线程,从库一个I/O线程和一个SQL线程。配置时主库需要开始bin-log参数,即在配置文件中添加log-bin = /data/3307/mysql-bin该行,但是当我们需要实现级联同步时,即以这样的一个模式,A>B>C实现三级同步时,AB库除了需要设置log-bin参数还需要添加一个参数:log-slave-updates

log-slave-updates参数默认时关闭的状态,如果不手动设置,那么bin-log只会记录直接在该库上执行的SQL语句,由replication机制的SQL线程读取relay-log而执行的SQL语句并不会记录到bin-log,那么就无法实现上述的三级级联同步。

参见Mysql官网对该参数的介绍:http://dev.mysql.com/doc/refman/5.0/en/replication-options-slave.html#option_mysqld_log-slave-updates


参考:http://815632410.blog.51cto.com/1544685/1420156

最近学mysql复制时,log-slave-updates参数一直没有搞明白这个参数有什么意义。在上网查了一下,发现网友解释的,我也没有看懂。。估计是我这人比较笨的缘故吧。。。我这人比较笨也比较爱钻牛角。别人可能听老师讲课时,就直接听明白了。当时上课时,我也感觉没有什么问题。但是晚上躺床上回想这些内容的时候,发现还是有疑问。。想了好几天才想明白。。虽然这参数让我花费了很多时间才想明白,但是心里很高兴。。。。

如果写的不对,还请大家批评指正。谢谢

本文需要验证的疑问:

从库做为其他从库的主库时 log-slave-updates参数是必须要添加的,因为从库要作为其他从库的主库,必须添加该参数。该参数就是为了让从库从主库复制数据时可以写入到binlog日志,为什么要用这个参数写binlog日志呢,不是在配置文件中开启log-bin = /data/3307/mysql-bin选项就可以吗?

答:从库开启log-bin参数,如果直接往从库写数据,是可以记录log-bin日志的,但是从库通过I0线程读取主库二进制日志文件,然后通过SQL线程写入的数据,是不会记录binlog日志的。也就是说从库从主库上复制的数据,是不写入从库的binlog日志的。所以从库做为其他从库的主库时需要在配置文件中添加log-slave-updates参数。

验证过程:

实验环境时多实例主从同步,3306为主库,3307为从库。

一、未添加log-slave-updates参数时:

1、两个数据库已经可以主从同步,并且主从数据已经一致,从库开启log-bin功能。

mysql-slave>system mysql -uroot -p'123' -S /data/3307/mysql.sock -e "show slave status\G"|egrep "Seconds_Behind_Master|_Running"

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Seconds_Behind_Master: 0

检查主从数据是否一致:

主库:

mysql-master>show databases;

+--------------------+

|Database           |

+--------------------+

|information_schema |

|mysql              |

|oldboy             |

|performance_schema |

|test               |

+--------------------+

5 rowsin set (0.00 sec)

从库:

mysql-slave>show databases;

+--------------------+

|Database           |

+--------------------+

|information_schema |

|mysql              |

|oldboy             |

|performance_schema |

|test               |

+--------------------+

5 rowsin set (0.01 sec)

查看主库文件

[root@DRS3306]# ll

total68

drwxr-xr-x6 mysql mysql  4096 Apr 27 03:49 data

-rw-r--r--1 mysql mysql  1899 Apr 26 23:41 my.cnf

-rwx------1 mysql mysql  1304 Apr 26 23:35 mysql

-rw-rw----1 mysql mysql   126 Apr 23 07:35mysql-bin.000001

-rw-rw----1 mysql mysql   126 Apr 26 22:59mysql-bin.000002

-rw-rw----1 mysql mysql   698 Apr 26 23:36mysql-bin.000003

-rw-rw----1 mysql mysql   126 Apr 26 23:42mysql-bin.000004

-rw-rw---- 1 mysqlmysql  1034 Apr 27 03:49 mysql-bin.000005

-rw-rw----1 mysql mysql   140 Apr 26 23:42mysql-bin.index

srwxrwxrwx1 mysql mysql     0 Apr 26 23:42mysql.sock

-rw-r-----1 mysql root  14731 Apr 26 23:51mysql_oldboy3306.err

-rw-rw----1 mysql mysql     6 Apr 26 23:42mysqld.pid

-rw-rw----1 mysql mysql   107 Apr 26 23:42relay-bin.000003

-rw-rw----1 mysql mysql    28 Apr 26 23:42relay-bin.index

-rw-rw----1 mysql mysql    37 Apr 26 23:51relay-log.info

从库配置文件时间:

[root@DRS3307]# ll

total72

drwxr-xr-x6 mysql mysql  4096 Apr 27 03:49 data

-rw-r--r--1 mysql mysql  1905 Apr 27 03:47 my.cnf

-rwx------1 mysql mysql  1304 Apr 26 23:47 mysql

-rw-rw----1 mysql mysql   203 Apr 27 03:47mysql-bin.000001

-rw-rw---- 1 mysqlmysql   107 Apr 27 03:47 mysql-bin.000002

-rw-rw---- 1 mysqlmysql    56 Apr 27 03:47 mysql-bin.index

srwxrwxrwx1 mysql mysql     0 Apr 27 03:47mysql.sock

-rw-r-----1 mysql root  23291 Apr 27 03:47mysql_oldboy3307.err

-rw-rw----1 mysql mysql     5 Apr 27 03:47mysqld.pid

-rw-rw----1 mysql mysql   150 Apr 27 03:47relay-bin.000005

-rw-rw---- 1 mysqlmysql   413 Apr 27 03:49 relay-bin.000006

-rw-rw----1 mysql mysql    56 Apr 27 03:47relay-bin.index

-rw-rw----1 mysql mysql    54 Apr 27 03:49relay-log.info

测试:在主库上创建数据库,看看从库是否写二进制日志。

[root@DRS 3306]# date

Sun Apr 27 04:02:26 CST 2014

[root@DRS3306]# ll

total68

drwxr-xr-x7 mysql mysql  4096 Apr 27 04:02 data

-rw-r--r--1 mysql mysql  1899 Apr 26 23:41 my.cnf

-rwx------1 mysql mysql  1304 Apr 26 23:35 mysql

-rw-rw----1 mysql mysql   126 Apr 23 07:35mysql-bin.000001

-rw-rw----1 mysql mysql   126 Apr 26 22:59mysql-bin.000002

-rw-rw----1 mysql mysql   698 Apr 26 23:36mysql-bin.000003

-rw-rw----1 mysql mysql   126 Apr 26 23:42mysql-bin.000004

-rw-rw---- 1 mysqlmysql  1115 Apr 27 04:02 mysql-bin.000005   #时间和操作前不一样了,证明主库已经写binlog日志。

-rw-rw----1 mysql mysql   140 Apr 26 23:42mysql-bin.index

srwxrwxrwx1 mysql mysql     0 Apr 26 23:42mysql.sock

-rw-r-----1 mysql root  14731 Apr 26 23:51mysql_oldboy3306.err

-rw-rw----1 mysql mysql     6 Apr 26 23:42 mysqld.pid

-rw-rw----1 mysql mysql   107 Apr 26 23:42relay-bin.000003

-rw-rw----1 mysql mysql    28 Apr 26 23:42relay-bin.index

-rw-rw----1 mysql mysql    37 Apr 26 23:51relay-log.info

从库配置文件时间变化:

[root@DRS3307]# ll

total72

drwxr-xr-x7 mysql mysql  4096 Apr 27 04:02 data

-rw-r--r--1 mysql mysql  1905 Apr 27 03:47 my.cnf

-rwx------1 mysql mysql  1304 Apr 26 23:47 mysql

-rw-rw----1 mysql mysql   203 Apr 27 03:47mysql-bin.000001

-rw-rw---- 1 mysqlmysql   107 Apr 27 03:47 mysql-bin.000002  #时间和操作前的是一样的,确认没有写binlog日志

-rw-rw----1 mysql mysql    56 Apr 27 03:47mysql-bin.index

srwxrwxrwx1 mysql mysql     0 Apr 27 03:47mysql.sock

-rw-r-----1 mysql root  23291 Apr 27 03:47mysql_oldboy3307.err

-rw-rw----1 mysql mysql     5 Apr 27 03:47mysqld.pid

-rw-rw----1 mysql mysql   150 Apr 27 03:47relay-bin.000005

-rw-rw---- 1 mysqlmysql   494 Apr 27 04:02 relay-bin.000006   #证明从库已经写relay-log日志

-rw-rw----1 mysql mysql    56 Apr 27 03:47relay-bin.index

-rw-rw---- 1 mysqlmysql    54 Apr 27 04:02 relay-log.info 

直接向从库写入数据:

[root@DRS 3307]# date

Sun Apr 27 04:09:29 CST2014

mysql-slave>create database qq;

QueryOK, 1 row affected (0.00 sec)

mysql-slave>show databases;

+--------------------+

|Database           |

+--------------------+

|information_schema |

|cbd                |

|mysql              |

|oldboy             |

|performance_schema |

|qq                 |

|test               |

+--------------------+

7 rowsin set (0.00 sec)

查看从库日志文件时间变化:

[root@DRS3307]# ll

total72

drwxr-xr-x8 mysql mysql  4096 Apr 27 04:10 data

-rw-r--r--1 mysql mysql  1905 Apr 27 03:47 my.cnf

-rwx------1 mysql mysql  1304 Apr 26 23:47 mysql

-rw-rw----1 mysql mysql   203 Apr 27 03:47mysql-bin.000001

-rw-rw---- 1 mysqlmysql   186 Apr 27 04:10 mysql-bin.000002   #和在从库上创建qq数据库的时间一致,证明已经写bin-log日志了。

-rw-rw----1 mysql mysql    56 Apr 27 03:47mysql-bin.index

srwxrwxrwx1 mysql mysql     0 Apr 27 03:47mysql.sock

-rw-r-----1 mysql root  23291 Apr 27 03:47mysql_oldboy3307.err

-rw-rw----1 mysql mysql     5 Apr 27 03:47mysqld.pid

-rw-rw----1 mysql mysql   150 Apr 27 03:47relay-bin.000005

-rw-rw----1 mysql mysql   494 Apr 27 04:02relay-bin.000006

-rw-rw----1 mysql mysql    56 Apr 27 03:47relay-bin.index

-rw-rw----1 mysql mysql    54 Apr 27 04:02relay-log.info

二、添加log-slave-updates参数后

1、在主库上做创建操作

[root@DRS 3307]# date

Sun Apr 27 04:19:10 CST2014

mysql-master>create database pang;

QueryOK, 1 row affected (0.00 sec)

mysql-master>show databases;

+--------------------+

|Database           |

+--------------------+

|information_schema |

|cbd                |

|mysql              |

|oldboy             |

| pang               |

|performance_schema |

|test               |

+--------------------+

7 rowsin set (0.00 sec)

检查同步情况:

mysql-slave>show databases;

+--------------------+

|Database           |

+--------------------+

|information_schema |

|cbd                |

|mysql              |

|oldboy             |

| pang               |    #已经同步完成

|performance_schema |

|qq                 |

|test               |

+--------------------+

8 rowsin set (0.00 sec)

检查配置文件时间变化:

主库配置文件时间:

[root@DRS3306]# ll

total68

drwxr-xr-x8 mysql mysql  4096 Apr 27 04:20 data

-rw-r--r--1 mysql mysql  1899 Apr 26 23:41 my.cnf

-rwx------1 mysql mysql  1304 Apr 26 23:35 mysql

-rw-rw----1 mysql mysql   126 Apr 23 07:35mysql-bin.000001

-rw-rw----1 mysql mysql   126 Apr 26 22:59mysql-bin.000002

-rw-rw----1 mysql mysql   698 Apr 26 23:36mysql-bin.000003

-rw-rw----1 mysql mysql   126 Apr 26 23:42mysql-bin.000004

-rw-rw---- 1 mysqlmysql  1198 Apr 27 04:20 mysql-bin.000005   #主库写入时的时间,也就创建数据库时写入log-bin日志的时间

-rw-rw----1 mysql mysql   140 Apr 26 23:42mysql-bin.index

srwxrwxrwx1 mysql mysql     0 Apr 26 23:42 mysql.sock

-rw-r-----1 mysql root  14731 Apr 26 23:51mysql_oldboy3306.err

-rw-rw----1 mysql mysql     6 Apr 26 23:42mysqld.pid

-rw-rw----1 mysql mysql   107 Apr 26 23:42relay-bin.000003

-rw-rw----1 mysql mysql    28 Apr 26 23:42relay-bin.index

-rw-rw----1 mysql mysql    37 Apr 26 23:51relay-log.info

从库配置文件时间变化:

[root@DRS3307]# ll

total80

drwxr-xr-x9 mysql mysql  4096 Apr 27 04:20 data

-rw-r--r--1 mysql mysql  1922 Apr 27 04:16 my.cnf

-rwx------1 mysql mysql  1304 Apr 26 23:47 mysql

-rw-rw----1 mysql mysql   203 Apr 27 03:47mysql-bin.000001

-rw-rw----1 mysql mysql   205 Apr 27 04:16mysql-bin.000002

-rw-rw---- 1 mysql mysql   190 Apr 27 04:20 mysql-bin.000003   #从库已经开始写binlog日志了,并且和主库时间一致。

-rw-rw----1 mysql mysql    84 Apr 27 04:16mysql-bin.index

srwxrwxrwx1 mysql mysql     0 Apr 27 04:16mysql.sock

-rw-r-----1 mysql root  25871 Apr 27 04:16mysql_oldboy3307.err

-rw-rw----1 mysql mysql     5 Apr 27 04:16mysqld.pid

-rw-rw----1 mysql mysql   150 Apr 27 04:16relay-bin.000007

-rw-rw----1 mysql mysql   336 Apr 27 04:20relay-bin.000008

-rw-rw----1 mysql mysql    56 Apr 27 04:16relay-bin.index

-rw-rw---- 1 mysql mysql    54 Apr 27 04:20 relay-log.info  #relay-log日志文件也变化了

 

 

由上面的实验可以知道,

1、从库只开启log-bin功能,不添加log-slave-updates参数,从库从主库复制的数据不会写入log-bin日志文件里。

2、直接向从库写入数据时,是会写入log-bin日志的。

3、开启log-slave-updates参数后,从库从主库复制的数据会写入log-bin日志文件里。这也是该参数的功能。


mysql之log-slave-updates参数的更多相关文章

  1. mysql细说show slave status参数详解(最全)

    1. Slave_IO_State 这里显示了当前slave I/O线程的状态(slave连接到master的状态).状态信息和使用show processlist | grep "syst ...

  2. mysql relay log参数汇总

    前言:MySQL进行主主复制或主从复制的时候会在配置文件制定的目录下面产生相应的relay log,本文档总结这些相关参数的定义及解释. 1.什么是relay log The relay log, l ...

  3. MySQL 5.6 my.cnf 参数详细说明

    # 以下选项会被MySQL客户端应用读取.# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容.# 如果你想你自己的MySQL应用程序获取这些值.# 需要在MySQL客户端库初始化的时候指定 ...

  4. MySQL redo log 与 binlog 的区别

    MySQL redo log 与 binlog 的区别 什么是redo log 什么是binlog redo log与binlog的区别 1. 什么是redo log? redo log又称重做日志文 ...

  5. (5.3)mysql高可用系列——mysql复制之复制的参数

    参考:https://www.iteye.com/blog/shift-alt-ctrl-2269539 详情 [1]参数 #[1.1]基本参数 bind-address=192.168.1.201 ...

  6. MySQL数据库my.cnf性能参数如何调优

    提供一个MySQL 5.6版本适合在1GB内存VPS上的my.cnf配置文件.配置文件可以到这里下载:: 下载my.cnf [client] port = 3306 socket = /tmp/mys ...

  7. mysql (master/slave)复制原理及配置

    1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  8. 17.2.2.1 The Slave Relay Log Slave中继日志

    17.2.2.1 The Slave Relay Log Slave中继日志 中继日志, 像binary log,有一组文件组成包含events 描述数据库的修改,和一个index文件包含所有使用过的 ...

  9. MySQL的Master/Slave群集安装和配置

    本文介绍MySQL的Master/Slave群集安装和配置,版本号安装最新的稳定版GA 5.6.19. 为了支持有限HA.我们用Master/Slave读写简单孤立的集群.有限HA这是当Master不 ...

  10. MySQL 5.6.20-enterprise-commercial的参数文件位置问题

    今天在折腾MySQL的参数文件时,突然发现MySQL 5.6.20-enterprise-commercial-advanced-log这个版本数据库的参数文件my.cnf的位置有点奇怪,如下所示: ...

随机推荐

  1. 【kruscal】【最小生成树】poj2421 Constructing Roads

    SB题,求最小生成树,其中有些边已经给您建好啦. 随意暴力即可. #include<cstdio> #include<algorithm> #include<cstrin ...

  2. 【带修莫队】bzoj2120 数颜色

    块大小为n2/3. 把询问和修改分开. 每次两个询问之间的修改进行暴力转移,如果修改在上一次询问的区间里,就会对当前状态形成影响. 好慢. #include<cstdio> #includ ...

  3. 1.8(java学习笔记)继承与方法的重写

    继承 在java中可以通过继承提高代码的复用率. 例如A继承了B,就可以是 例如,首先有一个类似Person,这个类中有有一些属性和方法,我们再新建一个Student类,其中有一部分属性和方法与Per ...

  4. [OpenJudge8471][划分DP]切割回文

    切割回文 总时间限制: 1000ms 内存限制: 65536kB [描述] 阿福最近对回文串产生了非常浓厚的兴趣. 如果一个字符串从左往右看和从右往左看完全相同的话,那么就认为这个串是一个回文串.例如 ...

  5. EF 通用数据层父类方法小结

    MSSql 数据库 数据层 父类 增删改查: using System;using System.Collections.Generic;using System.Data;using System. ...

  6. FFmpeg学习起步 —— 环境搭建

    下面是我搭建FFmpeg学习环境的步骤. 一.在Ubuntu下 从http://www.ffmpeg.org/download.html下载最新的FFmpeg版本,我的版本是ffmpeg-2.7.2. ...

  7. android出现段错误时的查找定位的方法

    android出现段错误时的查找方法,例如出现log: - ::): Fatal signal (SIGSEGV) at ), thread (SurfaceFlinger) - ::): *** * ...

  8. TSQLDBServerHttpApi一个使用HTTPS.SYS内核的数据库服务端控件

    TSQLDBServerHttpApi一个使用HTTPS.SYS内核的数据库服务端控件 在WINDOWS操作系统,TSQLDBServerHttpApi使用HTTPS.SYS作为通信内核,而HTTPS ...

  9. fl2440 platform总线button字符设备驱动

    驱动程序: #include "s3c_driver.h" #define DRV_DESC "S3C24XX button driver" /* Driver ...

  10. javascript快速入门25--浏览器中的XML

    打开XML 首先,直接从浏览器中打开XML文件,浏览器会对其进行格式良好性检查,如果不符合XML语法规范则显示出错,如果格式良好,再检查是否包含样式表(CSS或XSL),如果包含样式表,则用样式表格式 ...