
# 如何处理迁移实例和数据库网络连接异常
数据迁移前请确保完成网络准备和安全规则设置。如果连接异常，请按照本节方法排查网络配置是否正确。
本节将以MySQL到RDS for MySQL的迁移为示例，从三种迁移场景（跨云数据库实时迁移、本地数据库实时迁移、ECS自建数据库实时迁移）进行说明。
#### 跨云数据库实时迁移
1. **网络准备。**
   源数据库需要开放公网访问。
   - **源数据库的网络设置：**
     源数据库MySQL实例需要开放外网域名的访问。
     以阿里云云数据库RDS MySQL迁移到本云云数据库 RDS for MySQL为例，一般情况下，阿里云RDS MySQL不提供外网地址，需要通过申请外网地址来允许外部的应用对接，具体的操作及注意事项可以参考源数据库所在云提供的相关指导。
     
   
   - **目标数据库的网络设置：**
     目标数据库默认与DRS迁移实例处在同一个VPC内，网络是互通的，不需要进行任何设置。
     
     
2. **安全规则准备。**
   - **源数据库的安全规则设置：**
     源数据库MySQL实例需要将DRS迁移实例的弹性公网IP添加到其网络白名单中，确保源数据库MySQL实例可以与上述弹性公网IP连通。
     以上讲述的是精细配置白名单的方法，还有一种简单设置白名单的方法，**在安全允许的情况下**，可以将源数据库MySQL实例的网络白名单设置为0.0.0.0/0，代表允许任何IP地址访问该实例。
     上述的网络白名单是为了进行数据迁移设置的，迁移结束后可以删除。
     
   
   - **目标数据库安全规则设置：**
     - 目标数据库默认与DRS迁移实例处在同一个VPC，网络是互通的，DRS可以直接写入数据到目标数据库。
     
     - 设置目标数据库所在VPC的安全组，确保DRS实例IP的出方向到本地数据数据库的IP、监听端口放通。具体设置如下图所示：
       图1出口规则   
       ![](https://support.huaweicloud.com/drs_faq/figure/zh-cn_image_0000001866546513.png "点击放大") 
      
    
 
#### 本地数据库实时迁移
1. **网络准备：**
   - **源数据库的网络设置：**
     本地MySQL数据库迁移至本云云数据库 RDS for MySQL的场景，一般可以使用VPN网络和公网网络两种方式进行迁移，您可以根据实际情况为本地MySQL数据库开放公网访问或建立VPN访问。一般推荐使用公网网络进行迁移，该方式下的数据迁移过程较为方便和经济。
     
   
   - **目标数据库的网络设置：**
     - 若通过VPN访问，请先开通VPN服务，确保源数据库MySQL和目标端本云云数据库 RDS for MySQL的网络互通。
     
     - 若通过公网网络访问，本云云数据库 RDS for MySQL实例不需要进行任何设置。
      
    
2. **安全规则准备：**
   1. **源数据库的安全规则设置：**
      - 若通过公网网络进行迁移，源数据库MySQL需要将DRS迁移实例的弹性公网IP添加到其网络白名单内，使源数据库与本云的网络互通。在设置网络白名单之前，需要获取DRS迁移实例的弹性公网IP，具体方法如下： DRS迁移实例创建成功后，可在"源库及目标库"页面获取DRS迁移实例的弹性公网IP。
        
      
      - 若通过VPN网络进行迁移，源数据库MySQL需要将DRS迁移实例的私有IP添加到其网络白名单内，使源数据库与本云的网络互通。DRS迁移实例创建成功后，可在"源库及目标库"页面获取DRS迁移实例的私有IP。
      
      
      以上白名单是为了进行迁移针对性设置的，迁移结束后可以删除。
      
   
   2. **目标数据库安全规则设置：**
      - 目标数据库默认与DRS迁移实例处在同一个VPC，网络是互通的，DRS可以直接写入数据到目标数据库。
      
      - 设置目标数据库所在VPC的安全组，确保DRS实例IP的出方向到本地数据数据库的IP、监听端口放通。具体设置如下图所示：
        图2出口规则   
        ![](https://support.huaweicloud.com/drs_faq/figure/zh-cn_image_0000001866546513.png "点击放大") 
       
    
 
#### ECS自建数据库实时迁移
1. **网络准备：**
   - 源数据库所在的region要和目标端本云云数据库 RDS for MySQL实例所在的region保持一致。
   
   - 源数据库可以与目标端本云云数据库 RDS for MySQL实例在同一个VPC，也可以不在同一个VPC。
     - 当源库和目标库处于同一个VPC时，网络默认是互通的。
     
     - 当不在同一个VPC的时候，要求源数据库实例和目标端本云云数据库 RDS for MySQL实例所处的子网处于不同网段，此时需要通过建立对等连接实现网络互通。具体建立VPC对等连接的方法，可参考[《虚拟私有云用户指南》](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0046655036.html)。
      
    
2. **安全规则准备：**
   - 同一VPC场景下，默认网络是连通的，不需要单独设置安全组。
   
   - 不同VPC场景下，通过建立对等连接就可以实现网络互通，不需要单独设置安全组。
    
 
#### 排查iptables设置
以源数据库为本云ECS自建数据库为例，如果在上述的操作后，仍无法连通，此时需要额外排查iptables设置，因为HOSTGUARD服务在DRS发起频繁连接请求失败时，会将请求IP加入黑名单中。
1. 登录弹性云服务器。
2. 执行以下命令，排查是否有DENY相关的项目包含DRS实例的IP，一般项目名称为IN_HIDS_MYSQLD_DENY_DROP 。 **iptables --list**
   
3. 如果存在，执行以下命令，查询iptables入方向规则列表，获取具体规则编号（line-numbers）。 **iptables -L INPUT --line-numbers**
   
4. 执行以下命令，删除DRS实例的IP相关的入方向规则（注意：必须从后往前删，不然line-numbers会更新，需要重新查询）。 **iptables -D** *规则项目名* *具体规则编号*
   
5. 删除相关iptables规则后重新进行测试连接即可。
 
#### 相关文档
更多关于DRS源数据库部署在不同位置的网络设置说明，可参考[这里](https://support.huaweicloud.com/prepare-drs/drs_02_0471.html)。
