将数据从外部 MySQL 数据库导入到 Amazon RDS for MySQL 数据库实例 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将数据从外部 MySQL 数据库导入到 Amazon RDS for MySQL 数据库实例

您可以将数据从现有 MariaDB 或 MySQL 数据库导入到 RDS for MariaDB 或 RDS for MySQL 数据库实例。为此,请使用 mysqldump 复制数据库,然后通过管道将其直接传输到 RDS for MariaDB 或 RDS for MySQL 数据库实例。mysqldump 命令行实用程序通常用于创建备份以及将数据从一个 MariaDB 或 MySQL 服务器传输到另一个 MariaDB 或 MySQL 服务器。该实用程序包含在 MySQL 和 MariaDB 客户端软件中。

在 MariaDB 10.5 中,客户端被称为 mariadb-dump。从 MariaDB 11.0.1 开始,您必须使用 mariadb-dump 而不是 mysqldump

注意

如果您使用 MySQL 数据库实例导入或导出大量数据,则可以使用 xtrabackup 备份文件和 Amazon S3 更可靠、更块地将数据移入和移出 Amazon RDS。有关更多信息,请参阅 将备份还原到 Amazon RDS for MySQL 数据库实例

Amazon RDS 不支持 MariaDB 的 xtrabackupmariabackup。Amazon RDS 仅支持从 Amazon S3 为 MySQL 导入。

将数据从外部数据库移动到 Amazon RDS 数据库实例的典型 mysqldump 命令类似以下示例。将值替换为您自己的信息。对于 MariaDB 11.0.1 及更高版本,请将 mysqldump 替换为 mariadb-dump,并将 mysql 替换为 mariadb

mysqldump -u local_user \ --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ --routines=0 \ --triggers=0 \ --events=0 \ -plocal_password | mysql -u RDS_user \ --port=port_number \ --host=host_name \ -pRDS_password
重要

确保 -p 选项和输入的密码之间不留空格。

作为安全最佳实践,请指定此示例中显示的提示以外的凭证。

确保您了解以下建议和注意事项:

  • 从转储文件中排除以下架构:

    • sys

    • performance_schema

    • information_schema

    默认情况下,mysqldumpmariadb-dump 实用程序排除这些架构。

  • 如果您需要迁移用户和权限,请考虑使用生成数据控制语言 (DCL) 的工具 (如 pt-show-grants 实用程序) 来重新创建用户和权限。

  • 要执行导入,请确保执行此操作的用户有权访问数据库实例。有关更多信息,请参阅 使用安全组控制访问权限

所用参数如下所示:

  • -u local_user – 用于指定用户名。在第一次使用该参数时,请指定您使用 --databases 参数确定的本地 MariaDB 或 MySQL 数据库中的用户账户名称。

  • --databases database_name – 用于指定本地 MariaDB 或 MySQL 实例上您要导入 Amazon RDS 的数据库的名称。

  • --single-transaction – 用于确保从本地数据库加载的所有数据都与单一时间点保持一致。如果在 mysqldump 读取数据期间有其他进程更改数据,使用该参数有助于保持数据完整性。

  • --compress – 用于降低网络带宽消耗,方式为将数据从本地数据库发送到 Amazon RDS 之前压缩数据。

  • --order-by-primary – 用于减少加载时间,方式为根据主键对每个表中的数据进行排序。

  • --routines:如果您要复制的数据库中存在诸如存储过程或函数之类的例程,则使用此参数。将此参数设置为 0,这将在导入过程中排除例程。稍后在 Amazon RDS 数据库中手动重新创建例程。

  • --triggers:如果要复制的数据库中存在触发器,则使用此参数。将此参数设置为 0,这将在导入过程中排除触发器。稍后在 Amazon RDS 数据库中手动重新创建触发器。

  • --events:如果要复制的数据库中存在事件,则使用此参数。将此参数设置为 0,这将在导入过程中排除事件。稍后在 Amazon RDS 数据库中手动重新创建事件。

  • -plocal_password – 用于指定密码。在第一次使用该参数时,请为您使用第一个 -u 参数标识的用户账户指定密码。

  • -u RDS_user – 用于指定用户名。在第二次使用该参数时,请为您使用 --host 参数标识的 MariaDB 或 MySQL 数据库实例指定默认数据库上的用户账户的名称。

  • --port port_number – 用于为您的 MariaDB 或 MySQL 数据库实例指定端口。默认情况下该值为 3306,除非您在创建数据库实例时更改了该值。

  • --host host_name – 用于从 Amazon RDS 数据库实例端点指定域名系统 (DNS) 名称,例如,myinstance.123456789012.us-east-1.rds.amazonaws.com。您可以在 Amazon RDS 控制台上的数据库实例详细信息中找到端点值。

  • -pRDS_password – 用于指定密码。在第二次使用该参数时,您为第二个 -u 参数确定的用户账户指定密码。

确保在 Amazon RDS 数据库中手动创建任何存储过程、触发器、函数或事件。如果您所复制的数据库中有上述任一对象,则在运行 mysqldumpmariadb-dump 时会排除这些对象。为此,使用 mysqldumpmariadb-dump 命令时请包含以下参数:

  • --routines=0

  • --triggers=0

  • --events=0

示例

以下示例将本地主机上的 world 示例数据库复制到 RDS for MySQL 数据库实例中。将值替换为您自己的信息。要将示例数据库复制到 RDS for MariaDB 数据库实例,请将 mysqldump 替换为 mariadb-dump,并将 mysql 替换为 mariadb

对于 Linux、macOS 或 Unix:

sudo mysqldump -u local_user \ --databases world \ --single-transaction \ --compress \ --order-by-primary \ --routines=0 \ --triggers=0 \ --events=0 \ -plocal_password | mysql -u rds_user \ --port=3306 \ --host=my_instance.123456789012.us-east-1.rds.amazonaws.com \ -pRDS_password

对于 Windows:

在已通过右键单击 Windows 程序菜单上的命令提示符并选择以管理员身份运行打开的命令提示符中,运行以下命令:将值替换为您自己的信息。要将示例数据库复制到 RDS for MariaDB 数据库实例,请将 mysqldump 替换为 mariadb-dump,并将 mysql 替换为 mariadb

mysqldump -u local_user ^ --databases world ^ --single-transaction ^ --compress ^ --order-by-primary ^ --routines=0 ^ --triggers=0 ^ --events=0 ^ -plocal_password | mysql -u RDS_user ^ --port=3306 ^ --host=my_instance.123456789012.us-east-1.rds.amazonaws.com ^ -pRDS_password
注意

作为安全最佳实践,请指定示例中显示的提示以外的凭证。