メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

任意のソースから MySQL または MariaDB DB インスタンスへのデータのインポート

ロードするデータが 1GB を超える場合、または MySQL または MariaDB データベース以外の場所にあるデータの場合、フラットファイルを作成し、mysqlimport を使用してロードすることをお勧めします。mysqlimport は、MySQL および MariaDB クライアントソフトウェアにバンドルされたコマンドラインユーティリティで、目的はフラットファイルを MySQL または MariaDB にロードすることです。mysqlimport については、MySQL ドキュメントの「mysqlimport - データインポートプログラム」を参照してください。

また、データロードの前後にターゲット Amazon RDS DB インスタンスの DB スナップショットを作成することもお勧めします。Amazon RDS DB スナップショットは DB インスタンスの完全なバックアップであり、DB インスタンスを既知の状態に復元するために使用できます。データベースのバックアップ中に DB スナップショットを開始すると、データベースインスタンスに対する I/O 操作がすぐに一時停止されます。

ロード直前に DB スナップショットを作成すると、必要が生じた場合にデータベースをロード前の状態に復元できます。ロード直後に DB スナップショットを取得すると、問題の発生時にデータを再度ロードする必要がなくなります。また、新しいデータベースインスタンスへの初期データ値投入にも使用できます。

このプロセスは以下のステップで構成されます。各手順については、以下で詳しく説明します。

  1. ロードするデータを含むフラットファイルを作成します。

  2. ターゲット DB インスタンスにアクセスしているすべてのアプリケーションを停止します。

  3. DB スナップショットを作成します。

  4. Amazon RDS 自動バックアップを無効にすることを検討します。

  5. mysqlimport を使用してデータをロードします。

  6. 自動バックアップを再度有効にします。

ステップ 1: ロードするデータを含むフラットファイルを作成する

CSV (カンマ区切り値) などの一般的な形式を使用して、ロードするデータを保存します。各テーブルには独自のファイルが必要です。複数のテーブルのデータを同じファイルに結合することはできません。各ファイルに、対応するテーブルと同じ名前を付けます。ファイル拡張子は何でもかまいません。たとえば、テーブル名が「sales」の場合、ファイル名は「sales.csv」でも「sales.txt」でもかまいませんが、「sales_01.csv」にすることはできません。

可能であれば必ず、ロードされるテーブルのプライマリキーでデータをソートします。これにより、ロード時間が大幅に短縮され、ディスクストレージ要件が最小限に抑えられます。

この手順の速度と効率は、ファイルのサイズを小さく保つかどうかによって決まります。個々のファイルの非圧縮サイズが 1GB を超える場合、複数のファイルに分割して、1 つずつロードしてください。

UNIX 互換システム (Linux など) では、「split」コマンドを使用します。たとえば、次のコマンドは sales.csv ファイルを 1GB 未満の複数のファイルに分割します。ただし、改行でのみ分割します (-C 1024m)。新しいファイルの名前は sales.part_00、sales.part_01 などになります。

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

他のオペレーティングシステムでも同様のユーティリティを使用できます。

ステップ 2: ターゲット DB インスタンスにアクセスしているすべてのアプリケーションを停止する

大きいロードを開始する前に、ロード先のターゲット DB インスタンスにアクセスしているすべてのアプリケーションアクティビティを停止します (特に、ロードするテーブルや他のセッションにより参照されているテーブルが、それらのセッションにより変更される場合)。これにより、ロード時に制約違反が発生するリスクが減少して、ロードパフォーマンスが向上します。また、ロードに関与しないプロセスによって加えられた変更を失わずに、ロード直前の時点にデータベースインスタンスを復元することも可能になります。

もちろん、これは可能でない場合や実用的ではない場合があります。アプリケーションによる DB インスタンスへのアクセスをロード前に停止できない場合は、データの可用性と整合性を確保する手順を実行してください。必要となる具体的な手順は、実際のユースケースとサイト要件によって大きく異なります。

ステップ 3: DB スナップショットを作成する

データが含まれない新しい DB インスタンスにデータをロードする場合、この手順をスキップできます。それ以外の場合、DB インスタンスの DB スナップショットを作成すると、必要な場合に、ロード直前の時点までデータベースインスタンスを復元できるようになります。前述のとおり、データベースのバックアップ中に DB スナップショットを開始すると、データベースインスタンスに対する I/O 操作が数分間一時停止されます。

