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
從服務器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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.