Amazon Relational Database Service
用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

从任意源将数据导入 MySQL 或 MariaDB 数据库实例

如果要加载的数据量超过 1 GiB,或如果数据来源于除 MySQL 或 MariaDB 数据库之外的其他存储位置,则我们建议您创建平面文件并使用 mysqlimport 加载此类文件。mysqlimport 是 MySQL 和 MariaDB 客户端软件附带的另一种命令行实用工具,用于将平面文件加载到 MySQL 或 MariaDB 中。有关 mysqlimport 的信息,请参阅 MySQL 文档中的 mysqlimport - 数据导入计划

我们还建议您在加载数据前后创建目标 Amazon RDS 数据库实例的数据库快照。Amazon RDS 数据库快照是数据库实例的完整备份,可用于将数据库实例还原到已知状态。在启动数据库快照时,针对数据库实例的 I/O 操作将在备份数据库过程中暂停。

通过在即将开始加载前创建数据库快照,您可以在需要时将数据库还原到加载前的状态。完成加载后立即创建数据库快照,可让您在遇到问题时不必再次加载数据,且您还可以使用此数据库快照创建新数据库实例。

下面列表显示了需要采取的步骤。下文更为详细地描述了每个步骤。

  1. 创建包含待加载数据的平面文件。

  2. 阻止所有应用程序访问目标数据库实例。

  3. 创建数据库快照。

  4. 考虑禁用 Amazon RDS 自动备份。

  5. 使用 Mysqlimport 加载数据。

  6. 再次启用自动备份。

步骤 1:创建包含待加载数据的平面文件

使用通用格式存储待加载的数据,如 CSV (逗号分隔值)。每个表都必须拥有自己的文件;不能将多个表的数据合并到同一文件。每个文件的名称都必须与对应的表相同。可以根据个人喜好设置文件扩展名。例如,如果表名为“sales”,则文件名可以是“sales.csv”或“sales.txt”,但不能是“sales_01.csv”。

只要可能,按照正在加载的表的主键对数据进行排序。这可以显著优化加载时间并尽可能减少磁盘存储要求。

此过程的速度和效率取决于能否将文件的大小保持在较小状态。如果在未压缩状态下单个文件的大小超过 1 GiB,则需将此文件分割为多个文件,然后分别加载各个文件。

在类 Unix 的系统 (包括 Linux) 中,请使用‘split’命令。例如,以下命令会将 sales.csv 文件分割为多个小于 1 GiB 的文件,且只在换行符处进行分割 (-C 1024m)。新文件的名称为 sales.part_00、sales.part_01 等。

split -C 1024m -d sales.csv sales.part_

其他操作系统也具有类似的实用工具。

步骤 2:阻止所有应用程序访问目标数据库实例

开始大量加载前,阻止所有应用程序活动访问您打算加载到的目标数据库实例。我们建议您这样做,特别是当其他会话将要修改正在加载的表或引用的表时。这可以降低加载过程中发生约束冲突的风险并提高加载性能。它还可以将数据库实例还原到加载前的某一时间点,而不会丢失未参与加载的进程所做的更改。

当然,这可能并不可行或不现实。如果您无法在加载前阻止应用程序访问数据库实例,应采取步骤以确保数据的可用性和完整性。所需的具体步骤在很大程度上根据特定的使用案例和现场要求而有所不同。

步骤 3:创建数据库快照

如果您计划将数据加载到不包含数据的新数据库实例,可以跳过此步骤。否则,通过创建数据库实例的数据库快照,您可以在必要时将数据库实例还原到加载前的时间点。正如上面所述,在启动数据库快照时,针对数据库实例的 I/O 操作将在备份数据库过程中暂停几分钟。

在以下示例中,我们使用 AWS CLI create-db-snapshot 命令创建 AcmeRDS 实例的数据库快照,并为该数据库快照指定标识符“preload”。

针对 Linux、OS X 或 Unix:

aws rds create-db-snapshot \ --db-instance-identifier AcmeRDS \ --db-snapshot-identifier preload

对于 Windows:

aws rds create-db-snapshot ^ --db-instance-identifier AcmeRDS ^ --db-snapshot-identifier preload

也可以使用从数据库快照还原功能,以便创建用于试运行的测试数据库实例或“撤消”在加载期间进行的更改。

请务必注意,从数据库快照还原数据库将创建新的数据库实例,与所有数据库实例一样,该数据库实例具有唯一的标识符和终端节点。如果需要还原数据库实例但不改变终端节点,必须先删除此数据库实例,从而可重新使用此终端节点。

例如,要创建一个适用于试运行或其他测试的数据库实例,您可能要为数据库实例指定它自己的标识符。在示例中,“AcmeRDS-2”是标识符,我们可使用与 AcmeRDS-2 关联的终端节点连接数据库实例。

