# 通过DRS实现数据库的垂直拆分
#### 方案介绍
当RDS for MySQL实例负载过高时，可以将该实例的一个数据库或表垂直拆分至另外一个单独的实例中。例如：一个RDS for MySQL实例上有数据库**db1** 和**db2** ，随着业务增长，如想要减轻该实例的压力，您可以将数据库**db2**垂直拆分至另外一个单独的实例中。
- 双写方案是一种常见的数据迁移策略，能够确保业务在线迁移，并支持迁移回滚，但可能需要对应用程序进行一定程度的改造，并可能影响性能。
- 双向同步方案是指在迁移过程中建立反向同步链路，确保在向新实例写入数据的同时，数据也能同步回原实例，从而保证业务的可回滚性。由于该操作会导致业务中断，因此建议在业务低峰期执行。
本文将以RDS for MySQL源实例和RDS for MySQL目标实例为例，介绍如何通过双写方案和双向同步方案实现垂直拆分。
#### 前提条件
- 已有RDS for MySQL业务实例作为源实例。
- 已准备RDS for MySQL非业务所在的空实例作为目标实例，且目标实例的数据库账号权限与源实例的数据库账号权限一致。
 
#### 注意事项
由于双向同步方案需要短暂暂停业务，请选择业务低峰期操作以降低对业务的影响。
#### 双写方案
1. 创建迁移任务。
   1. 进入[创建迁移任务页面](https://console.huaweicloud.com/drs/?#/drs/migrate/create/select)。
   
   2. 填选区域、项目、任务名称、描述、迁移实例信息，单击"开始创建"。
      - 源实例：业务所在实例**test1**。
      
      - 目标实例：已准备的空实例**test2**。
      
      - 迁移对象：库级迁移（迁移数据库**test_db**）。
      
      
      详细的数据迁移指导，请参见[创建迁移任务](https://support.huaweicloud.com/realtimemig-drs/drs_02_0002.html)。
      
    
2. 查询迁移进度。
   1. 迁移任务提交后，您可在"实时迁移管理"界面，选中指定迁移任务，单击任务名称，进入"基本信息"页面。
   
   2. 单击"迁移进度"页签，查看迁移进度。
      图1迁移进度   
      ![](https://support.huaweicloud.com/bestpractice-rds-mysql/zh-cn_image_0000002450520365.png "点击放大")
      等待数据迁移任务的进度变更为增量迁移，并显示为无延迟状态或延迟时间低于5秒。
      
    
3. 对比迁移项。 在"迁移对比"信息页面，对源和目标实例的数据库**test_db** 中的数据进行对比分析。更多配置，请参见[数据对比](https://support.huaweicloud.com/realtimemig-drs/drs_02_0007.html)。
   如果数据一致，则[结束数据迁移任务](https://support.huaweicloud.com/realtimemig-drs/drs_03_0004.html)。
   
4. 通过应用程序将业务数据同时写入源和目标实例的数据库**test_db**中。
5. 分别登录源和目标实例，在数据库**test_db** 上执行以下命令查看会话信息，确保有新的会话执行写入操作。
   ```
   SHOW processlist;
   ```
   
6. 等待业务稳定运行一个周期，测试所有业务功能正常后，删除源实例的数据库**test_db**。
 
#### 双向同步方案
1. 创建迁移任务。
   1. 进入[创建迁移任务页面](https://console.huaweicloud.com/drs/?#/drs/migrate/create/select)。
   
   2. 填选区域、项目、任务名称、描述、迁移实例信息，单击"开始创建"。
      - 源实例：业务所在实例**test1**。
      
      - 目标实例：已准备的空白实例**test2**。
      
      - 迁移对象：库级迁移（迁移数据库**test_db**）。
      
      
      详细的数据迁移指导，请参见[创建迁移任务](https://support.huaweicloud.com/realtimemig-drs/drs_02_0002.html)。
      
    
2. 查询迁移进度。
   1. 迁移任务提交后，您可在"实时迁移管理"界面，选中指定迁移任务，单击任务名称，进入"基本信息"页面。
   
   2. 单击"迁移进度"页签，查看迁移进度。
      图2迁移进度   
      ![](https://support.huaweicloud.com/bestpractice-rds-mysql/zh-cn_image_0000002416264182.png "点击放大")
      等待数据迁移任务的进度变更为增量迁移，并显示为无延迟状态或延迟时间低于5秒。
      
    
3. 对比迁移项。 在"迁移对比"信息页面，对源和目标实例的数据库**test_db** 中的数据进行对比分析。更多配置，请参见[数据对比](https://support.huaweicloud.com/realtimemig-drs/drs_02_0007.html)。
   如果数据一致，则[结束数据迁移任务](https://support.huaweicloud.com/realtimemig-drs/drs_03_0004.html)。
   
4. 断开源实例数据库**test_db**与应用程序的连接，即断开业务连接。
5. 登录源实例，在数据库**test_db** 上执行以下命令查看会话信息，确保没有新的会话执行写入操作。
   ```
   SHOW processlist;
   ```
   
6. 创建反向同步任务。 反向同步任务的作用是为业务提供回退方案，业务恢复运行后，一旦出现异常可将业务切换至原有的数据库中。
   1. 在"实时同步管理"页面，单击"创建同步任务"。
   
   2. 在"同步实例"页面，填选区域、项目、任务名称、描述、同步实例信息，单击"开始创建"。
      - 源实例：**test2**
      
      - 目标实例：**test1**
      
      - 同步模式：增量 通过**show master status** 命令获取此时目标实例的位点，将获取到的位点填入实时同步任务的增量同步起始位点中，可以将目标实例数据库**test_db** 后续产生增量数据迁移到源实例数据库**test_db**。
        
      
      
      详细的数据同步指导，请参见[将MySQL同步到MySQL](https://support.huaweicloud.com/realtimesyn-drs/drs_04_0102.html)。
      
    
7. 保持源实例数据库**test_db** 与应用程序的断开状态，将业务切换至目标实例数据库**test_db**恢复业务。
8. 登录目标实例，在数据库**test_db** 上执行以下命令查看会话信息，确保有新的会话执行写入操作。
   ```
   SHOW processlist;
   ```
   
9. 等待业务稳定运行一个周期，测试所有业务功能正常后，删除源实例的数据库**test_db**并结束反向数据同步任务。
 
