相关文章推荐
有胆有识的泡面  ·  go ...·  1 周前    · 
一直单身的抽屉  ·  input type=“file” ...·  5 月前    · 
爱热闹的竹笋  ·  jquery ...·  1 年前    · 
爱看书的卤蛋  ·  Flutter - ...·  1 年前    · 

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 日志文件里。这也是该参数的功能。