1. 程式人生 > >(轉)不停止MySQL服務增加從庫的兩種方式

(轉)不停止MySQL服務增加從庫的兩種方式

轉自:http://lizhenliang.blog.51cto.com/7876557/1669829

現在生產環境MySQL資料庫是一主一從,由於業務量訪問不斷增大,故再增加一臺從庫。前提是不能影響線上業務使用,也就是說不能重啟MySQL服務,為了避免出現其他情況,選擇在網站訪問量低峰期時間段操作。

 一般線上增加從庫有兩種方式,一種是通過mysqldump備份主庫,恢復到從庫,mysqldump是邏輯備份,資料量大時,備份速度會很慢,鎖表的時間也會很長。另一種是通過xtrabackup工具備份主庫,恢復到從庫,xtrabackup是物理備份,備份速度快,不鎖表。為什麼不鎖表?因為自身會監控主庫日誌,如果有更新的資料,就會先寫到一個檔案中,然後再回歸到備份檔案中,從而保持資料一致性。

伺服器資訊:

主庫:192.168.18.212(原有)

從庫1:192.168.18.213(原有)

從庫2:192.168.18.214(新增)

資料庫版本:MySQL5.5

儲存引擎:Innodb

測試庫名:weibo

一、mysqldump方式

MySQL主從是基於binlog日誌,所以在安裝好資料庫後就要開啟binlog。這樣好處是,一方面可以用binlog恢復資料庫,另一方面可以為主從做準備。

原有主庫配置引數如下:

1 2 3 4 5 6 # vi my.cnf
server-id = 1             #id要唯一 log-bin = mysql-bin         #開啟binlog日誌 auto-increment-increment = 1   #在Ubuntu系統中MySQL5.5以後已經預設是1 auto-increment-offset = 1  slave-skip-errors = all      #跳過主從複製出現的錯誤

1. 主庫建立同步賬號

1 mysql> grant all on *.* to 
'sync'@'192.168.18.%' identified by 'sync';

2. 從庫配置MySQL

1 2 3 4 5 6 # vi my.cnf server-id = 3             #這個設定3 log-bin = mysql-bin         #開啟binlog日誌 auto-increment-increment = 1   #這兩個引數在Ubuntu系統中MySQL5.5以後都已經預設是1 auto-increment-offset = 1  slave-skip-errors = all      #跳過主從複製出現的錯誤

3. 備份主庫

1 # mysqldump -uroot -p123 --routines --single_transaction --master-data=2 --databases weibo > weibo.sql

引數說明:

--routines:匯出儲存過程和函式

--single_transaction:匯出開始時設定事務隔離狀態,並使用一致性快照開始事務,然後unlock tables;而lock-tables是鎖住一張表不能寫操作,直到dump完畢。

--master-data:預設等於1,將dump起始(change master to)binlog點和pos值寫到結果中,等於2是將change master to寫到結果中並註釋。

4. 把備份庫拷貝到從庫

1 # scp weibo.sql [email protected]:/home/root

5. 在主庫建立test_tb表,模擬資料庫新增資料,weibo.sql是沒有的

1