程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql5.5主從同步復制配置

mysql5.5主從同步復制配置

編輯:MySQL綜合教程

mysql5.5主從同步復制配置


在上篇文章《爛泥:學習mysql數據庫主從同步復制原理》中,我們介紹了有關mysql主從復制的基本原理。在這篇文章中,我們來實際測試下mysql5.5的主從同步復制功能。

注意mysql5.1.7以前版本與其以後的版本在主從同步部分參數不同。mysql5.1.7以後的版本中不支持master-connect-retry之類的參數。如果在my.cnf文件中加入該類似的參數,mysql會在下次重啟時報錯。

說明:主庫master與從庫slave都是centos6.5 64bit,如下:

cat /etc/system-release

clip_image001

主庫master與從庫slave都是mysql數據庫版本都為5.5.39。

mysql –V

clip_image002

主庫master與從庫slave的IP分別如下:

master IP:192.168.1.213 slave IP:192.168.1.214

clip_image003

我們以主庫master的ilanni數據庫為實驗對象,如下:

clip_image004

根據《爛泥:學習mysql數據庫主從同步復制原理》文章可知,mysql的主從同步復制過程如下:

1、主庫master在執行SQL語句之後,會把相關的SQL語句記錄到binlog文件中。

2、從庫slave連接主庫master,並從主庫master獲取該binlog文件,存於本地relay-log文件中,然後從master.info文件讀取上次同步時的pos位置節點起執行SQL語句。

由以上信息可知,我們的mysql主從同步復制實驗,需要以下幾個步驟:

1、 配置主庫master同步復制時的選項

2、 在主庫master上創建同步復制時的用戶並授權

3、 主庫master鎖表

4、 記錄主庫master的binlog以及pos位置節點

5、 導出ilanni數據庫

6、 配置slave端同步復制時所需要的選項

7、 在從庫slave上創建數據庫ilanni並導入備份

8、 解鎖主庫表

9、 設置從庫slave與主庫master同步

10、 在從庫slave上開啟同步

11、 查看從庫slave的relay-log以及master.info

12、 測試主從同步

一、配置主庫master同步復制時的選項

mysql的主從配置,我們只需要修改my.cnf文件即可。如下:

cat /etc/my.cnf |grep -v ^#|grep -v ^$

log-bin=mysql-bin

max_binlog_size = 500M

server-id=1

binlog-do-db=ilanni

binlog-ignore-db=mysql

clip_image005

其中log-bin=mysql-bin表示啟用mysql二進制日志,該項必須要啟用,否則mysql主從不會生效。

max_binlog_size=500M表示每個binlog文件最大大小,當此文件大小等於500M時,會自動生成一個新的日志文件。注意:一條記錄不會寫在2個日志文件中,所以有時日志文件會超過此大小。

server-id=1表示mysql服務器ID,該ID必須在該主從中是唯一的,默認是1,該ID可以自行自定義,但必須為數字。

binlog-do-db=ilanni表示需要同步的數據庫名字,如果是多個數據庫,就以此格式再寫一行即可。

binlog-ignore-db=mysql表示不需要同步的數據庫名字,如果是多個數據庫,就以此格式再寫一行即可。

注意:如果binlog-do-db和binlog-ignore-db不加的話,那麼默認是同步復制整個mysql數據庫。

二、在主庫master上創建同步復制時的用戶並授權

登錄master端,創建數據庫用戶ilanni,並授權為replication slave權限。如下:

grant replication slave on *.* to 'ilanni'@'%' identified by '123456';

select user,repl_slave_priv from user where user='ilanni';

clip_image006

通過上圖,我們可以看到目前數據庫用戶ilanni被授予replication slave權限,在user表中的表現為repl_slave_priv字段為Y。

注意:replication slave權限:只有擁有此權限的用戶才可以查看從服務器slave以及從主服務器master讀取二進制日志的權限。

授權完畢後,我們需要在slave測試ilanni用戶是否可以連接master。如下:

ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d: -f2

mysql -h 192.168.1.213 -uilanni -p123456

clip_image007

通過上圖我們可以看到,目前在從服務器slave已經可以正常連接master服務器。

三、 主庫master鎖表

先鎖住主庫master的表,防止數據再寫入,導致主從數據庫不一致。使用如下命令鎖表:

flush tables with read lock;

clip_image008

這樣主庫master只能被讀取,而不能被寫入數據。如下:

clip_image009

通過上圖可以看到,目前主庫已經不能再寫入數據。

注意:目前這個鎖表的終端不要退出,否則這個鎖就失效了。

四、記錄主庫master的binlog文件名以及pos位置節點

為什麼要記錄此時主庫master的binlog文件名以及pos位置節點?

因為當我們把主庫的數據庫遷移或導入到從庫slave後,我們就會讓從庫slave從這個binlog文件的該pos位置節點與主庫master同步。

查看主庫master的binlog文件名及pos位置節點,如下:

show master status;

show master status\G;

/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000003

clip_image010

通過以上兩張截圖,我們可以很明顯的看到目前主庫的binlog為mysql-bin.000003,pos位置節點為1616。

五、導出ilanni數據庫

在從庫slave與主庫master第一次同步數據時,有三種方法。

