本文介绍如何使用mysqldump工具将自建MySQL数据库迁移至PolarDB MySQL引擎

前提条件

目标 PolarDB MySQL引擎集群需已完成如下操作:

迁移方式对比

您可以通过mysqldump或DTS工具将自建MySQL数据库迁移至PolarDB MySQL引擎,下表对比了两种迁移方式的差异供您参考。

对比项 mysqldump DTS
自建MySQL数据库版本 无限制 自建MySQL数据库版本为5.1、5.5、5.6、5.7或8.0版本。
是否支持结构迁移和全量数据迁移 支持 支持
是否支持增量数据迁移 不支持 支持
是否支持不停机迁移 不支持 支持
说明 使用DTS工具进行数据迁移的操作步骤,请参见 从自建MySQL迁移至PolarDB MySQL

注意事项

迁移后的表名不区分大小写,统一变为小写。

操作步骤

说明 本文以自建MySQL 8.0版本为例,在Linux系统上演示相关操作步骤。
  1. 使用mysqldump导出自建数据库的数据、存储过程、触发器和函数。
    说明 导出期间请勿进行数据更新,耐心等待导出完成。
    1. 在Linux命令行下导出自建数据库的数据,命令如下:
      说明 针对自建数据库的连接地址:
      • 若自建MySQL数据库部署在ECS实例上,请填入127.0.0.1
      • 若自建MySQL数据库部署在本地,请填入该数据库的公网连接地址。
      mysqldump -h <自建数据库的连接地址>  -u root -p --opt --default-character-set=utf8 --hex-blob <自建数据库名> --skip-triggers --skip-lock-tables > /tmp/<自建数据库名>.sql

      示例

      mysqldump -h 127.0.0.1 -u root -p --opt --default-character-set=utf8 --hex-blob testdb --skip-triggers --skip-lock-tables > /tmp/testdb.sql
    2. (可选)在Linux命令行下导出存储过程、触发器和函数,命令如下:
      说明 若数据库中没有使用存储过程、触发器和函数,可跳过该步骤。
      mysqldump -h 127.0.0.1 -u root -p --opt --default-character-set=utf8 --hex-blob <自建数据库名> -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/<自建数据库名>Trigger.sql

      示例

      mysqldump -h 127.0.0.1 -u root -p --opt --default-character-set=utf8 --hex-blob testdb -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/testdbTrigger.sql
  2. 将导出的文件导入到目标PolarDB集群中,命令如下:
    mysql -h <PolarDB集群连接地址> -P <PolarDB集群端口> -u <PolarDB集群账号> -p <PolarDB数据库名称> < /tmp/<自建数据库名>.sql
    mysql -h <PolarDB集群连接地址> -P <PolarDB集群端口> -u <PolarDB集群账号> -p <PolarDB数据库名称> < /tmp/<自建数据库名>Trigger.sql

    示例

    mysql -h polardbtest.mysql.polardb.rds.aliyuncs.com -P 3306 -u testuser -p testdb  < /tmp/testdb.sql
    mysql -h polardbtest.mysql.polardb.rds.aliyuncs.com -P 3306 -u testuser -p testdb  < /tmp/testdbTrigger.sql
    说明
    • PolarDB数据库名称需要是PolarDB集群上已创建的数据库。创建数据库操作,请参见创建数据库
    • PolarDB集群账号需要是高权限账号或具有读写权限的账号。
  3. 导入成功后,您可以登录PolarDB集群数据库中查看数据是否正常。具体操作,请参见连接数据库集群

常见问题

Q:Access denied; you need (at least one of) the SUPER privilege(s) for this operation报错怎么解决?

A:SQL脚本里面包括SUPER权限的语句,将相关语句删除再执行。