次の例では、AWS CLI の create-db-snapshot コマンドを使用して AcmeRDS インスタンスの DB スナップショットを作成し、DB スナップショットに識別子「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

DB スナップショットからの復元機能を使用して、リハーサル用のテストデータベースインスタンスを作成したり、ロード中に加えられた変更を「元に戻す」こともできます。

DB スナップショットからデータベースを復元すると、すべての DB インスタンスと同様に一意の識別子とエンドポイントを持つ新しい DB インスタンスが作成される点に留意することが重要です。エンドポイントを変更せずにデータベースインスタンスを復元する必要がある場合、エンドポイントを再利用できるように、まず DB インスタンスを削除する必要があります。

たとえば、リハーサルや他のテスト用の DB インスタンスを作成するには、DB インスタンスに独自の識別子を付けます。この例では、「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

この例では、削除する前にデータベースインスタンスの最終的な DB スナップショットを取得している点に注目してください。これはオプションですが推奨されます。

ステップ 4: Amazon RDS 自動バックアップを無効にすることを検討する

警告: ポイントインタイムリカバリを実行する機能を維持する必要がある場合は、自動バックアップを無効にしないでください。自動バックアップを無効にすると既存のバックアップがすべて消去されるため、自動バックアップの無効化後はポイントインタイムリカバリができなくなります。自動バックアップの無効化は、パフォーマンスの最適化であり、データロードに必須ではありません。自動バックアップを無効にしても、DB スナップショットに影響は及ばない点に注意してください。既存のすべての DB スナップショットは引き続き復元で使用可能です。

自動バックアップを無効にするとロード時間が約 25% 短縮され、ロード時に必要なストレージ容量が減少します。データが含まれない新しい DB インスタンスにデータをロードする場合、バックアップを無効にすると、ロードを簡単に高速化でき、バックアップに必要な追加ストレージを使用する必要がなくなります。ただし、すでにデータが含まれている DB インスタンスにロードする場合、バックアップを無効にすることのメリットと、ポイントインタイムリカバリを実行できなくなることの影響を比較検討する必要があります。

DB インスタンスでは、デフォルトで自動バックアップが有効になっています (保持期間は 1 日)。自動バックアップを無効にするには、バックアップ保持期間を 0 に設定する必要があります。ロード後、バックアップ保持期間を 0 以外の値に設定することでバックアップを再度有効にすることができます。バックアップを有効または無効にするには、Amazon RDS が DB インスタンスをシャットダウンして再起動することにより、MySQL または MariaDB のログ記録をオンまたはオフにする必要があります。

AWS CLI の modify-db-instance コマンドを使用し、バックアップ保持期間を 0 に設定して変更をすぐに適用します。保持期間を 0 に設定するには DB インスタンスを再起動する必要があるため、続行前に再起動が完了するまで待機してください。

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 コマンドで DB インスタンスのステータスを確認できます。この例では、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 にフラットファイルをロードします。この例では、名前が「sales」で、拡張子が「part_」で始まるすべてのファイルをロードするように mysqlimport に指示しています。これは、「split」の例で作成されたすべてのファイルをロードする便利な方法です。--compress オプションを使用してネットワークトラフィックを最小限に抑えます。--fields-terminated-by=',' オプションが CSV ファイルに使用されており、--local オプションは受信データがクライアントにあることを指定しています。--local オプションがない場合、Amazon RDS DB インスタンスはデータベースホストでデータを検索するため、必ず --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_*

データロードがかなり大きい場合、ファイルのロード中に定期的に追加の DB スナップショットを取得し、ロード済みのファイルを書き留めます。問題が発生した場合、最後の DB スナップショットのポイントから簡単に再開できるため、時間のかかる再ロードを回避できます。

ステップ 6: Amazon RDS 自動バックアップを有効にする

ロードが終了したら、バックアップ保持期間をロード前の値に戻すことで、Amazon RDS 自動バックアップを再度有効にします。前述のように、Amazon RDS により DB インスタンスが再起動されるため、短時間の停止に備えてください。

この例では、AWS CLI の modify-db-instance コマンドを使用して AcmeRDS DB インスタンスの自動バックアップを有効にし、保持期間を 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