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;

可以見到正常啟動了

 photo 2014-07-23_103651_zps812acf14.jpg

第二步是設定SLAVE用來同步的存取帳號

一樣在介面

 photo 2014-07-22_203932_zps95fc19e2.jpg

第一段是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位址

 photo 2014-07-22_204529_zpsb0b035ae.jpg

注意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找尋重點欄位

 photo 2014-07-22_235941_zps454e0579.jpg

這兩個必需是YES才算是成功,第三個是同步DB名稱

再往下看錯誤的地方

LAST IO的部份

這邊就是我一開始說的…一定要注意版本

因為不同的版本設定方式不同

我遇到的部份為5.6較新,而且5.6使用了crc32做binlog的checksum

找到原因,要解決就很容易了

一樣打開WIN7 MY.INI

多加入一行

binlog-checksum = none

 photo 2014-07-23_091405_zpsb6235b0d.jpg

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

 photo 2014-07-23_111715_zpse15adc74.jpg

要記得依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

 photo 2014-07-22_204850_zpse16c53df.jpg