
# 使用CDM迁移MySQL数据至DWS集群
本入门提供通过云数据迁移服务CDM将MySQL数据批量迁移到DWS集群的指导。
本入门的基本内容如下所示：
1. [迁移前数据检查]
2. [创建DWS集群]
3. [创建CDM集群]
4. [创建连接]
5. [新建作业和迁移]
6. [迁移后数据一致性验证]
#### 场景描述
图1迁移场景   
![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000001973709258.png "点击放大")
主要包括云上和云下的MySQL数据迁移，支持整库迁移或者单表迁移，本文以云下MySQL的整库迁移为例。
- 云下MySQL数据迁移： CDM通过公网IP访问MySQL数据库，CDM与DWS在同一个VPC下，CDM分别与MySQL和DWS建立JDBC连接。
  
- 云上RDS-MySQL数据迁移： RDS、CDM和DWS均在同一个VPC下，CDM分别与MySQL和DWS建立JDBC连接。如果云上RDS与DWS不在一个VPC，则CDM通过弹性公网IP访问RDS。
  
 
 #### 迁移前数据检查
1. 连接MySQL实例，查看MySQL数据库情况。 
   **mysql -h** *\<host\>* **-P** *\<port\>* ***-u*** *\<userName\>* ***-p--ssl-ca=*** *\<caDIR\>*
   表1参数说明 
   | 参数             | 说明                      |
   |:---|:---|
   | \<*host*\>     | MySQL数据库连接地址。           |
   | *\<port\>*     | 数据库端口，默认3306。           |
   | \<*userName*\> | MySQL管理员账号，默认为root。     |
   | \<*caDIR*\>    | CA证书路径，该文件需放在执行该命令的路径下。 |
      
   出现如下提示时，输入数据库账号对应的密码：
   ```
   Enter password:
   ```
   
   
2. 分析需要迁移的数据库名及编码、待迁移的表名、表属性。 
   例如，查询出待迁移的MySQL目标库为test01、test02以及数据库编码。其中test01库里包括 orders、persons、persons_b三张表和一张视图persons_beijing，test02库里包括一张表persons_c。
   1. 查询数据库名。
      ```
      show databases;
      ```
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002010073061.png "点击放大")
      
   
   2. 查询数据库编码。
      ```
      use <databasename>; 
      status;
      ```
      图2查询数据库编码1   
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000001973559978.png "点击放大")
      图3查询数据库编码2   
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000001973719742.png "点击放大") 
   
   3. 查询库表。
      ```
      use <databasename>; 
      show full tables;
      ```
      ![](https://support.huaweicloud.com/bestpractice-dws/public_sys-resources/notice_3.0-zh-cn.png)
      - 由于DWS数据库对表名大小写不敏感，如果原MySQL数据库中存在大小写混用的表名或者纯大写的表名，例如Table01、TABLE01，需要先修改表名为纯小写后才支持迁移，否则会导致迁移后，DWS无法识别该表。
      
      - 建议将MySQL也设置成大小写不敏感模式，修改方法：修改/etc/my.cnf参数lower_case_table_names=1，并重启MySQL服务。
       
      图4查询库表   
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000001973721870.png "点击放大")
      图5查询库表   
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002010201921.png "点击放大") 
   
   4. 查看各个表的属性，以备迁移后对比。
      ```
      use <databasename>; 
      desc <table name>;
      ```
      图6查看表属性   
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002010201941.png "点击放大") 
   
   
   
   
 
 #### 创建DWS集群