针对 Linux、OS X 或 Unix:

aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier AcmeRDS-2 \ --db-snapshot-identifier preload

对于 Windows:

aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier AcmeRDS-2 ^ --db-snapshot-identifier preload

要重新使用现有的终端节点,必须首先删除此数据库实例,然后为还原的数据库指定相同的标识符:

针对 Linux、OS X 或 Unix:

aws rds delete-db-instance \ --db-instance-identifier AcmeRDS \ --final-db-snapshot-identifier AcmeRDS-Final aws rds restore-db-instance-from-db-snapshot \ --db-instance-identifier AcmeRDS \ --db-snapshot-identifier preload

对于 Windows:

aws rds delete-db-instance ^ --db-instance-identifier AcmeRDS ^ --final-db-snapshot-identifier AcmeRDS-Final aws rds restore-db-instance-from-db-snapshot ^ --db-instance-identifier AcmeRDS ^ --db-snapshot-identifier preload

在删除数据库实例之前,该示例为其制作最终的数据库快照。您可以自由选择,但我们建议您这样做。

步骤 4:考虑禁用 Amazon RDS 自动备份

警告

如果需要保留执行时间点恢复的能力,请勿禁用自动备份。

禁用自动备份会清除所有现有备份,因此禁用自动备份后,将无法使用时间点恢复功能。禁用自动备份是一种性能优化,并且无需数据加载。禁用自动备份不会影响数据库快照。仍然可以还原所有现有的数据库快照。

禁用自动备份可减少约 25% 的加载时间,并减少加载期间所需的存储空间。如果您计划将数据加载到不包含数据的新数据库实例,禁用备份就可轻松加速加载并避免使用备份所需的额外存储空间。但是,如果您计划将数据加载到已包含数据的数据库实例,请权衡禁用备份的益处与无法执行时间点恢复功能的影响。

数据库实例具有默认启用的自动备份 (保留期为一天)。为禁用自动备份,您必须将备份保留期设置为零。加载后,可以将备份保留期设置为非零值,重新启用自动备份。要启用或禁用备份,Amazon RDS 必须关闭并重新启动数据库实例,以打开或关闭 MySQL 或 MariaDB 日志记录。

使用 AWS CLI modify-db-instance 命令将备份保留期设置为零并立即应用更改。要将保留期设置为零,需要重新启动数据库实例,因此,等到重新启动完成后再继续操作。

针对 Linux、OS X 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier AcmeRDS \ --apply-immediately \ --backup-retention-period 0

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier AcmeRDS ^ --apply-immediately ^ --backup-retention-period 0

您可使用 AWS CLI describe-db-instances 命令检查数据库实例的状态。此示例显示了 AcmeRDS 数据库实例的状态,包括显示列标题的 --headers 选项。

针对 Linux、OS X 或 Unix:

aws rds describe-db-instances \ --db-instance-identifier AcmeRDS \ --headers

对于 Windows:

aws rds describe-db-instances ^ --db-instance-identifier AcmeRDS ^ --headers

当状态列显示数据库可用时,您可以继续操作。

步骤 5:加载数据

使用 Mysqlimport 实用工具将平面文件加载到 Amazon RDS。在此示例中,我们让 Mysqlimport 加载名为“sales”且扩展名以“part_”开头的所有文件。这种方法可以轻松加载“split”示例中创建的所有文件。使用 --compress 选项,最大限度地减少网络流量。--fields-terminated-by=',' 选项可用于 CSV 文件,--local 选项指定传入数据应位于客户端。如果没有 --local 选项,Amazon RDS 数据库实例会查找数据库主机上的数据,因此请始终指定 --local 选项。

针对 Linux、OS X 或 Unix:

mysqlimport --local \ --compress \ --user=username \ --password \ --host=hostname \ --fields-terminated-by=',' Acme sales.part_*

对于 Windows:

mysqlimport --local ^ --compress ^ --user=username ^ --password ^ --host=hostname ^ --fields-terminated-by=',' Acme sales.part_*

对于非常大的数据加载,请在加载文件之间定期创建额外的数据库快照,并记下加载了哪些文件。如果出现问题,您可以轻松从最后一个数据库快照的时间点恢复,从而避免冗长的重新加载问题。

步骤 6:启用 Amazon RDS 自动备份

加载完成后,将备份保留期重新设置为其预加载值,重新启用 Amazon RDS 自动备份。如前文所述,Amazon RDS 会重新启动数据库实例,因此,请为短暂中断做好准备。

在此示例中,我们使用 AWS CLI modify-db-instance 命令为 AcmeRDS 数据库实例启用自动备份,并将保留期设置为 1 天。

针对 Linux、OS X 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier AcmeRDS \ --backup-retention-period 1 \ --apply-immediately

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier AcmeRDS ^ --backup-retention-period 1 ^ --apply-immediately