mysql 雙主同步

主服務器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 [email protected]:/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服務

# 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;

MASTER_LOG_FILE和MASTER_LOG_POS可不用設置。

分別開啓A,B slave線程

mysql>start slave;



解鎖

mysql>unlock tables;

轉自:http://blog.itpub.net/29065182/viewspace-1329202/

server_id = 2
log-bin = e:/mysql-log/mysql-bin
log-error = e:/mysql-log/mysql-error.log
binlog-do-db = xxx
binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = performance_schema

log-slave-updates
slave-skip-errors = all
auto_increment_increment=2
auto_increment_offset=2
expire_logs_days = 30

replicate-do-db = xxx
replicate-ignore-db = information_schema
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = performance_schema

log-bin=fabian #M/S 需開啓log-bin 日記文件
server-id=1 #指定server-id 必須不一致,M/s 結構時 M binlog-do-db=TSC #同步數據庫名稱
binlog-ignore-db=mysql #忽略數據名稱
replicate-do-db=TSC #用於控制slave來執行同步的行爲
replicate-ignore-db=mysql #用於控制slave來執行同步的行爲
log-slave-updates #把更新的記錄寫到二進制文件中
slave-skip-errors=all #跳過錯誤,繼續執行復制
auto_increment_increment=2 #設置主鍵單次增量
auto_increment_offset=1 #設置單次增量中主鍵的偏移量
#expire_logs_days = 20 #設置log-bin 超過多少天刪除
max-binlog-size= 512M

# auto_increment_increment、auto_increment_offset 可以防止雙主主鍵衝突問題

啓動slave後這2個狀態必須爲YES
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章