
# 使用mysqldump将数据迁移至TaurusDB
本章节主要介绍使用mysqldump工具将数据迁移至TaurusDB的步骤。
#### 使用须知
- 数据库迁移为离线迁移，您需要停止使用源数据库的应用程序。
- mysqldump导出工具需要与数据库引擎版本匹配。
 
#### 操作步骤
#### 迁移前准备
1. 准备弹性云服务器或可通过公网访问TaurusDB的设备。
   - 通过弹性云服务器连接TaurusDB数据库实例，需要创建一台弹性云服务器。 创建并登录弹性云服务器，详细内容请参见[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)和[登录弹性云服务器](https://support.huaweicloud.com/ecs_faq/ecs_faq_0632.html)。
     
   
   - 通过公网访问TaurusDB数据库实例，需具备以下条件。
     1. 先对TaurusDB数据库实例绑定公网地址，如何绑定公网地址，请参见[绑定弹性公网IP](https://support.huaweicloud.com/usermanual-taurusdb/taurusdb_03_4013.html#ZH-CN_TOPIC_0000001882727544__zh-cn_topic_0171122739_section163851913174310)。
     
     2. 保证本地设备可以访问TaurusDB数据库实例绑定的公网地址。
      
    
2. 在准备的弹性云服务器或可访问TaurusDB的设备上，安装MySQL客户端。
   - 如果弹性云服务器或可访问TaurusDB的设备上未安装MySQL客户端，请参考[如何安装MySQL客户端](https://support.huaweicloud.com/taurusdb_faq/taurusdb_faq_0011.html)进行安装。
   
   - 该弹性云服务器或可访问TaurusDB数据库的设备需要安装和TaurusDB数据库服务端相同版本或更高版本的数据库客户端，MySQL数据库或客户端会自带mysqldump和mysql工具。
    
 
#### 导出数据
要将源数据库迁移到TaurusDB数据库，需要先将源数据库的数据进行导出。
1. 登录已准备的弹性云服务器，或可访问TaurusDB数据库的设备。
2. 使用mysqldump将元数据导出至SQL文件。
   
   ![](https://support.huaweicloud.com/usermanual-taurusdb/public_sys-resources/warning_3.0-zh-cn.png)
   MySQL数据库是TaurusDB数据库服务管理所必需的数据库，导出元数据时，禁止指定**--all-database** **s**参数，否则会造成数据库故障。
   ```
   mysqldump --databases DB_NAME --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u DB_USER -p -h DB_ADDRESS -P DB_PORT |sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' > BACKUP_FILE
   ```
   - *DB_NAME*：为要迁移的数据库名称。
   
   - *DB_USER*：为数据库用户。
   
   - *DB_ADDRESS*：为数据库地址。
   
   - *DB_PORT*：为数据库端口。
   
   - *BACKUP_FILE* ：为导出生成的文件名称*。*
   
   
   根据命令提示输入数据库密码。
   示例如下：
   ```
   mysqldump --databases gaussdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u root -p -h 192.*.*.* -P 3306 |sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' -e 's/DEFINER[ ]*=.*FUNCTION/FUNCTION/' -e 's/DEFINER[ ]*=.*PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ]*=.*TRIGGER/TRIGGER/' -e 's/DEFINER[ ]*=.*EVENT/EVENT/' > dump-defs.sql
   ```
   ```
   Enter password:
   ```
   命令执行完会生成"dump-defs.sql"文件。
   
   
3. 使用mysqldump将数据导出至SQL文件。 
   ```
   mysqldump --databases DB_NAME --single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers -u DB_USER -p -h DB_ADDRESS -P DB_PORT -r BACKUP_FILE
   ```
   以上命令的参数说明如[2]所示。
   根据命令提示输入数据库密码。
   示例如下：
   ```
   mysqldump --databases gaussdb --single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers -u root -p -h 192.*.*.* -P 3306 -r dump-data.sql
   ```
   命令执行完会生成"dump-data.sql"文件。
   
   
 
#### 导入数据
通过弹性云服务器或可访问TaurusDB数据库的设备，用相应客户端连接TaurusDB数据库实例，将导出的SQL文件导入到TaurusDB数据库。
如果源数据库中包含触发器、存储过程、函数或事件调用，则需确保导入前设置目标数据库参数log_bin_trust_function_creators=ON。
1. 导入元数据到TaurusDB数据库。 
   ```
   mysql -f -h DB_ADDRESS -P DB_PORT -u root -p < BACKUP_DIR/dump-defs.sql
   ```
   - *DB_ADDRESS*：为TaurusDB数据库实例的IP地址。
   
   - *DB_PORT*：为当前数据库实例的端口。
   
   - *BACKUP_DIR*：为"dump-defs.sql"所在目录。
   
   
   示例如下：
   ```
   mysql -f -h 172.*.*.* -P 3306 -u root -p < dump-defs.sql
   ```
   ```
   Enter password:
   ```
   
   
2. 导入数据到TaurusDB数据库。 
   ```
   mysql -f -h DB_ADDRESS -P DB_PORT -u root -p < BACKUP_DIR/dump-data.sql
   ```
   - *DB_ADDRESS*：为TaurusDB数据库实例的IP地址。
   
   - *DB_PORT*：为当前数据库实例的端口。
   
   - *BACKUP_DIR*：为"dump-data.sql"所在目录。
   
   
   示例如下：
   ```
   mysql -f -h 172.*.*.* -P 3306 -u root -p < dump-data.sql
   ```
   ```
   Enter password:
   ```
   
   
3. 使用MySQL工具连接TaurusDB数据库实例，查看迁移结果。 
   ```
   show databases;
   ```
   示例中，名为my_db的数据库已经被导入了：
   ```
   +--------------------+
   | Database           |
   +--------------------+
   | information_schema |
   | my_db              |
   | mysql              |
   | performance_schema |
   +--------------------+
   4 rows in set (0.00 sec)
   ```
   
   
 
