mysql之log-slave-updates參數

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   使用   sp   for   

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)

 

查看主庫檔案

[[email protected]]# 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

 

從庫設定檔時間:

[[email protected]]# 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

 

測試:在主庫上建立資料庫,看看從庫是否寫二進位日誌。

[[email protected] 3306]# date

Sun Apr 27 04:02:26 CST 2014

[[email protected]]# 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

 

從庫設定檔時間變化:

[[email protected]]# 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 

直接向從庫寫入資料:

[[email protected] 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)

查看從庫記錄檔時間變化:

[[email protected]]# 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、在主庫上做建立操作

[[email protected] 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)

檢查設定檔時間變化:

主庫設定檔時間:

[[email protected]]# 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

 

從庫設定檔時間變化:

[[email protected]]# 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參數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.