全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
分布式关系型数据库 DRDS

使用 mysqldump 导入导出数据

更新时间:2017-08-07 15:19:13

DRDS 支持 MySQL 官方数据导出工具 mysqldump。本文围绕 DRDS 数据导入导出的几种常见场景对操作步骤和注意事项进行说明。mysqldump 命令的详细说明请参考 MySQL 官方文档

说明:mysqldump 适合小数据量(低于1000万)的离线导入导出。如果需要完成更大数据量或者实时的数据迁移任务,请参考阿里云提供的数据传输服务

场景一:从 MySQL 导入到 DRDS

从 MySQL 导入数据到 DRDS,请按照以下步骤进行操作。

1.从 MySQL 中导出数据到文本文件。

输入以下命令,从 MySQL 中导出表结构和数据。假设导出文件为 dump.sql。

  1. mysqldump -h ip -P port -u user -ppassword --default-character-set=char-set --net_buffer_length=10240 --no-create-db --skip-add-locks --skip-tz-utc --set-charset [--hex-blob] [--no-data] database [table1 table2 table3...] > dump.sql

参数说明如下,请根据实际情况输入:

参数名 说明 是否必选
ip DRDS 实例的 IP。 ✔️
port DRDS 实例的端口。
user DRDS 的用户名。 ✔️
password DRDS 的密码,注意前面有个 -p,之间没有空格。 ✔️
char-set 指定的编码。 ✔️
--hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响的字段类型包括 BINARY、VARBINARY、BLOB。
--no-data 不导出数据。
table 指定导出某个表。默认导出该数据库所有的表。

2.修改建表语句。

从 MySQL 导出的数据文件包含每个表的建表语句。如果直接在在 DRDS 上执行这些建表语句,会在 DRDS 上建立一个单表。如果要对某个表进行分库分表,那么需要手工对建表语句进行修改,DRDS 建表语句的语法请参考 DDL 语句

3.导入数据文件到 DRDS。可以通过两种方式导入数据文件到 DRDS。

注意:下面两个命令中 default-character-set 要设置成实际的数据编码。如果是 Windows 平台,source 命令指定的文件路径需要对分隔符转义。

  • 通过 mysql -h ip -P port -u user —default-character-set=char-set 命令登录目标 DRDS,执行 source /yourpath/dump.sql 命令将数据导入到目标 DRDS。
  • 直接通过 mysql -h ip -P port -u user —default-character-set=char-set< /yourpath/dump.sql 命令将数据导入到目标 DRDS。

第一种方式会把所有的步骤回显到屏幕上,速度略慢,但是可以观察导入过程。

注意:导入的时候,由于某些 DRDS 和 MySQL 实现上的不同,可能会报错,错误信息类似:ERROR 1231 (HY000): [a29ef6461c00000][10.117.207.130:3306][**]Variable @saved_cs_client can’t be set to the value of @@character_set_client。此类错误信息并不影响导入数据的正确性。

场景二:从一个 DRDS 导入到另一个 DRDS

假设您之前有一个测试环境的 DRDS,测试完毕以后,需要把测试过程中的一些表结构和数据导入到生产环境中的 DRDS 中,那么可以按照以下步骤进行操作。

  1. 从源 DRDS 中导出数据到文本文件。请参考场景一第 1 步。

  2. 导入数据文件到 DRDS。请参考场景一第 3 步。

  3. 手工创建 Sequence 对象。

    mysqldump 并不会导出 DRDS 中的 Sequence 对象,所以如果在源 DRDS 中使用了 Sequence 对象,并且需要在目标 DRDS 中继续使用相同的 Sequence 对象,则需要手工在目标 DRDS 中创建同名的 Sequence 的对象。具体步骤如下:

    a. 在源 DRDS 上执行 SHOW SEQUENCES,获取当前 DRDS 中的 Sequence 对象的状态。

    b. 在目标 DRDS 数据库上通过 CREATE SEQUENCE 命令创建新的 Sequence 对象。

    Sequence 命令详情请参考全局唯一数字序列

场景三:从 DRDS 导出数据到 MySQL

从 DRDS 导出数据到 MySQL,和在 DRDS 之间相互导入数据的过程类似,也分为以下几个步骤。

  1. 从源 DRDS 中导出表结构和数据。请参考场景一第 1 步。

  2. 手工修改拆分表的 DDL 语句。

    DRDS 中拆分表的建表语句和 MySQL 并不兼容。为了后继导入到 MySQL 中,需手工修改导出的 SQL 文件,删除以下关键字:

    • DBPARTITION BY hash(partition_key):
    • TBPARTITION BY hash(partition_key):
    • TBPARTITIONS N
    • BROADCAST

    例如一个拆分表语句导出如下:

    1. CREATE TABLE multi_db_single_tbl
    2. (id int,
    3. name varchar(30),
    4. primary key(id)) dbpartition by hash(id);

    需修改成以下语句:

    1. CREATE TABLE multi_db_single_tbl
    2. (id int,
    3. name varchar(30),
    4. primary key(id));
  3. 导入修改以后的文件。请参考场景一第 3 步。
本文导读目录