mysql數據庫的主從同步

數據庫備份方案

mysql數據庫的主從同步


一.       實驗環境部署

主服務器(mysql master) IP:192.168.1.107  端口3306

從服務器(mysql slave)  IP: 192.168.1.127  端口3306

I.    主服務器的操作

1.      關於主服務器的相關配置

1.1 設置server-id值並開啓binlog參數

根據mysql的同步原理:關鍵因素就是binlog日誌。

編輯/etc/my.cnf配置文件,修改和添加相關參數。

[root@localhost ~]# vi/etc/my.cnf

[mysqld]

server-id = 1

log-bin = mysql-bin


備註:

#. 上面兩參數放在my.cnf中的[mysqld]模塊下,否則會出錯;

#. 要先在my.cnf文件中查找相關參數,並按具體要求修改,不存在時添加相關參數,切記,參數不能重複;

#. 修改my.cnf配置後需要重啓數據庫

命令爲:/etc/init.d/mysqld restart,

修改完配置文件,檢查配置後的結果:

[root@localhost ~]# grep -E"server-id|log-bin" /etc/my.cnf


重啓mysql數據庫

[root@localhost ~]#/etc/init.d/mysqld restart

1.2 建立用於主、從數據同步的帳號《rep》

[root@localhost ~]#mysql–uroot–pmyrootpw

Mysql>selectuser();

Mysql>grantreplication slave on *.* to [email protected].%identified by ‘123456’;

備註:

#replication slave:爲mysql同步的必須權限,此處不要授權all

#*.*:表示所有庫所有表,庫也是可以指定具體的庫和表進行復制,如test.test1(test庫的test1表);

#binlog-do-db = test :需要備份數據,多個寫多行,不寫全部都備份
binlog-ignore-db= mysql :不需要備份的數據庫,多個寫多行

#[email protected].%:rep爲同步賬號,192.168.1.%爲授權主機,使用了%表示允許整個192.168.1.0網段以rep用戶訪問;

#identified by "123456": 123456爲密碼,實際環境用複雜密碼

查看用戶權限

Mysql>showgrants for[email protected];


1.3   對主數據庫鎖表只讀:

注:實際環境中,操作主從複製,需要申請停機時間,鎖表會影響業務。

mysql>flush tables with read lock;

注:這個鎖表命令的時間,在不同引擎的情況,會受下面參數的控制,鎖表超過設置時間不操作會自動解鎖;

默認情況下的時長爲:

mysql>show variables like "%timeout%"; 可以查看到默認鎖表時間最大值。


完成後測試是否鎖表成功:打開另一窗口創建一test1表,是不會執行的,證明鎖表不能更新,但可讀,不可寫,因爲是read讀鎖,鎖表主要是爲了導出數據庫文件,從而取得正確的偏移量的值,保證導入從數據庫,數據一致。

1.4 查看主庫狀態

查看主庫狀態,即當前日誌文件名和二進制日誌偏移量

mysql>show master status;

命令顯示的信息要記錄在案,後面的從庫複製時是從這個位置開始的。


1.5 導出主數據庫數據

[root@localhost ~]#mkdir backup

[root@localhost ~]#mysqldump–uroot–pmyrootpw–A –B|gzip>backup/mysql_bak.$(date +%F)sql.gz

注:-A表示備份所有庫, -B表示增加user DB和drop等參數(導庫時會直接覆蓋所有的)。

[root@localhost backup]# ll


爲了確保導庫期間,數據庫沒有數據插入,可以再檢查下主庫狀態信息

[root@localhost backup]# mysql -uroot -pmyrootpw -e "show masterstatus"

注:無特殊情況,binlog文件及位置點是保持不變的。

導庫後,解鎖主庫,恢復可寫;

mysql>unlock tables;

特別提示,有讀者這裏犯迷糊,實際上做從庫的,無論主庫更新多少數據了,最後從庫都會從上面show master status 的位置很快趕上主庫的位置進度的。

1.6  把主庫備份的mysql數據遷移到從庫

[root@localhost ~]# scp backup/[email protected]:/backup

II.  從服務器的操作

1.    關於從服務器的相關配置

1.1 設置server-id值並關閉binlog設置

注:數據庫的server-id在LAN內是唯一的,這裏的server-id要和主庫及其他從庫不同,並註釋掉從庫的binlog參數配置;

編輯/etc/my.cnf配置文件,修改相關的參數設置

master-connect-retry=60 #如果從服務器發現主服務器斷掉,重新連接的時間差

[root@localhost ~]# vi /etc/my.cnf

[mysqld]

server-id = 2

#log-bin = mysql-bin

檢查配置後的結果

[root@localhost ~]#grep–E “server-id|log-bin” /etc/my.cnf

重啓從數據庫

[root@localhost ~]#/etc/init.d/mysqld restart

1.2 還原主庫導出的數據到從庫

解壓主庫備份的數據

[root@localhost backup]# ls

還原主庫解壓出的數據到從庫

[root@localhost backup]#mysql–uroot–pmyrootpw<mysql_bak.2012-07-09.sql

1.3 登錄從庫配置同步參數

mysql>change master to #連接主數據庫

mysql>master_host=”192.168.1.107”, #主庫的IP地址

mysql>master_port=3306, #主庫的端口,從庫的端口可以和主庫不同

mysql>master_user=”rep”, #主庫上建立的用於數據同步的用戶《rep》

mysql>master_password=”123456”, #用戶《rep》的密碼mysql>master_log_file=”mysql-bin.000003”,  #是mysql>showmaster status時看到的二進制日誌文件名稱,不能多空格。mysql>master_log_pos=376213;  #是mysql>show master status時查看到的二進制日誌偏移量,不能多空格。

1.4 啓動從庫同步開關

啓動從庫同步開關,並查看同步狀態

[root@localhost backup]#mysql–uroot–pmyrootpw–e “start slave”

[root@localhost backup]#mysql–uroot–pmyrootpw–e “show slave status\G”

也可以登錄從庫,在數據庫下面執行相關命令:

mysql>start slave;

mysql>show slave status\G;

判斷搭建是否成功就看如下IO和SQL兩個線程是否顯示爲“yes”狀態

Slave_to_Running:YES #負責從庫去主庫讀取binlog日誌,並寫入從庫中繼日誌中

Slave_SQL_Running:YES #負責讀取並執行中繼日誌中的binlog轉換sql語句後應用到數據庫彙總。

也可以執行命令過濾查看如下:

[root@localhost backup]# mysql -uroot -pmyrootpw -e"show slave status\G" | egrep "IO_Running|SQL_Running"

1.5 測試主從同步

在主庫創建 —>數據庫以及查看

在主庫中創建庫“mytable”用於主從同步:

[root@localhost]#mysql–uroot–pmyrootpw–e “show databases;

[root@localhost]#mysql–uroot–pmyrootpw–e “create database mytable;”

在從庫查看是否主從同步:

[root@localhost]#mysql–uroot–pmyrootpw–e “show databases;

到此!主從數據庫同步成功完成;從數據庫可以實現數據同步。

發佈了6 篇原創文章 · 獲贊 12 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章