1. 参见[创建集群](https://support.huaweicloud.com/mgtg-dws/dws_01_0019.html)进行创建，区域可选择"华北-北京四"。
   
   ![](https://support.huaweicloud.com/bestpractice-dws/public_sys-resources/note_3.0-zh-cn.png)
   确保DWS集群与CDM集群在同一区域，同一个VPC下。
   
   
2. 参见[使用gsql客户端连接集群](https://support.huaweicloud.com/mgtg-dws/dws_01_0037.html)连接到集群。
3. 创建[迁移前数据检查]的目标数据库test01和test02，确保与原MySQL的数据库同名，数据库编码一致。
   
   ```
   create database test01 with encoding 'UTF-8' dbcompatibility 'mysql' template template0; 
   create database test02 with encoding 'UTF-8' dbcompatibility 'mysql' template template0;
   ```
   
   
 
 #### 创建CDM集群
1. 登录[CDM管理控制台](https://console.huaweicloud.com/cdm#/cdm/clusterList)。
2. 单击"购买云数据迁移服务"，按以下参数填写。 
   表2CDM集群参数 
   | 参数名   | 取值                           |
   |:---|:---|
   | 当前区域  | 华北-北京四（与DWS选择在同一区域）          |
   | 可用区   | 可用区1（如果资源售罄则选其他可用区）          |
   | 名称    | CDM-demo                     |
   | 实例类型  | cdm.large（如售罄请选择其他规格）        |
   | 虚拟私有云 | demo-vpc（与DWS选择在同一个VPC）      |
   | 子网    | subnet-f377(10.1.0.0/24)（示例） |
   | 安全组   | -                            |
   | 企业项目  | default                      |
      
   
   
3. 单击"立即购买"，核对参数无误，单击"提交"。
4. 回到CDM管理控制台的"集群管理"页面，等待约5分钟，集群创建成功后，单击集群操作列的"绑定弹性IP"。
5. 勾选可用的弹性IP，单击"确认"。如果没有弹性IP，需要跳转到弹性IP界面，购买弹性IP。
 
 #### 创建连接
1. 初次创建MySQL连接，需要上传驱动。 
   1. 访问[MySQL驱动](https://downloads.mysql.com/archives/c-j/)，选择"5.1.48"版本下载。
      图7下载驱动   
      ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002010089169.png "点击放大") 
   
   2. 下载到本地，解压后，获取mysql-connector-java-*xxx*.jar。
   
   3. 回到CDM管理控制台的"集群管理"页面，单击集群操作列的"作业管理"，选择"连接管理 \> 驱动管理"。
   
   4. 单击"MySQL"右侧的"上传"，选择mysql-connector-java-*xxx*.jar，单击"上传文件"。
   
   
   
   
2. 创建MySQL连接。 
   1. 在CDM管理控制台的"集群管理"页面，单击集群操作列的"作业管理"，选择"连接管理 \> 新建连接"。
   
   2. 连接器类型勾选"MySQL"，单击"下一步"。（如果是云上RDS，则勾选"云数据库 MySQL"。）
   
   3. 按[表3]填写连接信息，填写后单击"测试"，测试成功后，单击"保存"。
      ![](https://support.huaweicloud.com/bestpractice-dws/public_sys-resources/note_3.0-zh-cn.png)
      如测试不通过，请确认CDM是否以公网IP方式连接MySQL数据库，如果是公网IP方式，请参见[4]绑定公网IP。
       表3MySQL连接信息 
      | 参数项     | 取值                                                      |
      |:---|:---|
      | 名称      | MySQL                                                   |
      | 数据库服务器  | 192.168.1.100（示例，请填写云下MySQL实际的公网IP，要确保MySQL服务器已放开白名单访问） |
      | 端口      | 3306                                                    |
      | 数据库名称   | test01                                                  |
      | 用户名     | root                                                    |
      | 密码      | root用户密码                                                |
      | 使用本地API | 否                                                       |
      | 使用Agent | 否                                                       |
         
      
   
   
   
   
3. 创建DWS连接。 
   1. 在CDM管理控制台的"集群管理"页面，单击集群操作列的"作业管理"，选择"连接管理 \> 新建连接"。
   
   2. 连接器类型勾选"数据仓库服务 (DWS)"，单击"下一步"。
   
   3. 按[表4]填写连接信息，填写后单击"测试"，测试成功后，单击"保存"。
       表4DWS连接信息 
      | 参数项     | 取值                                                                                                                                                                               |
      |:---|:---|
      | 名称      | DWS-test01                                                                                                                                                                       |
      | 数据库服务器  | 单击"选择"，从集群列表中选择要连接的DWS集群。 说明： 系统会自动刷出同一个区域、同一个VPC下的DWS集群，如果没有，则需要手动填写网络已连通的DWS的访问IP。 |
      | 端口      | 8000                                                                                                                                                                             |
      | 数据库名称   | test01（参见[3]确保DWS已手动创建了对应的数据库）                                                                                                   |
      | 用户名     | dbadmin                                                                                                                                                                          |
      | 密码      | dbadmin用户密码                                                                                                                                                                      |
      | 使用Agent | 否                                                                                                                                                                                |
         
      
   
   4. 重复[3.a]\~[3.c]，创建DWS-test02连接。
   
   
   
   
 #### 新建作业和迁移
1. 在CDM管理控制台的"集群管理"页面，单击集群操作列的"作业管理"，选择"整库迁移 \> 新建作业"。
2. 填写如下参数后，单击"下一步"。 
   - 作业名称：MySQL-DWS-test01
   
   - 源端作业配置：
     - 源连接名称：MySQL
      
   
   - 目的端作业配置：
     - 目的连接名称：DWS-test01
     
     - 自动创表：不存在时创建
     
     - 是否压缩：是
     
     - 存储模式：列模式
     
     - 其他选项：保持默认
      
   
   
   图8作业配置   
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002010092821.png "点击放大")
   
   
3. 勾选所有表，单击![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000001973575112.png "点击放大")，单击"下一步"
4. 参数保持默认即可，单击"保存并运行"。
5. 查看作业运行情况，状态为"Succeeded"，表示迁移成功。
   
   图9查看作业运行情况   
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002010215089.png "点击放大")
   
   
6. 重复执行[1]\~[5]，迁移数据库test02的所有表。
   
   ![](https://support.huaweicloud.com/bestpractice-dws/public_sys-resources/notice_3.0-zh-cn.png)
   在新建作业时，目标源的DWS库，需选择对应到test02。
   
   
 
 #### 迁移后数据一致性验证
1. 使用gsql连接DWS的test01集群。 
   gsql -d *test01* -h *数据库主机IP* -p 8000 -U dbadmin -W *数据库用户密码* -r;
   
   
2. 查询test01库的表。
   
   ```
   SELECT * FROM  pg_tables WHERE schemaname= 'public';
   ```
   图10查询test01库的表   
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002010095761.png "点击放大")
   
   
3. 查询每个表的数据是否齐全，字段是否完整。 
   ```
   SELECT COUNT(*) FROM table name; 
   \d+ table name;
   ```
   图11查询表字段   
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000001973735304.png "点击放大")
   图12查询表数据   
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000001973575588.png "点击放大")
   
   
4. 抽样检查，验证表数据是否正确。
   
   ```
   SELECT * FROM persons WHERE city = ‘Beijing' ORDER BY id_p;
   ```
   图13验证表数据   
   ![](https://support.huaweicloud.com/bestpractice-dws/figure/zh-cn_image_0000002010095801.png "点击放大")
   
   
5. 重复执行[2]\~[4]查看其它库和表数据是否正确。
 
