
# 配置业务端与容灾端之间的容灾
为了保证MySQL数据的一致，在业务端与容灾端也需要配置数据同步机制，在业务端的Master和Slave2同时故障时，可以将业务切换到灾备端的Slave1上。同时，当生产数据中心恢复时，能够将业务切回。
#### 步骤一：配置Master到Slave1的容灾
1. 修改Slave1数据库配置文件。 
   1. 打开MySQL的配置文件。 **#vi /etc/my.cnf**
      
   
   2. 修改内容。 按照如下字段对配置文件中\[mysqld\]之下的内容进行增加或修改。
      参数说明请参见[配置业务端内部的容灾](https://support.huaweicloud.com/bestpractice-hcdr/hcdr_02_0106.html)。
      示例如下：
      ```
      [mysqld]
      server-id=0105
      log_bin=slave-bin
      sync_binlog=1
      binlog-do-db=xinhu
      replicate-do-db=xinhu
      binlog_format=mixed
      log_slave_updates=1
      ```
      
   
   
   
   3. 修改完配置后重启数据库服务。 **#systemctl restart mysqld**
      
   
   
   
   

2. 在Master为Slave1创建复制帐户。
   
   在Master数据库中创建一个拥有"REPLICATION SLAVE"权限，能使Slave1数据库远程登录Master并复制数据的帐户，请根据实际需要定义有利于区分的帐户和密码，IP为Slave1数据库的管理IP。
   创建的命令如下，其中"account"和"Password"应更换成实际规划的帐号密码。
   **mysql\> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON \*.\* TO '*account* '@'*192.168.1.5* 'IDENTIFIED BY '*Password*';**
   
   
3. 查看Master状态。
   
   在Master数据库中使用如下命令查看当前Master状态，并记录日志文件名，日志文件位置，以便在配置Slave1数据库的时候使用。
   ```
   mysql> SHOW MASTER STATUS\G
   ************************** 1. row ***************************
   File: master-bin.000001     //当前master日志文件名称
   Position: 154              //当前master日志文件中的位置
   Binlog_Do_DB: xinhu      //所要同步的数据库名
   Binlog_Ignore_DB:        //不同步的数据库名
   Executed_Gtid_Set:
   ```
   
   
4. 在Slave1同步Master的数据。 
   参数说明如下：
   ![](https://support.huaweicloud.com/bestpractice-hcdr/public_sys-resources/note_3.0-zh-cn.png)
   因为是Slave1从Master同步数据，因此本步骤中的master，是指Master。
   - "master_host"是Master的IP。
   
   - "master_user"是[2]中在Master数据库中创建的同步帐户名。
   
   - "master_password"是[2]节中在Master数据库中创建的同步帐户的密码。
   
   - "master_log_file"是[3]中查得的Master日志文件名称。
   
   - "master_log_pos"是[3]中查得的Master日志文件中的位置。
     ```
     mysql> change master to master_host='10.1.1.2', master_user='account', master_password='Password', master_log_file='master-bin.000001', master_log_pos=154;
     ```
     
   
   
   
   
   
5. 在Slave1查看同步状态。 
   1. 在Slave1数据库中，使用如下命令开启slave模式，用来同步Master的数据。 **mysql\> start slave;**
      
   
   2. 在Slave1数据库中使用如下命令查看当前slave的状态信息。
      "Slave_IO_Running"为"Yes"且"Slave_SQL_Running"为"Yes"，则表示同步成功，Master与Slave1的主备关系就配置完成。
      ```
      mysql> show slave status\G
      *************************** 1. row ***************************
      Slave_IO_State: Waiting for master to send event
      Master_Host: 10.1.1.2
      Master_User: account
      Master_Port: 3306
      Connect_Retry: 60
      Master_Log_File: master-bin.000040
      Read_Master_Log_Pos: 154
      Relay_Log_File: mysql-slave1-relay-bin.000092
      Relay_Log_Pos: 369
      Relay_Master_Log_File: master-bin.000040
      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes
      Replicate_Do_DB: xinhu
      ```
      
   
   
   
   
 
#### 步骤二：配置Slave1到Master的容灾
1. 在Slave1为Master创建复制帐户。 
   在Slave1数据库中创建一个拥有"REPLICATION SLAVE"权限，能使Master数据库远程登录Slave1并复制数据的帐户，请根据实际需要定义有利于区分的帐户和密码，IP为Master数据库的管理IP。
   创建的命令如下，其中"account"和"Password"应更换成实际规划的帐号密码。
   **mysql\> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON \*.\* TO '*account* '@'*10.1.1.2* 'IDENTIFIED BY '*Password*';**
   
   
2. 查看Slave1状态。
   
   在Slave1数据库中使用如下命令查看当前Slave1状态，并记录日志文件名，日志文件位置，以便在配置Master数据库的时候使用。
   ```
   mysql> SHOW MASTER STATUS\G 
    ************************** 1. row ***************************  
   File: slave-bin.000001     //当前master日志文件名称 
   Position: 154              //当前master日志文件中的位置 
   Binlog_Do_DB: xinhu      //所要同步的数据库名 
   Binlog_Ignore_DB:        //不同步的数据库名 
   Executed_Gtid_Set:
   ```
   
   
3. 在Master同步Slave1的数据。 
   参数说明如下：
   ![](https://support.huaweicloud.com/bestpractice-hcdr/public_sys-resources/note_3.0-zh-cn.png)
   因为是Master从Slave1同步数据，因此本步骤中的master，是指Slave1。
   - "master_host"是Slave1的IP。
   
   - "master_user"是[2]中在Slave1数据库中创建的同步帐户名。
   
   - "master_password"是[2]中在Slave1数据库中创建的同步帐户的密码。
   
   - "master_log_file"是[2]中查得的Slave1日志文件名称。
   
   - "master_log_pos"是[2]中查得的Slave1日志文件中的位置。
   
   
   ```
   mysql> change master to master_host='192.168.1.5', master_user='account', master_password='Password', master_log_file='slave-bin.000001', master_log_pos=154;
   ```
   
   
4. 在Master查看同步状态。 
   1. 在Master数据库中，使用如下命令开启slave模式，用来同步Slave1的数据。 **mysql\> start slave;**
      
   
   2. 在Master数据库中使用如下命令查看当前slave的状态信息。 "Slave_IO_Running"为"Yes"且"Slave_SQL_Running"为"Yes"，则表示同步成功，Slave1与Master的主备关系就配置完成。
      ```
      mysql> show slave status\G 
      *************************** 1. row *************************** 
      Slave_IO_State: Waiting for master to send event 
      Master_Host: 192.168.1.5 
      Master_User: account
      Master_Port: 3306 
      Connect_Retry: 60 
      Master_Log_File: slave-bin.000001 
      Read_Master_Log_Pos: 154 
      Relay_Log_File: mysql-master-relay-bin.000092 
      Relay_Log_Pos: 369 
      Relay_Master_Log_File: slave-bin.000001 
      Slave_IO_Running: Yes 
      Slave_SQL_Running: Yes 
      Replicate_Do_DB: xinhu
      ```
      
   
   
   
   
 
