天天看點

MySQL雙主(master-master)補充

環境:

主機名

主機IP

作業系統

MySQL版本

mysqlA

172.16.4.235

CentOS 6.5

2.6.32-431.el6.x86_64

mysql-community-server-5.7.5-0.6.m15.el6.x86_64

mysqlB

172.16.4.236

    本文做一點補充:如果mysqlA已經運作了一段時間,要添加一台新的mysqlB,與mysqlA實作主主複制,就要先備份mysqlA上的資料導入到mysqlB,使資料保持一緻;記錄mysqlA上binlog的檔案名和Position,在mysqlB上執行change mater;再記錄mysqlB上binlog的檔案名和Position,在mysqlA上執行change mater。 

    下面有兩種實作方法:

    方法一、

    1)對mysqlA資料庫鎖表操作,不讓資料再進行寫入動作

<code>&gt; flush tables </code><code>with</code> <code>read</code> <code>lock;</code>

    不要退出連接配接,另開一個終端執行備份操作。

    2)備份mysqlA的資料庫

<code>mysqldump -uroot -p --single-transaction --opt --events --triggers --routines --flush-logs --master-data=2 --databases db1 db2 &gt; db.sql</code>

    --flush-logs:選項用以生成新的二進制日志檔案。

    --master-data:選項值等于2,備份後的sql檔案裡CHANGE MASTER語句被注釋。

    --single-transaction:InnoDB 表在備份時,通常啟用選項 --single-transaction 來保證備份的一緻性,實際上它的工作原理是設定本次會話的隔離級别為:REPEATABLE READ,以確定本次會話(dump)時,不會看到其他會話已經送出了的資料。

    3)看mysqlA資料庫的狀态,記錄File和Position項的值後解鎖。

<code>&gt; show master status;</code>

<code>&gt; unlock tables;</code>

<a href="http://s3.51cto.com/wyfs02/M02/57/8D/wKiom1SdJUrBA7fOAAJle2urOEM591.jpg" target="_blank"></a>

    上圖所示二進制日志檔案為mysql-bin.000002,位置為120。

    4)在mysqlB上導入mysqlA的資料

<code>mysql -uroot -p</code><code>'MNVq_YOg9'</code> <code>&lt; db.sql</code>

    5)生成CHANGE MASTER語句,然後在mysqlB上執行

<code>&gt; STOP SLAVE; </code>

<code>&gt; CHANGE MASTER </code><code>TO</code> <code>MASTER_HOST=</code><code>'172.16.4.235'</code><code>,MASTER_USER=</code><code>'repl_user'</code><code>,MASTER_PASSWORD=</code><code>'MNVq_YOg9'</code><code>,MASTER_LOG_FILE=</code><code>'mysql-bin.000002'</code><code>, MASTER_LOG_POS=120;</code>

<code>&gt; START SLAVE;</code>

<code>&gt; SHOW SLAVE STATUS\G</code>

<a href="http://s3.51cto.com/wyfs02/M01/57/8A/wKioL1SdKKrCngloAATkjRsqgnM327.jpg" target="_blank"></a>

    Slave_IO_Running和Slave_SQL_Running的狀态,如果都為Yes,從庫mysqlB配置成功。

    6)記錄mysqlB的File和Position項的值,生成CHANGE MASTER語句,然後在mysqlA上執行,啟動mysqlA的slave

    略。

    方法二、

    1)備份A的資料庫(不用鎖表)

    2)使用grep指令查找二進制日志的名稱以及位置

<code>grep</code> <code>-i </code><code>"change master"</code> <code>db.sql</code>

<a href="http://s3.51cto.com/wyfs02/M02/57/8B/wKioL1SdK2ySy6FcAADRLSJaW1Y087.jpg" target="_blank"></a>

    上圖所示二進制日志檔案為mysql-bin.000002,位置為120。

    然後執行方法一的4)、5)、6)即可。

版權聲明:原創作品,如需轉載,請與作者聯系。否則将追究法律責任

本文轉自 張斌_青島 51CTO部落格,原文連結:http://blog.51cto.com/qicheng0211/1596310