Mysql Slave群切換Master

aaqwsh發表於2010-11-28

Mysql Slave群切換Master

作者:sky | 分類: 大話技術 | 標籤: 大話技術 | 日期:2008-03-03

測試環境:

Type           OS               Mysql

Master       rhel3.5           5.1.22-rc-log

Slave1       rhel3.5           5.1.22-rc-log

Slave2       rhel4.4           5.1.22-rc-log

切換測試過程是:1) Master down

               2) Slave1 切換成新的Master

               3) Slave2 更換Master配置為原Slave2

詳細過程如下:

1、從slave(slave1)群眾中選定一個slave,準備錢換成master;

2、檢查slave1的複製狀態:

mysql> SHOW PROCESSLIST ;
+—-+————-+———–+——+———+————+———————————————————————–+——————+
| Id | User        | Host      | db   | Command | Time       | State                                                                 | Info             |
+—-+————-+———–+——+———+————+———————————————————————–+——————+
|  1 | system user |           | NULL | Connect |      54733 | Waiting for master to send event                                      | NULL             |
|  2 | system user |           | NULL | Connect | 4294965772 |
Has read all relay log; waiting for the slave I/O thread to update it | NULL             |
|  8 | root        | localhost | NULL | Query   |          0 | NULL                                                                  | SHOW PROCESSLIST |
+—-+————-+———–+——+———+————+———————————————————————–+——————+

這裡主要是檢測Slave1是否已經應用完從Master讀取過來的在relay log中的操作,如果未應用完不能stop slave,否則資料肯定會有丟失

3、停止slave1的slave程式,並reset稱master:

mysql> STOP SLAVE ;
Query OK, 0 rows affected (0.00 sec)

mysql> RESET MASTER;
Query OK, 0 rows affected, 8 warnings (0.02 sec)

4、將slave 群中的其他slave(slave2)的Master切換成新的master(由原slave1reset成的):

    1) 停slave程式:
      mysql> stop slave;
      Query OK, 0 rows affected (0.00 sec)
    2) 更換master:
      mysql> CHANGE MASTER TO
          ->   MASTER_HOST=’10.0.65.106′,
          ->     MASTER_USER=’repl’,
          ->     MASTER_PASSWORD=’slavepass’
          -> ;
      Query OK, 0 rows affected (0.00 sec)
    3) 開啟slave:
      mysql> start slave;
      Query OK, 0 rows affected (0.00 sec)

5、檢查slave的狀態:

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.65.106
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: oindeve-relay-bin.000002
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000001
             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: 106
              Relay_Log_Space: 408
              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:
1 row in set (0.00 sec)

6、最後變換實際資料監測新的複製是否能成功進行:

    1) 在新的Master建立測試表:

      mysql> create table t3 as select * from test;
      Query OK, 100003 rows affected (0.11 sec)
      Records: 100003  Duplicates: 0  Warnings: 0

      mysql> show tables;
      +—————-+
      | Tables_in_test |
      +—————-+
      | t1             |
      | t2             |
      | t3             |
      | test           |
      +—————-+
      4 rows in set (0.00 sec)

      mysql> select count(*) from t3;
      +———-+
      | count(*) |
      +———-+
      |   100003 |
      +———-+
      1 row in set (0.00 sec)

    2) 在slave2上面看是否已經複製過去:

      mysql> show tables;
      +—————-+
      | Tables_in_test |
      +—————-+
      | t1             |
      | t2             |
      | t3             |
      | test           |
      +—————-+
      4 rows in set (0.00 sec)

      mysql> select count(*) from t3;
      +———-+
      | count(*) |
      +———-+
      |   100003 |
      +———-+
      1 row in set (0.00 sec)
        

7、到此確認複製正常,master切換完成。

    注:整個切換測試過程時間較短,大家從每一步操作後面反饋的執行時間也可以看出,所需要的操作步驟也不太多。但是此測試並不是資料庫整體環境在提供服務的壓力環境下所測試進行的,該過程資料庫整體環境較為空閒,所以目前還不敢確保在壓力環境下也會如此的順利,等後面還會找機會在有應用壓力的情況下再測試。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758322/viewspace-680472/,如需轉載,請註明出處,否則將追究法律責任。

相關文章