Mysql5.6 Master+Master

muxinqing發表於2014-11-12

Mysql5.6 Master+Master
 

 
環境:
 
作業系統:rehat 6.0
 
MySQL版本:5.6
 
主伺服器IP:192.168.0.250
 
從伺服器IP:192.168.0.252
 
實現目標:主從兩臺機器MySQL資料雙向同步
 
 
 
資料庫準備工作
 
分別A,B在兩臺伺服器上執行鎖表操作:
 
mysql>FLUSH TABLES WITH READ LOCK"
 
A點
將需要配置同步的資料庫Dump出來:
 
shell>mysqldump -uroot -p mysql > /tmp/mysql.sql
 
將dump出來的檔案複製到另外一臺伺服器上,方法隨意。我用scp
 
shell>scp -P 22000 /tmp/mysql.sql root@192.168.0.252ter:/data

B


如果這臺伺服器已經建好庫了,那麼可以直接導資料:
 
shell>mysql -uroot -p  mysql < /data/mysql.sql
 
如果還沒有該庫,那麼再導資料之前我們需要先建庫。
 CREATE DATABASE "databasename
 
最後我們需要在兩臺伺服器上別分建立一個賬號,用來同步資料。
 
shell>mysql -u root -p
A點
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT, SUPER ON *.* TO 'BEIFEN'@'192.168.0.252' IDENTIFIED BY '123456' WITH GRANT OPTION;
 
mysql>FLUSH PRIVILEGES;

B點
 
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT, SUPER ON *.* TO 'BEIFEN'@'192.168.0.250' IDENTIFIED BY '123456' WITH GRANT OPTION;
 
mysql>FLUSH PRIVILEGES;
 
修改my.cnf
 
首先,我們需求修改bind-address選項。保證mysql監聽在一個可以被對方訪問到的網口上,當然如果你監聽在0.0.0.0上就不會有這個問題了,但是這麼做通常會帶來一些安全問題。我一般會讓它監聽內網地址
 
 bind-address = 192.168.0.250(主伺服器)
 
 bind-address = 192.168.0.252(從伺服器)
 
 
 A點
將以下內容加到主伺服器的my.cnf裡
server-id = 250
log_bin = /data/mysql-bin.log
relay-log = mysql-relay
log_slave_updates = 1
binlog-ignore-db = mysql,information_schema
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 1
server-id伺服器標識,我們必須給兩臺機器分配不同的server-id.
 
log-bin,開啟mysql的binlog(二進位制日誌).開啟後mysql會將所有的修改操作記錄到binlog中,可以用mysqlbinlog工具檢視,裡面都是一條一條的sql語句。slave I/O會讀取主機的binlog,然後把讀取到的內容在slave上執行,這就是mysql主從同步的基本原理。
 
binlog-do-db,設定哪些資料庫寫binlog。
 
binlog-ingore-db,設定哪些資料庫不寫binlog。
 
透過這兩個選項我們就可以設定哪些庫同步哪些庫不同步。
 
auto-increment-incrment和auto-increment-offset這兩個選項的設定是為了防止2臺伺服器互相複製產生關鍵欄位的衝突。如果他們用不同的便宜,比如一個按照1,3,5,7增加而另外一臺按照那個2,4,6,8增加。auto-incrment-increment=2自動增加的欄位每次步進是2,auto-increment-offset=1自動增加的欄位的初始值是1
 
 
 B點
將以下內容新增到從伺服器
server-id = 252
log_bin = /data/mysql-bin.log
relay-log = mysql-relay
log_slave_updates = 1
binlog-ignore-db = mysql,information_schema
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 2 
注意這裡auto_increment_offset選項的值跟主伺服器上不一樣。
 
 
 
分別重啟A,B mysql服務
 
[root@hisdg1 ~]# service mysql restart
 
或者
 
shell>mysql -u root -p -e "RESET MASTER"
 
 
  A點
配置主機到從機同步
 
記錄主機的master狀態
 
mysql> show master status\G
 
*************************** 1. row ***************************
 
            File: log-bin.log.000002
 
        Position: 2842
 
    Binlog_Do_DB:
 
Binlog_Ignore_DB: mysql,test
 
1 row in set (0.00 sec)
 
根據主機顯示結果在從機上配置master引數
 
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.252',MASTER_USER='BEIFEN',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=2842;
 
其中MASTER_HOST、MASTER_USER、MASTER_PASSWORD這些引數可以在my.cnf裡。但是我個人更喜歡在mysql裡配置,一方面安全點,另一方面MASTER_LOG_FILE和MASTER_LOG_POS這些引數還是得在mysql裡面配置,不如一塊在myql裡配置來的方便。
 
 
 B點
配置從機到主機同步(上一節的步驟反過來執行一遍)。
 
記錄從機上的master狀態
 
mysql> show master status\G
 
*************************** 1. row ***************************
 
            File: log-bin.log.000008
 
        Position: 12131228
 
    Binlog_Do_DB: databasename
 
Binlog_Ignore_DB: mysql,test
 
1 row in set (0.00 sec)
 
根據從機顯示的結果在主機上配置master引數
 
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.250',MASTER_USER='rsync',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000008',MASTER_LOG_POS=12131228;
 
 
分別開啟A,B slave執行緒
 
mysql>start slave;
 
 
 
解鎖
 
mysql>unlock tables;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29065182/viewspace-1329202/,如需轉載,請註明出處,否則將追究法律責任。

相關文章