

# 将数据从外部 MariaDB 数据库导入到 Amazon RDS for MariaDB 数据库实例
<a name="mariadb-importing-data-external-database"></a>

您可以将数据从现有 MariaDB 数据库导入到 RDS for MariaDB 数据库实例。为此，请使用 [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) 或 [mariadb-dump](https://mariadb.com/kb/en/mariadb-dump/) 复制数据库，然后通过管道将数据库直接传输到 RDS for MariaDB 数据库实例。`mysqldump` 或 `mariadb-dump` 命令行实用程序通常用于创建备份以及在 MariaDB 服务器之间传输数据。该实用程序包含在 MariaDB 客户端软件中。

从 MariaDB 11.0.1 开始，您必须使用 `mariadb-dump` 而不是 `mysqldump`。

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

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

**重要**  
确保 `-p` 选项和输入的密码之间不留空格。  
作为安全最佳实践，请指定此示例中显示的提示以外的凭证。

确保您了解以下建议和注意事项：
+ 从转储文件中排除以下架构：
  + `sys`
  + `performance_schema`
  + `information_schema`

  默认情况下，`mysqldump` 和 `mariadb-dump` 实用程序排除这些架构。
+ 如果您需要迁移用户和权限，请考虑使用生成数据控制语言 (DCL) 的工具 (如 [pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) 实用程序) 来重新创建用户和权限。
+ 要执行导入，请确保执行此操作的用户有权访问数据库实例。有关更多信息，请参阅 [使用安全组控制访问权限](Overview.RDSSecurityGroups.md)。

所用参数如下所示：
+ `-u local_user` – 用于指定用户名。在第一次使用该参数时，请指定您使用 `--databases` 参数确定的本地 MariaDB 数据库中的用户账户名称。
+ `--databases database_name`：用于指定本地 MariaDB 实例上您要导入 Amazon RDS 的数据库的名称。
+ `--single-transaction` – 用于确保从本地数据库加载的所有数据都与单一时间点保持一致。如果在 `mysqldump` 或 `mariadb-dump` 读取数据期间有其他进程更改数据，使用该参数有助于保持数据完整性。
+ `--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 数据库实例指定默认数据库上的用户账户的名称。
+ `--port port_number`：用于为您的 MariaDB 数据库实例指定端口。默认情况下该值为 3306，除非您在创建数据库实例时更改了该值。
+ `--host host_name` – 用于从 Amazon RDS 数据库实例端点指定域名系统 (DNS) 名称，例如，`myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可以在 Amazon RDS 控制台上的数据库实例详细信息中找到端点值。
+ `-pRDS_password` – 用于指定密码。在第二次使用该参数时，您为第二个 `-u` 参数确定的用户账户指定密码。

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

**示例**

以下示例将本地主机上的 `world` 示例数据库复制到 RDS for MariaDB 数据库实例中。将值替换为您自己的信息。

对于 Linux、macOS 或 Unix：

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

对于：Windows

在已通过右键单击 Windows 程序菜单上的**命令提示符**并选择**以管理员身份运行**打开的命令提示符中，运行以下命令：将值替换为您自己的信息。

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

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