mysql之log-slave-updates参数
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参数的更多相关文章
- mysql细说show slave status参数详解(最全)
1. Slave_IO_State 这里显示了当前slave I/O线程的状态(slave连接到master的状态).状态信息和使用show processlist | grep "syst ...
- mysql relay log参数汇总
前言:MySQL进行主主复制或主从复制的时候会在配置文件制定的目录下面产生相应的relay log,本文档总结这些相关参数的定义及解释. 1.什么是relay log The relay log, l ...
- MySQL 5.6 my.cnf 参数详细说明
# 以下选项会被MySQL客户端应用读取.# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容.# 如果你想你自己的MySQL应用程序获取这些值.# 需要在MySQL客户端库初始化的时候指定 ...
- MySQL redo log 与 binlog 的区别
MySQL redo log 与 binlog 的区别 什么是redo log 什么是binlog redo log与binlog的区别 1. 什么是redo log? redo log又称重做日志文 ...
- (5.3)mysql高可用系列——mysql复制之复制的参数
参考:https://www.iteye.com/blog/shift-alt-ctrl-2269539 详情 [1]参数 #[1.1]基本参数 bind-address=192.168.1.201 ...
- MySQL数据库my.cnf性能参数如何调优
提供一个MySQL 5.6版本适合在1GB内存VPS上的my.cnf配置文件.配置文件可以到这里下载:: 下载my.cnf [client] port = 3306 socket = /tmp/mys ...
- mysql (master/slave)复制原理及配置
1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...
- 17.2.2.1 The Slave Relay Log Slave中继日志
17.2.2.1 The Slave Relay Log Slave中继日志 中继日志, 像binary log,有一组文件组成包含events 描述数据库的修改,和一个index文件包含所有使用过的 ...
- MySQL的Master/Slave群集安装和配置
本文介绍MySQL的Master/Slave群集安装和配置,版本号安装最新的稳定版GA 5.6.19. 为了支持有限HA.我们用Master/Slave读写简单孤立的集群.有限HA这是当Master不 ...
- MySQL 5.6.20-enterprise-commercial的参数文件位置问题
今天在折腾MySQL的参数文件时,突然发现MySQL 5.6.20-enterprise-commercial-advanced-log这个版本数据库的参数文件my.cnf的位置有点奇怪,如下所示: ...
随机推荐
- 【贪心】【multiset】 Codeforces Round #401 (Div. 2) B. Game of Credit Cards
对第一个人的排序,然后从小到大处理,对第一个人的每枚卡片,从第二个人的卡片中选择一个大于等于它的最小的,否则选择一个当前剩下的最小的,这样可以保证负场最少. 如果选择的改成大于它的最小的,就可以保证胜 ...
- Python中内置的日志模块logging用法详解
logging模块简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/P ...
- 安网讯通签约孟强美容CRM
整形美容CRM软件是辽宁安网讯通有限公司为孟强整形医院定制开发的一套客户关系管理软件,软件专门针对整形美容行业专科门诊的需求,能满足大中小整形美容机构或或各种专科科室的日常业务需求. 主要功能包括: ...
- 转载:win10 下安装32位的Oracle 11g 客户端(问题:环境不满足最低要求)
1. 在安装文件夹中,找 stage->cvu->cvu_prereq.xml文件. 2. 用记事本打开其xml文件进行编辑,加下面一段保存. <OPERATING_SYSTEM R ...
- SublimeText3插件Emmet自定义HTML
工作上总使用Sublime,Emmet默认生成html格式不太满足需要,生成后还需要额外添加一些元素,如下是自定义html格式的步骤,供大家参考: 1. 安装Sublime Text3.Emmet插件 ...
- iOS:实现邮件和短信发送的简单示例
发送邮件1.导入库文件:MessageUI.framework2.引入头文件3.实现代理<MFMailComposeViewControllerDelegate> 和 <UINavi ...
- C#之鼠标模拟技术
游戏程序的操作不外乎两种——键盘输入控制和鼠标输入控制,几乎所有游戏中都使用鼠标来改变角色的位置和方向,本文主要是讲述如何使用C#调用Windows API函数实现鼠标模拟操作的功能.首先通过结合Fi ...
- java project打包生成jar包(通用)
1. 在工程目录下新建一个build.xml文件,如下图所示,注意必须是在工程目录下,而不是在工程目录的src目录里. 2.编写ant脚本,内容如下,jar文件名称(com.anllin.rup.bo ...
- hbase集群安装和shell操作
1.上传hbase安装包 2.解压 3.配置hbase集群,要修改3个文件(首先zk集群已经安装好了) 注意:要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/ ...
- c与c++中的强制类型转换区别
强制类型转换的一般形式为: (类型名)(表达式) 如:(int)a.这是C语言使用的形式,C++把它保留了下来,以利于兼容. C++还增加了以下形式: 类型名(表达式) 如:int(a).这种形式类似 ...