首頁  >  文章  >  資料庫  >  兩台mysql伺服器實現雙機互備配置並測試資料同步

兩台mysql伺服器實現雙機互備配置並測試資料同步

php是最好的语言
php是最好的语言原創
2018-08-02 17:17:503286瀏覽

對於實現兩台機子的互備配置,本文作出了詳細的介紹,之後的測試數據同步,在10.168.1.44伺服器資料庫裡修改一條數據, 可以看到數據已經同步過來了。反過來,修改10.168.0.126的數據,也可以看到10.168.1.44資料庫中對應表資料改變。到此,10.168.0.126與10.168.1.44互為主從資料庫關係。

相關mysql影片教學推薦:《mysql教學

apache php mysql

前期準備

兩台伺服器:10.168.1.44

10.168.0.126

運作環境:Linux系統(Centos6.5)

Mysql版本:5.7.22

修改設定

#在兩台伺服器上分別修改/etc/my .conf設定檔的資訊如下:

在10.168.1.44伺服器/etc/my.conf設定檔中加入:

##server_id=10

#log-bin=master_01 //開啟二進位日誌,作用是另一個伺服器可以透過該日誌來決定執行動作

binlog-do-db=test_db  //同步的表

binlog-do-db=my_test //同步的表

在10.168.0.126伺服器/etc/my.conf設定檔中新增:

server_id=20

log-bin=master_02    //開啟二進位日誌,作用是另一個伺服器可以透過該日誌來決定執行動作

binlog-do-db=test_db  //同步的表

binlog-do-db=my_test  //同步的表格

新增之後執行指令 service mysqld restart 重新啟動資料庫使修改生效

新增mysql帳號

新增mysql帳戶,透過給其授權使用者執行資料同步

10.168.1.44執行指令:

GRANT FILE ON *.* TO 'copyuser'@'10.168.0.126' IDENTIFIED BY 'Admin@123';

GRANT REPLICATION SLAVE ON *.* TO 'copyuser'@'10.168.0.126' IDENTIFIED BY 'Admin@123';

flush privileges;

10.168.0.126執行指令:

GRANT FILE ON *.* TO 'copyuser'@'10.168.1.44' IDENTIFIED BY 'Admin@123';

GRANT REPLICATION SLAVE ON *.* TO 'copyuser'@'10.168.1.44' IDENTIFIED BY 'Admin@123';

flush privileges;

設定從資料庫

10.168.1.44設定:

檢視目前主資料庫狀態:

##mysql> show master status;

記錄目前的file與position的值;

進入10.168.0.126存取資料庫查看其主資料庫狀態

在10.168.1.44執行

mysql>CHANGE MASTER TO

MASTER_HOST='10.168.0.126',

MASTER_USER='copyuser',

MASTER_PASSWORD='Admin@123',

MASTER_PORT=3306,

MASTER_LOG_FILE='master_02.000002',

MASTER_LOG_POS=1771,

MASTER_CONNECT_RETRY=10;

在10.168.0.126执行:

mysql>CHANGE MASTER TO

MASTER_HOST='10.168.1.44',

MASTER_USER='copyuser',

MASTER_PASSWORD='Admin@123',

MASTER_PORT=3306,

MASTER_LOG_FILE='master_01.000008',

MASTER_LOG_POS=154,

MASTER_CONNECT_RETRY=10;

注:若slave开启状态无法执行以上命令,需要首先执行 stop slave;关闭slave,执行完上述命令后执行start slave;命令开启slave。

上述命令执行完后,查看从服务状态:

执行命令:

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 10.168.1.44

                  Master_User: copyuser

                  Master_Port: 3306

                Connect_Retry: 10

              Master_Log_File: master_01.000008

          Read_Master_Log_Pos: 154

               Relay_Log_File: cdh-2-relay-bin.000004

                Relay_Log_Pos: 367

        Relay_Master_Log_File: master_01.000008

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB:

          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: 154

              Relay_Log_Space: 740

              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: 10

                  Master_UUID: 778beb1e-8f0f-11e8-a815-00505695cd8c

             Master_Info_File: /var/lib/mysql/master.info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

           Master_Retry_Count: 86400

                  Master_Bind:

      Last_IO_Error_Timestamp:

     Last_SQL_Error_Timestamp:

               Master_SSL_Crl:

           Master_SSL_Crlpath:

           Retrieved_Gtid_Set:

            Executed_Gtid_Set:

                Auto_Position: 0

         Replicate_Rewrite_DB:

                 Channel_Name:

           Master_TLS_Version:

1 row in set (0.00 sec)

 注意

Slave_IO_Running: Yes與Slave_SQL_Running: Yes

,只有當兩個都為yes是才是設定成功。

測試資料同步#在10.168.1.44伺服器資料庫修改一筆資料:

#修改前:

兩台mysql伺服器實現雙機互備配置並測試資料同步 修改後:

兩台mysql伺服器實現雙機互備配置並測試資料同步 查看10.168.0.126資料庫對應表中資料:

兩台mysql伺服器實現雙機互備配置並測試資料同步 可以看到已經同步過來了。

反過來,修改10.168.0.126的數據,也可以看到10.168.1.44資料庫中對應表資料改變。

到此,10.168.0.126與10.168.1.44互為主從資料庫關係

可能有問題

    查看slave狀態時,會發現
  1. Slave_IO_Running: Connecting

出現該問題主要有三個原因:

  1. 網路不通(互相ping下試試看能否ping通)

  2. 密碼不對:查看在設定slave時執行的指令中的密碼是否正確

  3. #Position不正確:設定slave時對應position未填入正確的position(查看對應從伺服器資料庫的master狀態:show master status即可找到)

    #

我出現這個問題的原因是只在一個伺服器上建立了用於同步資料的使用者‘copyuser’,另一個伺服器資料庫中並未建立該使用者。創建之後OK了

    4.查看slave狀態時,會發現Slave_SQL_Running: No

出現這個現象的原因主要是兩邊資料庫資料存在不同之處,可以透過查看mysql日誌定位具體哪塊資料出現異常

Mysql日誌一般在/var/log/mysqld.log

需要注意的是,如果你只配置了從資料庫同步主資料庫數據,而未設定為互相同步,修改從資料庫資料可能會導致同步失效。

相關文章:

Mysql 資料庫雙機熱備的配置_MySQL

Mysql的即時同步-雙機互備(雙重master)

相關影片:

MySQL資料管理之備份復原案例解析影片教學

##

以上是兩台mysql伺服器實現雙機互備配置並測試資料同步的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn