PolarDB-X 1.0支持MySQL官方数据导出工具mysqldump。本文将介绍如何使用mysqldump导入导出PolarDB-X 1.0的数据。
注意事项
- 关于mysqldump命令的详细说明,请参见MySQL 官方文档。
- mysqldump适合小数据量(低于1000万)的离线导入导出。如果需要完成更大数据量或者实时的数据迁移任务,请参考阿里云提供的从自建MySQL迁移至 PolarDB-X 。
场景一:从MySQL中导出数据到文本文件
- 从MySQL中导出数据到文本文件。输入如下命令,从MySQL导出表结构和数据(假设导出文件为dump.sql)。
mysqldump -h ip -P port -u user -p password --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
表 1. 参数说明 参数名 说明 是否必选 ip MySQL的IP。 ✔️ port MySQL的端口。 ❌ user MySQL的用户名。 ✔️ password MySQL的密码,注意前面有个 -p,之间没有空格。 ✔️ char-set 指定的编码。 ✔️ --hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响的字段类型包括 BINARY、VARBINARY、BLOB。 ❌ --no-data 不导出数据。 ❌ table 指定导出某个表。默认导出该数据库所有的表。 ❌ - 修改建表语句。
从MySQL导出的数据文件包含每个表的建表语句。如果直接在PolarDB-X 1.0上执行这些建表语句,会在PolarDB-X 1.0上建立一个单表。如果要对某个表进行分库分表,那么需要手动对建表语句进行修改,PolarDB-X 1.0建表语句的语法请参考CREATE TABLE。
- 导入数据文件到PolarDB-X 1.0。您可以通过如下两种方式的任意一种导入数据文件到PolarDB-X 1.0。
- 通过
mysql -h ip -P port -u user --default-character-set=char-set
命令登录目标PolarDB-X 1.0,执行source /yourpath/dump.sql
命令将数据导入到目标PolarDB-X 1.0。说明 该方式会把所有的步骤回显到屏幕上,速度略慢,但是可以观察导入过程。 - 直接通过
mysql -h ip -P port -u user --default-character-set=char-set< /yourpath/dump.sql
命令将数据导入到目标PolarDB-X 1.0。
说明- 上述两个命令中
default-character-set
要设置成实际的数据编码。如果是Windows平台,SOURCE命令指定的文件路径需要对分隔符转义。 - 导入的时候,由于某些PolarDB-X 1.0和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
)。此类错误信息并不影响导入数据的正确性。
- 通过
场景二:从一个PolarDB-X 1.0导入到另一个PolarDB-X 1.0
假设您之前有一个测试环境的PolarDB-X 1.0,测试完毕以后,需要把测试过程中的一些表结构和数据导入到生产环境的PolarDB-X 1.0中,那么可以按照如下步骤进行操作。
- 从源PolarDB-X 1.0中导出数据到文本文件。
- 导入数据文件到PolarDB-X 1.0。请参考场景一第3步。
- 手动创建Sequence对象。mysqldump并不会导出PolarDB-X 1.0中的Sequence对象,所以如果在源PolarDB-X 1.0中使用了Sequence对象,并且需要在目标PolarDB-X 1.0中继续使用相同的Sequence对象,则需要手动在目标PolarDB-X 1.0中创建同名的Sequence的对象。具体步骤如下:
- 在源PolarDB-X 1.0上执行
SHOW SEQUENCES
,获取当前PolarDB-X 1.0中的Sequence对象的状态。 - 在目标PolarDB-X 1.0数据库上通过
CREATE SEQUENCE
命令创建新的Sequence对象。
- 在源PolarDB-X 1.0上执行
场景三:从PolarDB-X 1.0导出数据到MySQL
从PolarDB-X 1.0导出数据到MySQL,和在PolarDB-X 1.0之间相互导入数据的过程类似,也分为以下几个步骤。
- 从源PolarDB-X 1.0中导出表结构和数据。
mysqldump -h ip -P port -u user -p password --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
说明 请将PolarDB-X 1.0的相关参数代入命令中执行。 - 手动修改拆分表的DDL语句。PolarDB-X 1.0中拆分表的建表语句和MySQL并不兼容。为了后续导入到MySQL中,需手动修改导出的SQL文件,删除以下关键字:
- DBPARTITION BY hash(partition_key):
- TBPARTITION BY hash(partition_key):
- TBPARTITIONS N
- BROADCAST
例如一个拆分表语句导出如下:CREATE TABLE multi_db_single_tbl (id int, name varchar(30), primary key(id)) dbpartition by hash(id);
需修改成以下语句:CREATE TABLE multi_db_single_tbl (id int, name varchar(30), primary key(id));
- 导入修改以后的文件。请参见场景一第3步。