第一種方法就是在主庫鎖表後,使用tar把master庫直接打包,然後使用scp或者rsync把該打包文件弄到從庫slave上。這種情況一般適用於網站或者業務在初始化,抑或在數據庫大於100G時建議使用。

第二種方法就是在主庫鎖表後,我們直接使用mysqldump命令導出數據庫,然後在從庫上進行恢復。這個方法比較常見,所以我們一般是使用這個方法。

注意以上兩種方法,我們都需要進行在主庫master鎖表後進行操作。

第三種方法,其實我們不需要做其他工作。只需開啟同步復制即可。但是這個有一個前提就是,mysql的binlog必須齊全,這個齊全就是要包括該數據創建時的binlog也要存在。並且同步時,還必須要從最初始的binlog開始。所以,這種方法,我們一般不使用。

下面我們是通過第二種方法來導出ilanni數據庫,如下:

mysqldump -uroot -p123456 ilanni>ilanni.sql

ll -h |grep ilanni.sql

clip_image011

現在我們再把ilanni數據庫的備份文件ilanni.sql,通過scp命令復制到從庫slave上,如下:

scp ilanni.sql [email protected]:/root

clip_image012

六、配置從庫slave同步復制時所需要的選項

從庫slave上我們只需要在my.cnf文件中,修改server-id值為唯一即可。如下:

cat /etc/my.cnf|grep -v ^#|grep -v ^$

clip_image013

七、在從庫slave上創建數據庫ilanni並導入備份

我們在第五步已經把ilanni的備份文件通過scp命令復制到從庫,現在我們需要在從庫slave上,然後把備份的數據導入進去。如下:

create database ilanni;

mysql –uroot –p123456 ilanni</root/ilanni.sql

clip_image014

clip_image015

通過上圖,我們可以看到目前從庫已經完全恢復ilanni數據庫。

八、解鎖主庫master表

從庫slave的ilanni數據庫創建並導入備份後,我們現在來解鎖主庫master表,使用如下命令:

unlock tables;

clip_image016

九、設置從庫slave與主庫master同步

在第七步中我們已經恢復ilanni數據庫的數據,我們來開始設置從庫slave與主庫master同步,使用如下命令:

change master to master_host='192.168.1.213',master_user='ilanni',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=1616, master_connect_retry=100;

其中:master_host表示是主庫的IP

master_user表示主庫master上允許同步的用戶

maser_password表示同步用戶的密碼

master_log_file表示從哪個binlog文件開始同步

master_log_pos表示從該binlog文件的那個pos節點位置開始同步

master_connect_retry表示從庫slave與主庫master同步周期,默認是60s。

注意:master_log_file和master_log_pos,就是我們在第四步記錄的binlog文件名和pos位置節點。

clip_image017

十、在從庫slave上開啟同步

以上配置完畢後,我們現在來開啟主從同步。開啟主從同步,我們需要在從庫上開啟。開啟主從同步非常簡單,只需一條命令即可,如下:

start slave;

clip_image018

以上就開啟了mysql主從同步復制的開關。我們使用如下命令檢查,同步是否正常。如下:

show slave status\G;

clip_image019

我們查看同步是否主要是查看Slave_IO_Running與Slave_SQL_Running選項。如果正常同步,這兩選必須同時為YES。

如果Slave_IO_Running為NO,說明可能是從庫與主庫的網絡不通。

如果Slave_SQL_Running為NO,說明很可能是從庫與主庫的數據不一致。

通過上圖,我們可以看到目前Slave_IO_Running和Slave_SQL_Running都為YES。說明現在主從同步是正常的。

並且通過上圖,我們也可以看到從庫slave與主庫master剛開始同步時的binlog文件名以及開始同步時的pos位置節點。

十一、查看從庫slave的relay-log以及master.info

現在我們來查看從庫relay-log以及master.info信息,我們首先看relay-log信息,如下:

clip_image020

mysqlbinlog ilanni-relay-bin.000002|more

clip_image021

通過這張圖,我們可以在relay-log日志中看到,從庫slave開始同步主庫的binlog文件名以及同步復制時的pos位置節點。

現在我們來查看master.info,如下:

cat master.info |more

clip_image022

可以看到這個文件保存了從庫slave同步主庫master時的相關信息:IP、用戶、密碼、binlog文件名、pos位置節點、同步周期。

十二、測試主從同步

現在我們來測試下,mysql的主從同步。先在主庫master上給ilanni數據庫插入和刪除一條數據。如下:

insert into ilannitable values(6);

delete from ilannitable where id=2;

select id from ilannitable;

clip_image023

此時主庫master的ilanni數據庫中只有1、3、4、5、6,這個5條數據。

現在我們登錄從庫slave,查看下ilanni數據庫的情況。如下:

clip_image024

通過上圖,我們可以看到從庫slave中的ilanni數據庫和主庫master中的ilanni數據庫,數據是一致。說明主從已經同步復制已經成功。

現在我們再來查看master.info文件的信息,如下:

mysqlbinlog /usr/local/mysql/data/mysql-bin.000003

cat master.info |more

clip_image025

通過上圖中,主庫的binlog文件的pos位置節點與master.info對比。我們可以發現master.info文件中確實記錄了mysql在同步復制時的binlog文件名以及pos位置節點。

至此,有關mysql主從同步復制的實驗暫時告一段落。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved