MySQL Master Slave Replication
- Category: 電腦相關
- Last Updated: Monday, 28 July 2014 14:40
- Published: Wednesday, 23 July 2014 09:52
- Written by sam
現在有了三臺主機…
總不能一直匯出、匯入吧
MYSQL有許多種的複寫方式Master Slave Replication
當然也有"即時"的方式…採用叢集(MySQL Cluster
可以參考官方
MYSQL版本最好是一致的,免得像我…
我的環境
MASTER WIN7-64 MYSQL5.6
SLAVE EC2 ELF 64-bit MYSQL5.5
開始前先說明一下
MASTER SLAVE作動方式為
由SLAVE會主動的去和MASTER作查詢Master Binary Log -> Slave Relay Log -> 更新Slave,這是非同步的,所以可以接受兩端的連線中斷(也就是不需要一直保持連線
先從MASTER開始
我的是WIN7,所以要修改的檔案
C:\ProgramData\MySQL\MySQL Server 5.6\MY.INI
在[MYSQLD]
區塊加上
log_bin="B:/mylogbin.log"
server-id=1
binlog-do-db = joomla
replicate-ignore-table=joomla.jos_session
1.功能是啟動交易記錄(Binary log
2.ID的部份…絕對不能重覆
3.是要同步的DB(我只同步JOOMLA
打開mysql介面
mysql> show master status \G;
可以見到正常啟動了
第二步是設定SLAVE用來同步的存取帳號
一樣在介面
第一段是c帳號,@後面接來源ip,identified接存取密碼
第二段是將權限開放給該帳號
第三段是將權限表更新
再來請將MASTER的DB匯出
至SLAVE匯入
mysql -u root -p -h localhost Joomla < joomla.sql
修改 /etc/my.cnf
server-id=2
log_bin=/var/log/mysql-bin.log
replicate-do-db=joomla
請依情況修改路徑及同步DB
再來請重新啟動mysql
service mysqld restart
設定連線帳號及IP位址
注意MASTER HOST IP別填到 SLAVE IP
後面接帳號及密碼
第二段是啟動複寫機制
使用指令於mysql
SHOW SLAVE STATUS \G;
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host:
Master_User: c
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mylogbin.000001
Read_Master_Log_Pos: 120
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 149
Relay_Master_Log_File: mylogbin.000001
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB: joomla
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 120
Relay_Log_Space: 306
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave can not handle replication events with the checksum that master is configured to log; the first event 'mylogbin.000001' at 120, the last event read from 'B:\mylogbin.000001' at 120, the last byte read from 'B:\mylogbin.000001' at 120.'
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
ERROR:
No query specified找尋重點欄位
這兩個必需是YES才算是成功,第三個是同步DB名稱
再往下看錯誤的地方
LAST IO的部份
這邊就是我一開始說的…一定要注意版本
因為不同的版本設定方式不同
我遇到的部份為5.6較新,而且5.6使用了crc32做binlog的checksum
找到原因,要解決就很容易了
一樣打開WIN7 MY.INI
多加入一行
binlog-checksum = none
RESTART MYSQL
這樣就行了…
再到SLAVE主機
重新執行
STOP SLAVE;
CHANGE MASTER TO
MASTER_LOG_FILE='mylogbin.000009',
MASTER_LOG_POS=120;
START SLAVE;
上方的MASTER_LOG_FILE & MASTER_LOG_POS
要記得依MASTER的記錄照寫(別抄我的…
正常來說就會正常了
在SLAVE再下一次指令檢查一下
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host:
Master_User: c
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mylogbin.000002
Read_Master_Log_Pos: 95704
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 95849
Relay_Master_Log_File: mylogbin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: joomla
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 95704
Relay_Log_Space: 96006
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
ERROR:
No query specified
這樣就是完成了
最後就是提醒一下
WIN7的FW記得設定
總不能讓大家都能連線您的MYSQL DB吧
記得設定一下來源IP