全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
分布式关系型数据库 DRDS

使用 mysqldump 导入导出数据

更新时间:2018-06-21 14:16:29

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-lock-tables --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 步。
本文导读目录