Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

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

如果要加载的数据量超过 1 GB,或如果数据来源于除 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 GB,则需将此文件分割为多个文件,然后分别加载各个文件。

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

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

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

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

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

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

步骤 3:创建数据库快照

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

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

针对 Linux、OS X 或 Unix:

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

对于 Windows:

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

也可以从数据库快照功能进行还原,以便创建适用于空运行的测试数据库实例或“撤消”加载过程中所做的更改。

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

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

针对 Linux、OS X 或 Unix:

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

对于 Windows:

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

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

针对 Linux、OS X 或 Unix:

Copy
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:

Copy
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:

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

对于 Windows:

Copy
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:

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

对于 Windows:

Copy
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:

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

对于 Windows:

Copy
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:

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

对于 Windows:

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