

# Amazon RDS for MySQL DB インスタンスへのデータのインポート
<a name="MySQL.Procedural.Importing.Other"></a>

RDS for MySQL DB インスタンスへのデータのインポートには、さまざまな手法を使用できます。最適のアプローチは、いくつかの要因によって異なります。
+ データのソース
+ データ量
+ 1 回限りのインポートか継続的なインポートか
+ ダウンタイムの長さ

 データとともにアプリケーションを移行する場合は、ダウンタイムの長さは重要な考慮事項です。

次の表は、RDS for MySQL DB インスタンスにデータをインポートする手法の一覧です。


| ソース | データ量 | 1 回または進行中 | アプリケーションのダウンタイム | 手法 | 詳細情報 | 
| --- | --- | --- | --- | --- | --- | 
|  オンプレミスまたは Amazon EC2 の既存の MySQL データベース  |  すべて  |  1 回  |  ある程度  |  オンプレミスデータベースのバックアップを作成して Amazon S3 に保存し、次に MySQL を実行する新しい Amazon RDS DB インスタンスにバックアップファイルを復元できます。  |  [Amazon RDS for MySQL DB インスタンスへのバックアップの復元](MySQL.Procedural.Importing.md)  | 
|  オンプレミスまたは Amazon EC2 の既存の MySQL データベース  |  いずれか  |  継続的  |  最小限  |  レプリケーション元として既存の MySQL データベースを使用してレプリケーションを設定します。  |  [外部のソースインスタンスを使用したバイナリログファイル位置のレプリケーションの設定](MySQL.Procedural.Importing.External.Repl.md) [ダウンタイムを短縮して Amazon RDS for MySQL データベースにデータをインポートする](mysql-importing-data-reduced-downtime.md)  | 
|  既存のデータベース  |  すべて  |  1 回または進行中  |  最小限  |  AWS Database Migration Service を使用してダウンタイムを最小限にしてデータベースを移行し、多くのデータベース DB エンジンで継続的なレプリケーションを継続します。  |  「*AWS Database Migration Service ユーザーガイド*」の「[AWS Database Migration Service とは?](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)」および「[MySQL 互換データベースの AWS DMS のターゲットとしての使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)」   | 
|  既存の MySQL DB インスタンス  |  すべて  |  1 回または進行中  |  最小限  |  継続的なレプリケーション用のリードレプリカを作成します。新しい DB インスタンスの 1 回限りの作成用のリードレプリカを昇格させます。  |  [DB インスタンスのリードレプリカの操作](USER_ReadRepl.md)  | 
|  既存の MySQL データベース  |  スモール  |  1 回  |  ある程度  | コマンドラインユーティリティを使用して、MySQL DB インスタンスに直接データをコピーします。 |  [外部の MySQL データベースから Amazon RDS for MySQL DB インスタンスにデータをインポートする](mysql-importing-data-external-database.md)  | 
|  既存のデータベースに保存されないデータ  |  ミディアム  |  1 回  |  ある程度  | フラットファイルを作成し、MySQL LOAD DATA LOCAL INFILE ステートメントを使用してインポートします。 |  [任意のソースから Amazon RDS for MySQL DB インスタンスにデータをインポートする](mysql-importing-data-any-source.md)  | 

**注記**  
`mysql` システムデータベースには、DB インスタンスへのログインとデータへのアクセスに必要な認証と認可の情報が含まれています。DB インスタンスにある `mysql` データベースのテーブル、データ、または他のコンテンツを削除、変更、名前変更、または切り取りを行うとエラーが発生し、DB インスタンスとデータにアクセスできなくなる場合があります。この場合は、AWS CLI の [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) コマンドを使用して、スナップショットから DB インスタンスを復元できます。AWS CLI の [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) コマンドを使用して、DB インスタンスを復元できます。

# MySQL のデータインポートに関する考慮事項
<a name="MySQL.Procedural.Importing.Advanced"></a>

以下のコンテンツには、MySQL へのデータのロードに関連する技術情報が含まれています。このコンテンツは、MySQL サーバーアーキテクチャに精通しているユーザーを対象としています。

## バイナリログ記録
<a name="MySQL.Procedural.Importing.Advanced.Log"></a>

バイナリログ記録を有効にすると、データロードのパフォーマンスが低下し、ログを無効にした場合と比較して最大 4 倍の追加のディスク領域が必要になります。データのロードに使用されるトランザクションサイズは、システムのパフォーマンスとディスク容量のニーズに直接影響します。トランザクションが大きいほど、より多くのリソースが必要になります。

## トランザクションサイズ
<a name="MySQL.Procedural.Importing.Advanced.Size"></a>

トランザクションサイズは、MySQL データロードの以下の側面に影響します。
+ リソース消費
+ ディスクスペースの使用率
+ プロセスの再開
+ 復旧時間
+ 入力形式 (フラットファイルまたは SQL)

このセクションでは、トランザクションサイズがバイナリログ作成に与える影響について説明し、大量のデータロード中にバイナリログ作成を無効にするケースを作成します。Amazon RDS 自動バックアップ保持期間を設定することで、バイナリログ作成を有効または無効にすることができます。値が 0 以外の場合はバイナリログ作成が有効になり、0 の場合は無効になります。詳細については、「[バックアップの保存期間](USER_WorkingWithAutomatedBackups.BackupRetention.md)」を参照してください。

このセクションでは、大規模なトランザクションが InnoDB に与える影響と、トランザクションサイズを小さく保つことが重要な理由についても説明します。

### 小さいトランザクション
<a name="MySQL.Procedural.Importing.Advanced.Log.Small"></a>

トランザクションが小さい場合、バイナリログ作成により、データのロードに必要なディスク書き込み数が 2 倍になります。この影響は、他のデータベースセッションのパフォーマンスを著しく低下させ、データのロードに必要な時間を長くします。劣化の程度は、以下の要因に一部依存します。
+ アップロードレート
+ ロード中に発生するその他のデータベースアクティビティ
+ Amazon RDS DB インスタンスの容量

バイナリログは、バックアップおよび削除されるまでにロードされたデータの量とほぼ同じディスク容量を消費します。Amazon RDS は、バイナリログを頻繁にバックアップして削除することで、この容量を最小限に抑えます。

### 大きいトランザクション
<a name="MySQL.Procedural.Importing.Advanced.Log.Large"></a>

大規模なトランザクションの場合、バイナリログによって、次の理由により IOPS とディスク使用量が 3 倍になります。
+ バイナリログキャッシュは、トランザクションデータを一時的にディスクに保存します。
+ このキャッシュはトランザクションのサイズに応じて大きくなり、ディスク領域を消費します。
+ トランザクション (コミットまたはロールバック) が完了すると、システムはキャッシュをバイナリログにコピーします。

このプロセスでは、データのコピーが 3 つ作成されます。
+ 元のデータ
+ ディスク上のキャッシュ
+ 最後のバイナリログエントリ

書き込みオペレーションごとに追加の IO が発生し、パフォーマンスにさらに影響を及ぼします。

このため、バイナリログ記録には、ログ記録を無効にした場合と比較して 3 倍のディスク容量が必要です。例えば、1 つのトランザクションとして 10 GiB のデータをロードすると、次の 3 つのコピーが作成されます。
+ テーブルデータに 10 GiB
+ バイナリログキャッシュに 10 GiB
+ バイナリログファイルに 10 GiB

必要な一時ディスク容量の合計は 30 GiB です。

ディスク容量に関する重要な考慮事項:
+ キャッシュファイルは、セッションが終了するか、新しいトランザクションによって別のキャッシュが作成されるまで保持されます。
+ バイナリログはバックアップされるまで保持され、長期間にわたって 20 GiB (キャッシュとログ) が保持される可能性があります。

`LOAD DATA LOCAL INFILE` を使用してデータをロードする場合、ロード前に行われたバックアップからデータベースを復元する必要がある場合に備えて、データ復旧によって 4 番目のコピーが作成されます。復旧時に、MySQL はバイナリログからフラットファイルにデータを抽出します。その後、MySQL は `LOAD DATA LOCAL INFILE` を実行します。上記の例の場合、この復旧には合計 40 GiB、つまりテーブル、キャッシュ、ログ、ローカルファイルごとに 10 GiB の一時ディスク領域が必要です。少なくとも 40 GiB の空きディスク容量がないと、復旧は失敗します。

### 大規模なデータロードの最適化
<a name="MySQL.Procedural.Importing.AnySource.Advanced.Disable"></a>

大量のデータをロードする場合は、バイナリログを無効にして、オーバーヘッドとディスク領域の要件を削減します。バイナリログ記録を無効にするには、バックアップ保持期間を 0 に設定します。ロードが完了したら、バックアップ保持期間を適切なゼロ以外の値に復元します。詳細については、設定テーブルの「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」および「[バックアップ保持期間](USER_ModifyInstance.Settings.md)」を参照してください。

**注記**  
DB インスタンスがリードレプリカのソース DB インスタンスである場合、バックアップ保持期間を 0 に設定することはできません。

データをロードする前に、DB スナップショットを作成することをお勧めします。詳細については、「[手動バックアップの管理](USER_ManagingManualBackups.md)」を参照してください。

## InnoDB
<a name="MySQL.Procedural.Importing.Advanced.InnoDB"></a>

undo ログと復旧のオプションに関する以下の情報は、InnoDB トランザクションを小さくしてデータベースのパフォーマンスを最適化することをサポートしています。

### InnoDB の undo ログについて
<a name="MySQL.Procedural.Importing.Advanced.InnoDB.Undo"></a>

undo ログは、トランザクションのロールバックを有効にし、マルチバージョン同時実行制御 (MVCC) をサポートするログ記録メカニズムです。

MySQL 5.7 以前のバージョンでは、undo ログは InnoDB システムテーブルスペース (通常は ibdata1) に保存され、パージスレッドによって削除されるまで保持されます。その結果、大規模なデータロードトランザクションによってシステムテーブルスペースが非常に大きくなり、データベースを再作成しない限り再利用できないディスク領域が消費される可能性があります。

すべての MySQL バージョンでは、最も古いアクティブなトランザクションがコミットまたはロールバックされるまで、パージスレッドは undo ログの削除を待機する必要があります。データベースが、ロード中に他のトランザクションを処理する場合、そのトランザクションがコミットされ、他のトランザクションが MVCC の undo ログを必要としない場合でも、それらの undo ログも蓄積され、削除できません。この場合、読み取り専用トランザクションを含むすべてのトランザクションが遅くなります。このスローダウンは、すべてのトランザクションが、ロードトランザクションだけでなく、任意のトランザクションが変更するすべての行にアクセスするために発生します。実際には、トランザクションは、長時間実行されるロードトランザクションによって undo ログのクリーンアップ中に消去されなかった undo ログをスキャンする必要があります。これは、変更された行にアクセスするオペレーションのパフォーマンスに影響します。

### InnoDB トランザクション復旧オプション
<a name="MySQL.Procedural.Importing.Advanced.InnoDB.Rollback"></a>

InnoDB はコミットオペレーションを最適化しますが、大規模なトランザクションのロールバックは遅くなります。復旧を高速化するには、ポイントインタイムリカバリを実行するか、DB スナップショットを復元します。詳細については、「[ポイントインタイムリカバリ](USER_PIT.md)」および「[DB インスタンスへの復元](USER_RestoreFromSnapshot.md)」を参照してください。

## データインポート形式
<a name="MySQL.Procedural.Importing.Advanced.InputFormat"></a>

MySQL は、フラットファイルと SQL の 2 つのデータインポート形式をサポートしています。各形式に関する情報を確認して、ニーズに最適なオプションを決定します。

### フラットファイル
<a name="MySQL.Procedural.Importing.Advanced.InputFormat.FlatFiles"></a>

小規模なトランザクションの場合は、`LOAD DATA LOCAL INFILE` を使用してフラットファイルをロードします。このデータインポート形式は、SQL を使用する場合に比べて次のようなメリットがあります。
+ ネットワークトラフィックの削減
+ データ転送コストの削減
+ データベース処理オーバーヘッドの減少
+ より高速な処理

`LOAD DATA LOCAL INFILE` はフラットファイル全体を 1 つのトランザクションとしてロードします。個々のファイルのサイズを小さく保つと、次の利点があります。
+ **再開機能** - どのファイルがロードされたかを追跡できます。ロード中に問題が発生した場合、中断したところから再開できます。一部のデータを Amazon RDS に再送信する必要がある場合でも、ファイルが小さいと、再送信される量は最小限ですみます。
+ **同時データロード** – 単一ファイルのロードに十分な IOPS とネットワーク帯域幅がある場合、同時にロードすれば時間を節約できます。
+ **ロード速度制御** – データロードが他のプロセスに悪影響を及ぼす場合は、ファイル間の間隔を増やすことでロード速度を制御できます。

大規模なトランザクションでは、`LOAD DATA LOCAL INFILE` を使用してデータをインポートするメリットが減ります。大量のデータを小さなファイルに分割できない場合は、SQL の使用を検討してください。

### SQL
<a name="MySQL.Procedural.Importing.Advanced.InputFormat.SQL"></a>

SQL にはフラットファイルに比べて、トランザクションサイズを簡単に小さく保つことができるという大きなメリットがあります。ただし、SQL のロードにはフラットファイルよりもかなり時間がかかる場合があります。また、障害が発生した後、どこから再開するかを判断するのが難しい場合があります。mysqldump ファイルを再開することはできません。mysqldump ファイルのロード中にエラーが発生した場合、ロードを再開するにはファイルを変更するか置き換える必要があります。または、障害の原因を修正した後、ロード前の時点に復元してファイルを再開する必要があります。詳細については、「[ポイントインタイムリカバリ](USER_PIT.md)」を参照してください。

## データベースチェックポイントに Amazon RDS DB スナップショットを使用する
<a name="MySQL.Procedural.Importing.Advanced.Checkpoints"></a>

バイナリログ記録を使用せずに、数時間または数日など長期間にわたってデータをロードする場合は、DB スナップショットを使用して、データの安全性を確保するために定期的なチェックポイントを提供します。各 DB スナップショットは、システム障害やデータ破損イベント時の復旧ポイントとして機能するデータベースインスタンスの一貫したコピーを作成します。DB スナップショットは高速であるため、頻繁なチェックポイント作成によるロードパフォーマンスへの影響は最小限に抑えられます。データベースの耐久性や復旧機能に影響を与えることなく、以前の DB スナップショットを削除できます。DB スナップショットの詳細については、「[手動バックアップの管理](USER_ManagingManualBackups.md)」を参照してください。

## データベースのロード時間を短縮する
<a name="MySQL.Procedural.Importing.Advanced.LoadTime"></a>

以下の項目は、ロード時間を短縮するための追加のヒントです。
+ MySQL データベースにデータをロードする前に、すべてのセカンダリインデックスを作成します。他のデータベースシステムとは異なり、MySQL はセカンダリインデックスを追加または変更するときにテーブル全体を再構築します。このプロセスでは、インデックスが変更された新しいテーブルが作成され、すべてのデータがコピーされ、元のテーブルが削除されます。
+ プライマリキーの順序でデータをロードします。InnoDB テーブルの場合、これによりロード時間が 75%～80% 短縮され、データファイルサイズが 50% 短縮されます。
+ `foreign_key_checks` を `0` に設定して、外部キーの制約を無効にします。これは多くの場合、`LOAD DATA LOCAL INFILE` を使用してロードされたフラットファイルで必要となります。どのロードでも、外部キーチェックを無効にすると、データのロードが高速化されます。ロードが完了したら、`foreign_key_checks` を `1` に設定して制約を再度有効にし、データを検証します。
+ リソース制限に近づかない限り、データを同時にロードします。複数のテーブルセグメント間で同時ロードを有効にするには、必要に応じてパーティションテーブルを使用します。
+ SQL 実行のオーバーヘッドを減らすには、複数の `INSERT` ステートメントを単一の複数値 `INSERT` オペレーションに結合します。`mysqldump` は、この最適化を自動的に実装します。
+ `innodb_flush_log_at_trx_commit` を `0` に設定することで、InnoDB ログ IO オペレーションを減らします。ロードが完了したら、`innodb_flush_log_at_trx_commit` を `1` に戻します。
**警告**  
`innodb_flush_log_at_trx_commit` を `0` に設定すると、InnoDB はコミットごとではなく毎秒ログをフラッシュします。この設定はパフォーマンスを向上させますが、システム障害時にトランザクションが失われるリスクがあります。
+ リードレプリカがない DB インスタンスにデータをロードする場合は、`sync_binlog` を `0` に設定します。ロードが完了したら、`sync_binlog parameter` を `1` に戻します。
+ DB インスタンスをマルチ AZ 配置に変換する前に、シングル AZ DB インスタンスにデータをロードします。DB インスタンスが既にマルチ AZ 配置を使用している場合は、データロードのためにシングル AZ 配置に切り替えることはお勧めしません。これで実現できる改善はわずかだけです。

# Amazon RDS for MySQL DB インスタンスへのバックアップの復元
<a name="MySQL.Procedural.Importing"></a>

Amazon RDS では、バックアップファイルを使用して MySQL データベースをインポートできます。データベースのバックアップを作成して、そのバックアップファイルを Amazon S3 に保存し、その後、MySQL を実行する新しい Amazon RDS DB インスタンスにバックアップファイルを復元できます。Amazon RDS は、すべての AWS リージョンで Amazon S3 からのバックアップファイルのインポートをサポートしています。

このセクションで説明するシナリオでは、オンプレミスデータベースのバックアップを復元します。データベースがアクセス可能であれば、この手法は Amazon EC2 や他のクラウドサービスなど、他の場所にあるデータベースにも使用できます。

次の図は、サポートされるシナリオを示しています。

![\[S3 からバックアップファイルをインポートする MySQL\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MySQL-bak-file.png)


バックアップファイルの作成、コピー、復元時にオンプレミスデータベースをオフラインにできる場合、データベースを Amazon RDS にインポートするには、バックアップファイルの使用をお勧めします。データベースをオフラインにできない場合は、次のいずれかの方法を使用できます。
+ **バイナリログ** – このトピックで説明されているように、まず Amazon S3 から Amazon RDS にバックアップファイルをインポートします。次に、バイナリログ (binlog) レプリケーションを使用してデータベースを更新します。詳細については、「[外部のソースインスタンスを使用したバイナリログファイル位置のレプリケーションの設定](MySQL.Procedural.Importing.External.Repl.md)」を参照してください。
+ **AWS Database Migration Service** – AWS Database Migration Service を使用して、データベースを Amazon RDS に移行します。詳細については、「[What is AWS Database Migration Service?](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)」を参照してください。

## Amazon S3 から Amazon RDS にバックアップファイルをインポートするための設定の概要
<a name="MySQL.Procedural.Importing.Enabling"></a>

Amazon S3 から Amazon RDS にバックアップファイルをインポートするには、次のコンポーネントが必要です。
+ バックアップファイルを保存する Amazon S3 バケット。

  Amazon S3 バケットが既にある場合は、そのバケットを使用できます。Amazon S3 バケットがない場合は、新しいバケットを作成します。詳細については、「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html)」を参照してください。
+ Percona XtraBackup で作成されたオンプレミスデータベースのバックアップ。

  詳細については、「[データベースバックアップの作成](#MySQL.Procedural.Importing.Backup)」を参照してください。
+ Amazon RDS から S3 バケットへのアクセスを許可する AWS Identity and Access Management (IAM) ロール。

  IAM ロールが既にある場合は、そのロールを使用して信頼ポリシーとアクセス許可ポリシーをアタッチできます。詳細については、「[IAM ロールの手動作成](#MySQL.Procedural.Importing.Enabling.IAM)」を参照してください。

  IAM ロールがない場合は、次の 2 つのオプションがあります。
  + 新しい IAM ロールを手動で作成することができます。詳細については、「[IAM ロールの手動作成](#MySQL.Procedural.Importing.Enabling.IAM)」を参照してください。
  + Amazon RDS で新しい IAM ロールを作成することを選択できます。Amazon RDS で新しい IAM ロールを作成する場合は、「[Amazon S3 から新しい MySQL DB インスタンスにデータをインポートする](#MySQL.Procedural.Importing.PerformingImport)」セクションの AWS マネジメントコンソール を使用する手順に従ってください。

## データベースバックアップの作成
<a name="MySQL.Procedural.Importing.Backup"></a>

Percona XtraBackup ソフトウェアを使用してバックアップを作成します。Percona XtraBackup の最新バージョンの使用をお勧めします。Percona XtraBackup は、Percona ウェブサイトの[ソフトウェアのダウンロード](https://www.percona.com/downloads/)からインストールできます。

**警告**  
データベースのバックアップを作成する際、XtraBackup では認証情報をxtrabackup\$1info ファイルに保存することがあります。xtrabackup\$1info ファイルの `tool_command` 設定に機密情報が含まれていないことを確認してください。

使用する Percona XtraBackup のバージョンは、バックアップする MySQL のバージョンによって異なります。
+ **MySQL 8.4** – Percona XtraBackup バージョン 8.4 を使用します。
+ **MySQL 8.0** – Percona XtraBackup バージョン 8.0 を使用します。
**注記**  
Percona XtraBackup 8.0.12 以降のバージョンでは、MySQL 8.0 のすべてのバージョンの移行がサポートされています。RDS for MySQL 8.0.32 以降に移行する場合は、Percona XtraBackup 8.0.12 以降を使用する必要があります。
+ **MySQL 5.7** – Percona XtraBackup バージョン 2.4 を使用します。

Percona XtraBackup を使用して MySQL データベースファイルの完全なバックアップを作成できます。または、Percona XtraBackup を使用して MySQL データベースファイルをバックアップ済みである場合は、既存の完全および増分バックアップディレクトリおよびファイルをアップロードできます。

Percona XtraBackup を使用したデータベースのバックアップの詳細については、Percona ウェブサイトの「[Percona XtraBackup - Documentation](https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html)」を参照してください。

### Percona XtraBackup での完全バックアップの作成
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Full"></a>

Amazon RDS が Amazon S3 から復元できる、MySQL データベースファイルの完全なバックアップを作成するには、Percona XtraBackup ユーティリティ (`xtrabackup`) を使用します。

例えば、次のコマンドは MySQL データベースのバックアップを作成し、ファイルを `/on-premises/s3-restore/backup` フォルダに保存します。

```
xtrabackup --backup --user=myuser --password=password --target-dir=/on-premises/s3-restore/backup
```

バックアップを 1 つのファイル (必要に応じて後で複数のファイルに分割できます) に圧縮する場合、MySQL のバージョンに応じて、以下のいずれかの形式でバックアップを保存できます。
+ **Gzip (.gz)** – MySQL 5.7 以前のバージョン用
+ **tar (.tar)** – MySQL 5.7 以前のバージョン用
+ **Percona xbstream (.xbstream)** – すべての MySQL バージョン用

**注記**  
Percona XtraBackUp 8.0 以降では、圧縮には Percona xbstream のみがサポートされています。

**MySQL 5.7 以前のバージョン**

次のコマンドでは、複数の Gzip ファイルに分割された MySQL データベースのバックアップを作成します。値を自分の情報に置き換えます。

```
xtrabackup --backup --user=my_user --password=password --stream=tar \
   --target-dir=/on-premises/s3-restore/backup | gzip - | split -d --bytes=500MB \
   - /on-premises/s3-restore/backup/backup.tar.gz
```

**MySQL 5.7 以前のバージョン**

次のコマンドでは、複数の tar ファイルに分割された MySQL データベースのバックアップを作成します。値を自分の情報に置き換えます。

```
xtrabackup --backup --user=my_user --password=password --stream=tar \
   --target-dir=/on-premises/s3-restore/backup | split -d --bytes=500MB \
   - /on-premises/s3-restore/backup/backup.tar
```

**MySQL のすべてのバージョン**

例えば、次のコマンドでは、複数の xbstream ファイルに分割された MySQL データベースのバックアップを作成します。値を自分の情報に置き換えます。

```
xtrabackup --backup --user=myuser --password=password --stream=xbstream \
   --target-dir=/on-premises/s3-restore/backup | split -d --bytes=500MB \
   - /on-premises/s3-restore/backup/backup.xbstream
```

**注記**  
次のエラーが表示される場合は、コマンド内でファイル形式が混在している可能性があります。  

```
ERROR:/bin/tar: This does not look like a tar archive
```

### Percona XtraBackup での増分バックアップの使用
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Incr"></a>

Percona XtraBackup を使用して MySQL データベースファイルの完全および増分バックアップを作成済みである場合は、完全バックアップを作成して Amazon S3 にアップロードする必要はありません。代わりに、既存のバックアップのディレクトリおよびファイルを Amazon S3 バケットにコピーして、時間を節約できます。Percona XtraBackup を使用した増分バックアップの作成の詳細については、「[Create an incremental backup](https://docs.percona.com/percona-xtrabackup/LATEST/create-incremental-backup.html)」を参照してください。

既存の完全および増分バックアップファイルを Amazon S3 バケットにコピーするときは、ベースディレクトリのコンテンツを再帰的にコピーする必要があります。これらのコンテンツには、完全バックアップと、すべての増分バックアップディレクトリおよびファイルが含まれます。このコピーには、Amazon S3 バケットのディレクトリ構造を維持する必要があります。Amazon RDS では、すべてのファイルとディレクトリが反復処理されます。Amazon RDS では、増分バックアップごとに含まれる `xtrabackup-checkpoints` ファイルを使用してベースディレクトリが識別され、ログシーケンス番号 (LSN) の範囲に従って増分バックアップが実行されます。

### Percona XtraBackup のバックアップに関する考慮事項
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Considerations"></a>

Amazon RDS では、ファイル名に基づいてバックアップファイルを使用します。ファイル形式に基づいた適切なファイル拡張子でバックアップファイルの名前を付けます。例えば、Percona xbstream 形式を使用して保存されるファイルには `.xbstream` を使用します。

Amazon RDS では、アルファベット順および通常の数値順にバックアップファイルを使用します。バックアップファイルが適切な順序で書き込まれ、名前が付けられるようにするには、`split` コマンドを発行する際に必ず `xtrabackup` オプションを使用します。

Amazon RDS では、Percona XtraBackup を使用して作成された部分バックアップがサポートされていません。データベースのソースファイルをバックアップするときに部分バックアップを作成するには、次のオプションは使用できません。
+ `--tables`
+ `--tables-exclude`
+ `--tables-file`
+ `--databases`
+ `--databases-exclude`
+ `--databases-file`

## IAM ロールの手動作成
<a name="MySQL.Procedural.Importing.Enabling.IAM"></a>

IAM ロールがない場合、手動で新しいロールを作成できます。ただし、AWS マネジメントコンソール を使用してデータベースを復元する場合、RDS にこの新しい IAM ロールを作成させることをお勧めします。Amazon RDS でこのロールを作成するには、「[Amazon S3 から新しい MySQL DB インスタンスにデータをインポートする](#MySQL.Procedural.Importing.PerformingImport)」セクションの手順に従います。

Amazon S3 からデータベースをインポートするための新しい IAM ロールを手動で作成するには、Amazon RDS から Amazon S3 バケットにアクセス許可を委任するロールを作成します。IAM ロールを作成したら、信頼ポリシーとアクセス権限ポリシーをアタッチします。バックアップファイルを Amazon S3 からインポートするには、以下の例のような信頼ポリシーとアクセス許可ポリシーを使用します。ロールの作成の詳細については、「[AWS のサービスにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」を参照してください。

信頼ポリシーとアクセス権限ポリシーを使用するには、Amazon リソースネーム (ARN) を指定する必要があります。ARN 形式の詳細については、「[Amazon リソースネーム (ARN) と AWS のサービスの名前空間](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)」を参照してください。

**Example Amazon S3 からインポートするための信頼ポリシー**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AssumeRoleForBackup",
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

**Example Amazon S3 からインポートするためのアクセス許可ポリシー — IAM ユーザーのアクセス許可**  
次の例で、*iam\$1user\$1id* を独自の値に置き換えます。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3AccessRole",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/S3Access"
        }
    ]
}
```

**Example Amazon S3 からインポートするためのアクセス許可ポリシー — ロールのアクセス許可**  
次の例で、*amzn-s3-demo-bucket* と *prefix* を独自の値に置き換えます。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
        },
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:GetObject"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix*"
        },
        {
        "Effect": "Allow",
        "Action":
            [
                "kms:Decrypt"
            ],
        "Resource": [
            "arn:aws:kms:us-east-1:111122223333:key/key_id*"
            ]
        }
    ]
}
```
ファイル名プレフィックスを含める場合は、プレフィックスの後にアスタリスク (\$1) を含めます。プレフィックスを指定しない場合は、アスタリスクのみを指定します。

## Amazon S3 から新しい MySQL DB インスタンスにデータをインポートする
<a name="MySQL.Procedural.Importing.PerformingImport"></a>

AWS マネジメントコンソール、AWS CLI、または RDS API を使用して、Amazon S3 から新しい MySQL DB インスタンスにデータをインポートできます。

### コンソール
<a name="MySQL.Procedural.Importing.Console"></a>

**Amazon S3 から新しい MySQL DB インスタンスにデータをインポートするには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. Amazon RDS コンソールの右上で、DB インスタンスを作成する AWS リージョンを選択します。データベースバックアップを含む Amazon S3 バケットと同じ AWS リージョン を選択します。

1. ナビゲーションペインで、[**データベース**] を選択します。

1. [**S3 から復元する**] を選択します。

   [**S3 から復元してデータベースを作成する**] ページが表示されます。  
![\[S3 から DB インスタンスを復元するための詳細を指定する [S3 から復元することによってデータベースを作成する] ページ。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/mys-s3-ingestion.png)

1. **S3 ソース**で:

   1. バックアップを含む **S3 バケット**を選択します。

   1. (オプション) [**S3 プレフィックス**] で、Amazon S3 バケットに保存されているファイルのファイルパスのプレフィックスを入力します。

      プレフィックスを指定しない場合、Amazon RDS は S3 バケットのルートフォルダにあるすべてのファイルとフォルダを使用して DB インスタンスを作成します。プレフィックスを指定すると、Amazon RDS はファイルのパスが指定されたプレフィックスで始まる S3 バケットのファイルとフォルダを使用して DB インスタンスを作成します。

      例えば、複数のバックアップファイルのセットを S3 のサブフォルダ (backup) 内に保存し、各セットは独自のディレクトリ (gzip\$1backup1、gzip\$1backup2 など) 内にあるとします。この場合、gzip\$1backup1 フォルダのファイルから復元するには、プレフィックス backups/gzip\$1backup1 を指定します。

1. [**エンジンオプション**]で

   1. [**エンジンタイプ**]は[**MySQL**]を選択します。

   1. [**ソースエンジンバージョン**]では、ソースデータベースの MySQL メジャーバージョンを選択します。

   1. **[エンジンバージョン]** では、AWS リージョン の MySQL メジャーバージョンのデフォルトのマイナーバージョンを選択します。

      AWS マネジメントコンソール では、デフォルトのマイナーバージョンのみを使用できます。インポートが完了した後 DB インスタンスをアップグレードできます。

1. **IAM ロール**では、Amazon RDS が Amazon S3 バケットにアクセスできるように、必要な信頼ポリシーとアクセス許可ポリシーを持つ IAM ロールを作成または選択します。次のいずれかのアクションを実行します。
   + (推奨) [**新しいロールの作成**] を選択し、**IAM ロール名**を入力します。このオプションを使用すると、Amazon RDS は信頼ポリシーとアクセス許可ポリシーを使用してロールを自動的に作成します。
   + 既存の IAM ロールを選択します。このロールが [IAM ロールの手動作成](#MySQL.Procedural.Importing.Enabling.IAM) のすべての基準を満たしていることを確認します。

1. DB インスタンス情報を指定します。各設定の詳細については、「[DB インスタンスの設定](USER_CreateDBInstance.Settings.md)」を参照してください。
**注記**  
復元を成功させるためには、新しい DB インスタンスに十分なストレージを必ず割り当ててください。  
将来の拡張を自動的に実行するには、**[追加のストレージ設定]** で、**[ストレージの自動スケーリングを有効にする]** を選択します。

1. 必要に応じて、追加の設定を選択します。

1. [**データベースの作成**] を選択します。

### AWS CLI
<a name="MySQL.Procedural.Importing.CLI"></a>

AWS CLI を使用して Amazon S3 から新しい MySQL DB インスタンスにデータをインポートするには、次のオプションを使用して [restore-db-instance-from-s3](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html) コマンドを実行します。各設定の詳細については、「[DB インスタンスの設定](USER_CreateDBInstance.Settings.md)」を参照してください。

**注記**  
復元を成功させるためには、新しい DB インスタンスに十分なストレージを必ず割り当ててください。  
ストレージのオートスケーリングを有効にし、将来の拡張を自動的に実行するには、`--max-allocated-storage` オプションを使用します。
+ `--allocated-storage`
+ `--db-instance-identifier`
+ `--db-instance-class`
+ `--engine`
+ `--master-username`
+ `--manage-master-user-password`
+ `--s3-bucket-name`
+ `--s3-ingestion-role-arn`
+ `--s3-prefix`
+ `--source-engine`
+ `--source-engine-version`

**Example**  
Linux、macOS、Unix の場合:  

```
 1. aws rds restore-db-instance-from-s3 \
 2.     --allocated-storage 250 \
 3.     --db-instance-identifier my_identifier \
 4.     --db-instance-class db.m5.large \
 5.     --engine mysql \
 6.     --master-username admin \
 7.     --manage-master-user-password \
 8.     --s3-bucket-name amzn-s3-demo-bucket \
 9.     --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename \
10.     --s3-prefix bucket_prefix \
11.     --source-engine my_sql \
12.     --source-engine-version 8.0.32 \
13.     --max-allocated-storage 1000
```
Windows の場合:  

```
 1. aws rds restore-db-instance-from-s3 ^
 2.     --allocated-storage 250 ^
 3.     --db-instance-identifier my_identifier ^
 4.     --db-instance-class db.m5.large ^
 5.     --engine mysql ^
 6.     --master-username admin ^
 7.     --manage-master-user-password ^
 8.     --s3-bucket-name amzn-s3-demo-bucket ^
 9.     --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename ^
10.     --s3-prefix bucket_prefix ^
11.     --source-engine mysql ^
12.     --source-engine-version 8.0.32 ^
13.     --max-allocated-storage 1000
```

### RDS API
<a name="MySQL.Procedural.Importing.API"></a>

Amazon RDS API を使用して Amazon S3 から新しい MySQL DB インスタンスにデータをインポートするには、[RestoreDBInstanceFromS3](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html) オペレーションンを呼び出します。

## Amazon S3 から Amazon RDS へのバックアップファイルのインポートに関する制限と考慮事項
<a name="MySQL.Procedural.Importing.Limitations"></a>

Amazon S3 から RDS for MySQL DB インスタンスへのバックアップファイルのインポートには、次の制限と考慮事項が適用されます。
+ データは新しい DB インスタンスにのみ移行でき、既存の DB インスタンスにはできません。
+ Percona XtraBackup を使用してデータを Amazon S3 にバックアップする必要があります。詳細については、「[データベースバックアップの作成](#MySQL.Procedural.Importing.Backup)」を参照してください。
+ Amazon S3 バケットと RDS for MySQL DB インスタンスは同じ AWS リージョンに存在する必要があります。
+ 次のソースからは復元することはできません。
  + Amazon S3 にエクスポートされた DB インスタンスのスナップショット。また、DB インスタンススナップショットエクスポートから、Amazon S3 バケットにデータを移行することもできません。
  + 暗号化されたソースデータベース。ただし、移行するデータを暗号化することはできます。移行プロセス中にデータを非暗号化のまま維持することもできます。
  + MySQL 5.5 または 5.6 データベース。
+ RDS for MySQL では、`mysql schema` に `compression_dictionary*` テーブルが含まれる可能性があるため、Percona Server for MySQL をソースデータベースとしてサポートされていません。
+ RDS for MySQL では、メジャーバージョンとマイナーバージョンのどちらでも後方移行はサポートされていません。例えば、MySQL バージョン 8.0 から RDS for MySQL 5.7 に移行することはできません。また、MySQL バージョン 8.0.32 から RDS for MySQL バージョン 8.0.26 に移行することもできません。
+ Amazon RDS では、Amazon S3 から db.t2.micro DB インスタンスクラスへのインポートはサポートされていません。ただし、異なる DB インスタンスクラスに復元してから、後で DB インスタンスクラスを変更することができます。インスタンスクラスの詳細については、「[ DB インスタンスクラスのハードウェア仕様](Concepts.DBInstanceClass.Summary.md)」を参照してください。
+ Amazon S3 では、Amazon S3 バケットにアップロードするファイルのサイズが 5 TB に制限されます。バックアップファイルが 5 TB を超える場合は、バックアップファイルを小さいファイルに分割する必要があります。
+ Amazon RDS では、Amazon S3 バケットにアップロードするファイルの数が百万までに制限されます。データベースのバックアップデータ (すべての完全および増分バックアップを含む) が百万ファイルを超える場合は、Gzip (.gz)、tar (.tar.gz)、Percona xbstream (.xbstream) ファイルを使用して完全および増分バックアップファイルを Amazon S3 バケットに保存します。Percona XtrabackUp 8.0 は Percona xbstream のみを圧縮用にサポートしています。
+ 各 DB インスタンスに管理サービスを提供するために、Amazon RDS では DB インスタンスの作成時に `rdsadmin` ユーザーが作成されます。`rdsamin` は Amazon RDS の予約ユーザーであるため、以下の制限が適用されます。
  + Amazon RDS では、`'rdsadmin'@'localhost'` が定義者である関数、プロシージャ、ビュー、イベント、トリガーは、インポートされません。詳細については、「[定義者として 'rdsamin'@'localhost' を使用して保存されたオブジェクト](#MySQL.Procedural.Importing.StoredObjects)」および「[マスターユーザーアカウント権限](UsingWithRDS.MasterAccounts.md)」を参照してください。
  + DB インスタンスを作成するとき、Amazon RDS はサポートされている最大権限を持つマスターユーザーを作成します。バックアップから復元する際、Amazon RDS では、インポート中のユーザーに割り当てられたサポートされていない権限は自動的に削除されます。

    この影響を受ける可能性のあるユーザーを特定するには、「[サポートされていない権限を持つユーザーアカウント](#MySQL.Migrating.ExtMySQL.Prechecks.Users)」を参照してください。RDS for MySQL でサポートされる権限の詳細については、「[RDS for MySQL のロールベースの権限モデル](Appendix.MySQL.CommonDBATasks.privilege-model.md)」を参照してください。
+ Amazon RDS は、`mysql` スキーマ内のユーザーが作成したテーブルを移行しません。
+ `innodb_data_file_path` パラメータを、デフォルトのデータファイル名 `ibdata1:12M:autoextend` を使用するデータファイル 1 つのみで設定する必要があります。この方法を使用すると、2 つのデータファイルを持つデータベースや名前が異なるデータファイルを持つデータベースを移行できます。

  次の例は、Amazon RDS で許可されていないファイル名です。
  + `innodb_data_file_path=ibdata1:50M`
  + `ibdata2:50M:autoextend`
  + `innodb_data_file_path=ibdata01:50M:autoextend`
+ デフォルトの MySQL データディレクトリ外で定義されたテーブルを含むソースデータベースから移行することはできません。
+ この方法を使用した非圧縮バックアップでサポートされる最大サイズは、64 TiB に制限されています。圧縮バックアップの場合、圧縮解除に必要なスペースを考慮してこの制限は小さくなります。このような場合、サポートされる最大バックアップサイズは (`64 TiB - compressed backup size`) です。

  RDS for MySQL でサポートされている最大データベースサイズについては、「[汎用 SSD ストレージ](CHAP_Storage.md#Concepts.Storage.GeneralSSD)」および「[プロビジョンド IOPS SSD ストレージ](CHAP_Storage.md#USER_PIOPS)」を参照してください。
+ Amazon RDS は MySQL やその他の外部コンポーネントやプラグインのインポートをサポートしていません。
+ Amazon RDS は、データベースからすべてを復元するわけではありません。ソース MySQL システムデータベースからデータベーススキーマと以下の項目の値を保存してから、作成後に復元された RDS for MySQL DB インスタンスに追加することをお勧めします。
  + ユーザーアカウント
  + 関数
  + ストアドプロシージャ
  + タイムゾーン情報。タイムゾーン情報は、RDS for MySQL DB インスタンスのローカルオペレーティングシステムからロードされます。詳細については、「[MySQL DB インスタンスのローカルタイムゾーン](MySQL.Concepts.LocalTimeZone.md)」を参照してください。

### 定義者として 'rdsamin'@'localhost' を使用して保存されたオブジェクト
<a name="MySQL.Procedural.Importing.StoredObjects"></a>

Amazon RDS では、`'rdsadmin'@'localhost'` が定義者である関数、プロシージャ、ビュー、イベント、トリガーは、インポートされません。

ソース MySQL データベースで以下の SQL スクリプトを使用すると、サポートされていない定義子を持つストアド オブジェクトを一覧表示できます。

```
-- This SQL query lists routines with `rdsadmin`@`localhost` as the definer.

SELECT
    ROUTINE_SCHEMA,
    ROUTINE_NAME
FROM
    information_schema.routines
WHERE
    definer = 'rdsadmin@localhost';

-- This SQL query lists triggers with `rdsadmin`@`localhost` as the definer.

SELECT
    TRIGGER_SCHEMA,
    TRIGGER_NAME,
    DEFINER
FROM
    information_schema.triggers
WHERE
    DEFINER = 'rdsadmin@localhost';

-- This SQL query lists events with `rdsadmin`@`localhost` as the definer.

SELECT
    EVENT_SCHEMA,
    EVENT_NAME
FROM
    information_schema.events
WHERE
    DEFINER = 'rdsadmin@localhost';

-- This SQL query lists views with `rdsadmin`@`localhost` as the definer.
SELECT
    TABLE_SCHEMA,
    TABLE_NAME
FROM
    information_schema.views
WHERE
    DEFINER = 'rdsadmin@localhost';
```

### サポートされていない権限を持つユーザーアカウント
<a name="MySQL.Migrating.ExtMySQL.Prechecks.Users"></a>

RDS for MySQL でサポートされていない権限を持つユーザーアカウントは、サポートされていない権限なしでもインポートされます。サポートされている権限のリストについては、「[RDS for MySQL のロールベースの権限モデル](Appendix.MySQL.CommonDBATasks.privilege-model.md)」を参照してください。

ソースデータベースで次の SQL クエリを実行すると、サポートされていない権限を持つユーザーアカウントを一覧表示できます。

```
SELECT
    user,
    host
FROM
    mysql.user
WHERE
    Shutdown_priv = 'y'
    OR File_priv = 'y'
    OR Super_priv = 'y'
    OR Create_tablespace_priv = 'y';
```

# 外部の MySQL データベースから Amazon RDS for MySQL DB インスタンスにデータをインポートする
<a name="mysql-importing-data-external-database"></a>

既存の MySQL データベースから RDS for MySQL DB インスタンスに、データをインポートできます。これは、データベースを [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) でコピーして、RDS for MySQL DB インスタンスに直接パイプ処理することで行います。`mysqldump` コマンドラインユーティリティは、データのバックアップや、MySQL サーバーから別の場所への転送によく使用されます。このユーティリティは、MySQL クライアントソフトウェアに含まれています。

**注記**  
MySQL DB インスタンスを使用して大量のデータをインポートまたはエクスポートする場合、`xtrabackup` バックアップファイルと Amazon S3 を使用して Amazon RDS との間でデータを移動する方が信頼性が高く、高速です。詳細については、「[Amazon RDS for MySQL DB インスタンスへのバックアップの復元](MySQL.Procedural.Importing.md)」を参照してください。

外部のデータベースから Amazon RDS DB インスタンスにデータを移動するための一般的な `mysqldump` コマンドは、次の例のようになります。値を自分の情報に置き換えます。

```
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`

  `mysqldump` ユーティリティを使用すると、これらのスキーマをデフォルトで除外できます。
+ ユーザーや権限を移行する必要がある場合は、再作成するデータ制御言語 (DCL) を生成するツールの使用を検討します。例えば、[pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) ユーティリティがあります。
+ インポートを実行するには、そのユーザーに DB インスタンスへのアクセスが許可されていることを確認してください。詳細については、「[セキュリティグループによるアクセス制御](Overview.RDSSecurityGroups.md)」を参照してください。

使用するパラメータは次のとおりです。
+ `-u local_user` - ユーザー名を指定します。このパラメータの初回の使用では、`--databases` パラメータによって識別されたローカル MySQL データベースのユーザーアカウントの名前を指定します。
+ `--databases database_name` — Amazon RDS にインポートするローカル MySQL インスタンスのデータベースの名前を指定します。
+ `--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` - ユーザー名を指定します。このパラメータの 2 回目の使用では、`--host` パラメータによって識別された MySQL DB インスタンスのデフォルトデータベースのユーザーアカウントの名前を指定します。
+ `--port port_number` – MySQL DB インスタンスのポートを指定します。DB インスタンスの作成時に値を変更していない限り、デフォルトでは 3306 です。
+ `--host host_name`​ — Amazon RDS DB インスタンスのエンドポイント、例えば からのドメインネームシステム (DNS) 名を指定します。`myinstance.123456789012.us-east-1.rds.amazonaws.com`エンドポイントの値は、Amazon RDS コンソールの DB インスタンスの詳細で確認できます。
+ `-pRDS_password` - パスワードを指定します。このパラメータの 2 回目の使用では、2 回目の `-u` パラメータにより識別されるユーザーアカウントのパスワードを指定します。

Amazon RDS データベースで、ストアドプロシージャ、トリガー、関数、イベントを必ず手動で作成してください。コピーするデータベースにこれらのオブジェクトのいずれかが含まれる場合は、`mysqldump` の実行時に除外します。これを行うには、`mysqldump` コマンドに次のパラメータを含めます。
+ `--routines=0`
+ `--triggers=0`
+ `--events=0`

**例**

次の例では、ローカルホストにある `world` サンプルデータベースを、RDS for MySQL DB インスタンスにコピーします。値を自分の情報に置き換えます。

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 プログラムメニューの **[コマンドプロンプト]** を右クリックし、**[管理者として実行]** を選択して開いたコマンドプロンプトで次のコマンドを実行します。値を自分の情報に置き換えます。

```
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
```

**注記**  
セキュリティのベストプラクティスとして、例に表示されているプロンプト以外の認証情報を指定します。

# ダウンタイムを短縮して Amazon RDS for MySQL データベースにデータをインポートする
<a name="mysql-importing-data-reduced-downtime"></a>

場合によっては、ライブアプリケーションをサポートする外部の MySQL データベースから RDS for MySQL DB インスタンス、または RDS for MySQL マルチ AZ DB クラスターにデータをインポートする必要があります。次の手順を使用して、アプリケーションの可用性への影響を最小限に抑えることができます。この手順は、巨大なデータベースを使用する場合にも役立ちます。この手順を使用すると、ネットワーク経由で AWS に渡されるデータ量を削減することで、インポートのコストを削減できます。

この手順では、データベースデータのコピーを Amazon EC2 インスタンスに送信し、そのデータを新しい Amazon RDS データベースにインポートします。次に、レプリケーションを使用して、Amazon RDS データベースをライブ外部インスタンスで最新の状態にした後、アプリケーションを Amazon RDS データベースにリダイレクトします。バイナリログの調整に基づいてレプリケーションを設定します。

**注記**  
RDS for MySQL DB インスタンスにデータをインポートする際、シナリオでサポートされている場合は、バックアップファイルと Amazon S3 を使用して、Amazon RDS との間でデータを移動することをお勧めします。詳細については、「[Amazon RDS for MySQL DB インスタンスへのバックアップの復元](MySQL.Procedural.Importing.md)」を参照してください。

次の図は、外部 MySQL データベースを Amazon RDS 上の MySQL データベースにインポートする様子を示しています。

![\[外部 MySQL データベースを Amazon RDS 上の MySQL データベースにインポートするワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_1.png)


## タスク 1: 既存のデータベースのコピーを作成する
<a name="mysql-importing-data-reduced-downtime-copy-database"></a>

最小限のダウンタイムで RDS for MySQL データベースに大量のデータを移行するプロセスでは、最初のステップとしてソースデータのコピーを作成します。

次の図は、MySQL データベースのバックアップの作成を示しています。

![\[MySQL データベースのバックアップを作成するワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_2.png)


SQL 形式または区切り文字付きテキスト形式でデータベースのバックアップを作成するには、`mysqldump` ユーティリティを使用できます。非運用環境で各形式のテスト実行を行って、どちらの方法が `mysqldump` の実行時間が短いか確認することをお勧めします。

また、ロードに区切り文字付きテキスト形式を使用することでもたらされるメリットに対して、`mysqldump` のパフォーマンスの重み付けをすることをお勧めします。区切り文字付きテキスト形式を使用したバックアップでは、ダンプされる各テーブルについてタブ区切りテキストファイルを作成されます。データベースのインポートに必要な時間を短縮するため、`LOAD DATA LOCAL INFILE` コマンドを使用してこれらのファイルを同時にロードできます。詳細については、任意のソースからデータをインポートする手順の「[ステップ 5: データをロードする](mysql-importing-data-any-source.md#mysql-importing-data-any-source-load-data)」を参照してください。

バックアップ操作をスタートする前に、Amazon RDS にコピーする MySQL データベースでレプリケーションのオプションを設定してください。レプリケーションのオプションには、バイナリログ記録の有効化や一意のサーバー ID の設定が含まれます。これらのオプションを設定すると、サーバーはデータベーストランザクションのログ作成をスタートし、このプロセスの後でこのサーバーをソースレプリケーションインスタンスにするために準備します。

次の推奨事項と考慮事項に注意してください。
+ `--single-transaction` オプションは、データベースの一貫した状態をダンプするため、`mysqldump` と共に使用します。有効なダンプファイルを確保するために、`mysqldump` の実行中はデータ定義言語 (DDL) ステートメントを実行しないでください。これらのオペレーションに対してメンテナンスウィンドウをスケジュールできます。
+ ダンプファイルから次のスキーマを除外します。
  + `sys`
  + `performance_schema`
  + `information_schema`

  `mysqldump` ユーティリティを使用すると、これらのスキーマをデフォルトで除外できます。
+ ユーザーや権限を移行する必要がある場合は、再作成するデータ制御言語 (DCL) を生成するツールの使用を検討します。例えば、[pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) ユーティリティがあります。

### レプリケーションオプションを設定するには
<a name="mysql-importing-data-reduced-downtime-set-replication-options"></a>

1. `my.cnf` ファイルを編集します。​このファイルは `/etc` にあります。

   ```
   sudo vi /etc/my.cnf
   ```

   `log_bin` オプションと `server_id` オプションを `[mysqld]` に追加します。`log_bin` オプションは、バイナリログファイルのファイル名識別子を提供します。`server_id` オプションは、ソースとレプリカの関係のサーバーに一意の識別子を提供します。

   次の例は、`my.cnf` ファイルの更新された `[mysqld]` セクションを示しています。

   ```
   [mysqld]
   log-bin=mysql-bin
   server-id=1
   ```

   詳細については、MySQL ドキュメントの「[Setting the Replication Source Configuration](https://dev.mysql.com/doc/refman/8.4/en/replication-howto-masterbaseconfig.html)」を参照してください。

1. マルチ AZ DB クラスターでのレプリケーションでは、`ENFORCE_GTID_CONSISTENCY` および `GTID_MODE` パラメータを `ON` に設定します。

   ```
   mysql> SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
   ```

   ```
   mysql> SET @@GLOBAL.GTID_MODE = ON;
   ```

   これらの設定は、DB インスタンスでのレプリケーションには必要ありません。

1. `mysql` サービスを再起動します。

   ```
   sudo service mysqld restart
   ```

### 既存のデータベースのバックアップコピーを作成するには
<a name="mysql-importing-data-reduced-downtime-create-backup"></a>

1. `mysqldump` ユーティリティを使用し、SQL 形式または区切り文字付きテキスト形式を指定して、データのバックアップを作成します。

   MySQL 8.0.25 以前のバージョンでは、サーバー間のレプリケーションを開始するために使用できるバックアップファイルを作成するには、`--master-data=2` を指定します。MySQL 8.0.26 以降のバージョンでは、サーバー間のレプリケーションを開始するために使用できるバックアップファイルを作成するには、`--source-data=2` を指定します。詳細については、MySQL ドキュメントの「[mysqldump — A Database Backup Program](https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html)」を参照してください。

   パフォーマンスを向上させ、データ整合性を確保するために、`mysqldump` で `--order-by-primary` オプションと `--single-transaction` オプションを使用します。

   MySQL システムデータベースをバックアップに含めないためには、`mysqldump` で `--all-databases` オプションを使用しないでください。詳細については、MySQL ドキュメントの「[Creating a Data Snapshot Using mysqldump](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto-mysqldump.html)」を参照してください。

   バックアップファイルが作成されるディレクトリを書き込み可能にするために、必要に応じて `chmod` を使用します。
**重要**  
Windows で、管理者としてコマンドウィンドウを実行します。
   + SQL 出力を作成するには、次のコマンドを使用します。

     Linux、macOS、Unix の場合:

     ```
     sudo mysqldump \
         --databases database_name \
         --master-data=2  \
         --single-transaction \
         --order-by-primary \
         -r backup.sql \
         -u local_user \
         -ppassword
     ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定します。

     Windows の場合:

     ```
     mysqldump ^
         --databases database_name ^
         --master-data=2  ^
         --single-transaction ^
         --order-by-primary ^
         -r backup.sql ^
         -u local_user ^
         -ppassword
     ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定します。
   + 区切り文字付きテキスト出力を作成するには、次のコマンドを使用します。

     Linux、macOS、Unix の場合:

     ```
     sudo mysqldump \
         --tab=target_directory \
         --fields-terminated-by ',' \
         --fields-enclosed-by '"' \
         --lines-terminated-by 0x0d0a \
         database_name \
         --master-data=2 \
         --single-transaction \
         --order-by-primary \
         -ppassword
     ```

     Windows の場合:

     ```
     mysqldump ^
         --tab=target_directory ^
         --fields-terminated-by "," ^
         --fields-enclosed-by """ ^
         --lines-terminated-by 0x0d0a ^
         database_name ^
         --master-data=2 ^
         --single-transaction ^
         --order-by-primary ^
         -ppassword
     ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定します。  
Amazon RDS データベースで、ストアドプロシージャ、トリガー、関数、イベントを必ず手動で作成してください。コピーするデータベースにこれらのオブジェクトのいずれかが含まれる場合は、`mysqldump` の実行時に除外します。これを行うには、`mysqldump` コマンドで以下の引数を含めます。  
`--routines=0`
`--triggers=0`
`--events=0`

     MySQL 8.0.22 以前のバージョンでは、`mysqldump` を実行して区切りテキスト形式を指定すると、`CHANGE MASTER TO` コメントが返されます。このコメントには、マスターログのファイル名と場所が含まれます。MySQL 8.0.23 以降のバージョンでは、区切りテキスト形式を使用して `mysqldump` を実行すると、`CHANGE REPLICATION SOURCE TO` コメントが返されます。このコメントには、ソースログファイルの名前と位置が含まれます。外部インスタンスが MySQL 8.0.23 以降の場合は、`MASTER_LOG_FILE` および `MASTER_LOG_POS` の値を書き留めてください。これらの値は、レプリケーションを設定するときに必要です。

     MySQL 8.0.22 以前のバージョンでは、次の出力が返されます。

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;
     ```

     MySQL 8.0.23 以降のバージョンでは、次の出力が返されます。

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE SOURCE TO SOURCE_LOG_FILE='mysql-bin-changelog.000031', SOURCE_LOG_POS=107;
     ```

     MySQL 8.0.22 以前のバージョンで SQL 形式を使用している場合は、バックアップファイル内の `CHANGE MASTER TO` コメントでマスターログファイル名と位置を取得できます。MySQL 8.0.23 以降のバージョンで SQL 形式を使用している場合は、バックアップファイル内の `CHANGE REPLICATION SOURCE TO` コメントでソースログファイル名と位置を取得できます。

1. Amazon RDS データベースにデータをコピーするために必要なネットワークリソースの量を減らすために、コピーされたデータを圧縮します。バックアップファイルのサイズをメモします。この情報は、作成する Amazon EC2 インスタンスの大きさを決定するときに必要です。作業が終了したら、GZIP または任意の圧縮ユーティリティを使用してバックアップファイルを圧縮します。
   + SQL 出力を圧縮するには、次のコマンドを使用します。

     ```
     gzip backup.sql
     ```
   + 区切り文字付きテキスト出力を圧縮するには、次のコマンドを使用します。

     ```
     tar -zcvf backup.tar.gz target_directory
     ```

## タスク 2: Amazon EC2 インスタンスを作成し、圧縮したデータベースをコピーする
<a name="mysql-importing-data-reduced-downtime-create-ec2-copy-database"></a>

圧縮したデータベースのバックアップファイルを Amazon EC2 インスタンスにコピーする場合、データベースインスタンス間で非圧縮データを直接コピーするよりも必要なネットワークリソースは少なくなります。データを Amazon EC2 にコピーしたら、そこから MySQL データベースに直接コピーできます。ネットワークリソースのコストを節約するには、Amazon EC2 インスタンスが Amazon RDS DB インスタンスと同じ AWS リージョンに存在している必要があります。Amazon EC2 インスタンスを Amazon RDS データベースと同じ AWS リージョンに配置することで、インポート時のネットワークレイテンシーも低減されます。

次の図は、Amazon EC2 インスタンスへのデータベースバックアップのコピーを示しています。

![\[データベースのバックアップを Amazon EC2 インスタンスにコピーするワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_3.png)


### Amazon EC2 インスタンスを作成し、データをコピーするには
<a name="mysql-importing-data-reduced-downtime-create-ec2"></a>

1. Amazon RDS データベースを作成する予定の AWS リージョンに、仮想プライベートクラウド (VPC)、VPC セキュリティグループ、および VPC サブネットを作成します。VPC セキュリティグループのインバウンドルールで、アプリケーションが AWS に接続するために必要な IP アドレスを許可していることを確認します。IP アドレスの範囲 (`203.0.113.0/24` など) や別の VPC セキュリティグループを指定できます。[Amazon VPC コンソール](https://console.aws.amazon.com/vpc)を使用して、VPC、サブネット、セキュリティグループを作成および管理できます。詳細については、「*Amazon Virtual Private Cloud ユーザーガイド*」の「[Amazon VPC の開始方法](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html#getting-started)」を参照してください。

1. [Amazon EC2 管理コンソール](https://console.aws.amazon.com/ec2)を開き、Amazon EC2 インスタンスと Amazon RDS データベースの両方が含まれる AWS リージョンを選択します。ステップ 1 で作成した VPC、サブネット、セキュリティグループを使用して Amazon EC2 インスタンスを起動します。非圧縮の場合のデータベースバックアップファイルに十分なストレージを備えたインスタンスタイプを選択していることを確認します。Amazon EC2 インスタンスの詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の「[Amazon EC2 の使用を開始する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)」を参照してください。

1. Amazon EC2 インスタンスから Amazon RDS データベースに接続するには、VPC セキュリティグループを編集します。EC2 インスタンスのプライベート IP アドレスを指定するインバウンドルールを追加します。このプライベート IP アドレスは、EC2 コンソールウィンドウの [**Instance**] ペインの [**Details**] タブで確認できます。VPC セキュリティグループを編集してインバウンドルールを追加するには、EC2 コンソールのナビゲーションペインの **[Security Groups]** (セキュリティグループ) でセキュリティグループを選択してから、EC2 インスタンスのプライベート IP アドレスを指定して MySQL または Aurora のインバウンドルールを追加します。VPC セキュリティグループにインバウンドルールを追加する方法については、「*Amazon Virtual Private Cloud ユーザーガイド*」の「[セキュリティグループのルール](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)」を参照してください。

1. ローカルシステムから Amazon EC2 インスタンスに、圧縮されたデータベースバックアップファイルをコピーします。必要に応じて `chmod` を使用して、Amazon EC2 インスタンスのターゲットディレクトリに対する書き込みアクセス許可があることを確認します。`scp` または Secure Shell (SSH) クライアントを使用してファイルをコピーできます。以下は `scp` コマンドの例です。

   ```
   scp -r -i key pair.pem backup.sql.gz ec2-user@EC2 DNS:/target_directory/backup.sql.gz
   ```
**重要**  
機密データをコピーするときは、必ず安全なネットワーク転送プロトコルを使用してください。

1. Amazon EC2 インスタンスに接続し、次のコマンドを使用して最新のアップデートと MySQL クライアントツールをインストールします。

   ```
   sudo yum update -y
   sudo yum install mysql -y
   ```

   詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の Linux インスタンスの「[インスタンスをクリーンアップする](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)」を参照してください。
**重要**  
この例では、MySQL クライアントを Amazon Linux ディストリビューションの Amazon マシンイメージ (AMI) にインストールします。この例では、Ubuntu や Red Hat Enterprise Linux などの別のディストリビューションには MySQL クライアントをインストールできません。MySQL のインストールの詳細については、MySQL ドキュメントの「[Installing MySQL](https://dev.mysql.com/doc/refman/8.4/en/installing.html)」を参照してください。

1. Amazon EC2 インスタンスに接続されている間に、データベースバックアップファイルを解凍します。次のコマンドはその例です。
   + SQL 出力を解凍するには、次のコマンドを使用します。

     ```
     gzip backup.sql.gz -d
     ```
   + 区切り文字付きテキスト出力を解凍するには、次のコマンドを使用します。

     ```
     tar xzvf backup.tar.gz
     ```

## タスク 3: MySQL データベースを作成し、Amazon EC2 インスタンスからデータをインポートする
<a name="mysql-importing-data-reduced-downtime-create-database-import-data"></a>

Amazon EC2 インスタンスと同じ AWS リージョンに RDS for MySQL DB インスタンス、または RDS for MySQL マルチ AZ DB クラスターを作成することにより、Amazon EC2 からのデータベースのバックアップファイルをインターネット経由よりも速くインポートできます。

次の図は、Amazon EC2 インスタンスから MySQL データベースにバックアップをインポートする様子を示しています。

![\[EC2 インスタンスから MySQL データベースにバックアップをインポートするワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_4.png)


### MySQL データベースを作成し、データをインポートするには
<a name="mysql-importing-data-reduced-downtime-create-database"></a>

1. この Amazon RDS データベースについて予想されるワークロードをサポートするのに必要な DB インスタンスクラスとストレージ領域の容量を決定します。このプロセスの一環として、データロードの手順に十分な領域と処理能力を決定します。また、本番稼働ワークロードの処理に必要なものも決定します。これは、ソースの MySQL データベースのサイズおよびリソースに基づいて見積もることができます。詳細については、「[ DB インスタンスクラス](Concepts.DBInstanceClass.md)」を参照してください。

1. Amazon EC2 インスタンスを含む AWS リージョンに、DB インスタンスまたはマルチ AZ DB クラスターを作成します。

   RDS for MySQL マルチ AZ DB クラスターを作成するには、「[Amazon RDS 用のマルチ AZ DB クラスターの作成](create-multi-az-db-cluster.md)」の手順に従います。

   RDS for MySQL DB インスタンスを作成するには、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」の手順に従い、以下のガイドラインに従ってください。
   + ソース DB インスタンスと互換性のある DB エンジンのバージョンを指定します。
   + Amazon EC2 インスタンスと同じ仮想プライベートクラウド (VPC) と VPC セキュリティグループを指定します。これにより、Amazon EC2 インスタンスと Amazon RDS インスタンスはネットワーク上で相互に表示されることが確認できます。DB インスタンスがパブリックにアクセスできることを確認してください。以下のセクションで説明するように、ソースデータベースでレプリケーションをセットアップするには、DB インスタンスにパブリックアクセス可能である必要があります。
   + データベースのバックアップのインポートが完了するまで、複数のアベイラビリティーゾーン、バックアップ保持、リードレプリカを設定しないでください。インポートが完了したら、本稼働インスタンスについて、マルチ AZ とバックアップ保持を設定できます。

1. Amazon RDS データベースのデフォルトの設定オプションを確認します。データベースのデフォルトパラメータグループに必要な設定オプションがない場合は、別のパラメータグループを検索するか、新しいパラメータグループを作成します。パラメータグループの作成の詳細については、「[Amazon RDS のパラメータグループ](USER_WorkingWithParamGroups.md)」を参照してください。

1. マスターユーザーとして、新しい Amazon RDS データベースに接続します。DB インスタンスにアクセスする必要がある管理者、アプリケーション、およびサービスのサポートに必要なユーザーを作成します。Amazon RDS データベースのホスト名は、この DB インスタンスの **[エンドポイント]** の値からポート番号を除いた値 (例: `mysampledb.123456789012.us-west-2.rds.amazonaws.com`) です。エンドポイントの値は、Amazon RDS コンソールのデータベースの詳細で確認できます。

1. Amazon EC2 インスタンスに接続します。詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の Linux インスタンスの「[インスタンスをクリーンアップする](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)」を参照してください。

1. `mysql` コマンドを使用して、Amazon EC2 インスタンスからリモートホストとして Amazon RDS データベースに接続します。コマンドの例を次に示します。

   ```
   mysql -h host_name -P 3306 -u db_master_user -p
   ```

   *host\$1name* は、Amazon RDS データベースのエンドポイントです。

1. `mysql` プロンプトで、データベースダンプファイルの名前を渡して `source` コマンドを実行します。このコマンドは、Amazon RDS DB インスタンスにデータをロードします。
   + SQL 形式の場合は、次のコマンドを使用します。

     ```
     mysql> source backup.sql;
     ```
   + 区切り文字付きテキスト形式の場合は、Amazon RDS データベースをセットアップしたときに作成したデフォルトのデータベースではない場合、まず、データベースを作成します。

     ```
     mysql> create database database_name;
     mysql> use database_name;
     ```

     次にテーブルを作成します。

     ```
     mysql> source table1.sql
     mysql> source table2.sql
     etc...
     ```

     次にデータをインポートします。

     ```
     mysql> LOAD DATA LOCAL INFILE 'table1.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     mysql> LOAD DATA LOCAL INFILE 'table2.txt' INTO TABLE table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     etc...
     ```

     パフォーマンスを向上させるために、複数の接続からこれらのオペレーションをパラレル実行して、すべてのテーブルを同時に作成およびロードすることができます。
**注記**  
最初にテーブルをダンプした際、`mysqldump` でデータをフォーマットするオプションを使用した場合は、データファイルのコンテンツが適切に解釈できるように、`LOAD DATA LOCAL INFILE` でも必ず同じオプションを使用する必要があります。

1. インポートしたデータベースの単一のテーブルまたは 2 つのテーブルに対してシンプルな `SELECT` クエリを実行して、インポートが正常に完了したかを検証します。

この手順で使用された Amazon EC2 インスタンスが今後不要な場合は、EC2 インスタンスを終了して、AWS リソース使用率を減らします。EC2 インスタンスを終了するには、「*Amazon Elastic Compute Cloud ユーザーガイド*」の「[インスタンスの終了](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console)」を参照してください。

## タスク 4: 外部データベースから新しい Amazon RDS データベースにデータをレプリケートする
<a name="mysql-importing-data-reduced-downtime-replicate-data"></a>

ソースデータベースは、データをコピーして MySQL データベースに転送するまでに更新された可能性があります。その場合は、レプリケーションを使用して、コピーしたデータベースをソースデータベースで最新のものにすることができます。

![\[外部 MySQL データベースから Amazon RDS 上のデータベースにデータをレプリケートするワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_5.png)


Amazon RDS データベースでレプリケーションを開始するために必要なアクセス許可は限定されており、Amazon RDS マスターユーザーは利用できません。このため、メジャーエンジンバージョンに適した Amazon RDS ストアドプロシージャを使用します。
+ [mysql\$1rds\$1set\$1external\$1master (RDS for MySQL メジャーバージョン 8.0 以前)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 
+ [mysql.rds\$1set\$1external\$1source (RDS for MySQL メジャーバージョン 8.4 以降)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source)
+ レプリケーションを設定するには [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md)、レプリケーションを開始するには [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication)

### レプリケーションをスタートするには
<a name="mysql-importing-data-reduced-downtime-start-replication"></a>

タスク 1 の[レプリケーションオプションの設定時に](#mysql-importing-data-reduced-downtime-set-replication-options)、バイナリログ記録を有効にし、ソースデータベースに一意のサーバー ID を設定しました。これで、ライブデータベースをソースレプリケーションインスタンスとして、Amazon RDS データベースをレプリカとしてセットアップできます。

1. Amazon RDS コンソールで、ソースデータベースをホストするサーバーの IP アドレスを Amazon RDS データベースの VPC セキュリティグループに追加します。VPC セキュリティグループの詳細については、「*Amazon Virtual Private Cloud ユーザーガイド*」の「[セキュリティグループのルールを設定する](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)」を参照してください。

   ソースインスタンスと通信できるためには、Amazon RDS データベースの IP アドレスからの接続を許可するようにローカルネットワークを設定することも必要になる場合があります。Amazon RDS データベースの IP アドレスを確認するには、`host` コマンドを使用します。

   ```
   host host_name
   ```

   *host\$1name* は、Amazon RDS データベースのエンドポイントの DNS 名 (例: `myinstance.123456789012.us-east-1.rds.amazonaws.com`) です。エンドポイントの値は、Amazon RDS コンソールの DB インスタンスの詳細で確認できます。

1. 選択したクライアントを使用して、ソースインスタンスに接続し、レプリケーションに使用するユーザーを作成します。このアカウントはレプリケーション専用に使用され、セキュリティを強化するためにドメインに制限する必要があります。コマンドの例を次に示します。

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

1. ソースインスタンスについて、`REPLICATION CLIENT` と `REPLICATION SLAVE` の特権をレプリケーションユーザーに付与します。たとえば、すべてのデータベースに対する `REPLICATION CLIENT` と `REPLICATION SLAVE` の特権を、「`repl_user`」ユーザーに付与するには、次のコマンドを実行します。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

1. Amazon RDS データベースをレプリカにします。マスターユーザーとして Amazon RDS データベースに接続し、適切な Amazon RDS ストアドプロシージャを使用して、ソースデータベースをソースレプリケーションインスタンスとして指定します。
   + [mysql\$1rds\$1set\$1external\$1master (RDS for MySQL メジャーバージョン 8.0 以前)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master)
   + [mysql.rds\$1set\$1external\$1source (RDS for MySQL メジャーバージョン 8.4 以降)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source)

   SQL 形式のバックアップファイルがある場合は、ステップ 4 で確認したマスターログのファイル名とマスターログの位置を使用します。区切り文字テキスト形式を使用した場合は、バックアップファイルの作成時に決定した名前と場所を使用します。次のコマンドはその例です。

   **MySQL バージョン 8.4 以降**

   ```
   CALL mysql.rds_set_external_source ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```

   **MySQL 8.0 以前のバージョン**

   ```
   CALL mysql.rds_set_external_master ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**注記**  
セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

1. Amazon RDS データベースでレプリケーションを開始するには、[mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) ストアドプロシージャを使用する次のコマンドを実行します。

   ```
   CALL mysql.rds_start_replication;
   ```

1. Amazon RDS データベースで、レプリカがいつソースレプリケーションインスタンスの最新の状態に更新されるかを特定するには、[SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) コマンドを実行します。`SHOW REPLICA STATUS` コマンドの結果には、`Seconds_Behind_Master` フィールドが含まれます。`Seconds_Behind_Master` フィールドが 0 を返す場合、レプリカはソースレプリケーションインスタンスで最新の状態になります。
**注記**  
MySQL の旧バージョンは、`SHOW REPLICA STATUS` ではなく `SHOW SLAVE STATUS` を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、`SHOW SLAVE STATUS` を使用します。

1. Amazon RDS データベースが最新の状態になったら、必要に応じてデータベースを復元できるように、自動バックアップを有効にします。[Amazon RDS コンソール](https://console.aws.amazon.com/rds/)を使用して、Amazon RDS データベースの自動バックアップを有効化または変更できます。詳細については、「[バックアップの概要](USER_WorkingWithAutomatedBackups.md)」を参照してください。

## タスク 5: ライブアプリケーションを Amazon RDS インスタンスにリダイレクトする
<a name="mysql-importing-data-reduced-downtime-redirect-app"></a>

MySQL データベースがソースレプリケーションインスタンスで最新の状態になったら、ライブアプリケーションを更新して、Amazon RDS インスタンスを使用できます。

![\[レプリケーションを停止し、ライブアプリケーションを Amazon RDS 上のデータベースにリダイレクトするワークフロー。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_6.png)


### ライブアプリケーションを MySQL データベースにリダイレクトしてレプリケーションを停止するには
<a name="mysql-importing-data-reduced-downtime-redirect-app-stop-app"></a>

1. Amazon RDS データベースの VPC セキュリティグループを追加するには、アプリケーションをホストするサーバーの IP アドレスを追加します。VPC セキュリティグループの変更の詳細については、「*Amazon Virtual Private Cloud ユーザーガイド*」の「[セキュリティグループのルールを設定する](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)」を参照してください。

1. [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) コマンドの結果の `Seconds_Behind_Master` フィールドが 0 であることを確認します。この値は、レプリカがソースレプリケーションインスタンスの最新の状態であることを示します。

   ```
   SHOW REPLICA STATUS;
   ```
**注記**  
MySQL の旧バージョンは、`SHOW REPLICA STATUS` ではなく `SHOW SLAVE STATUS` を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、`SHOW SLAVE STATUS` を使用します。

1. トランザクションが終了したら、ソースへのすべての接続を閉じます。

1. Amazon RDS データベースを使用するようにアプリケーションを更新します。この更新には、一般に、Amazon RDS データベースのホスト名とポート、接続に使用するユーザーアカウントとパスワード、および使用するデータベースを識別する接続設定の変更が含まれます。

1. DB インスタンスに接続します。

   マルチ AZ DB クラスターの場合は、ライター DB インスタンスに接続します。

1. [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) ストアドプロシージャを使用する次のコマンドを実行して、Amazon RDS インスタンスのレプリケーションを停止します。

   ```
   CALL mysql.rds_stop_replication;
   ```

1. Amazon RDS データベースで適切な Amazon RDS ストアドプロシージャを使用して、このインスタンスがレプリカとして識別されないようにレプリケーション設定をリセットします。
   +  [mysql\$1rds\$1reset\$1external\$1master (RDS for MySQL メジャーバージョン 8.0 以前)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 
   + [mysql.rds\$1reset\$1external\$1source (RDS for MySQL メジャーバージョン 8.4 以降)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_source)

   **MySQL バージョン 8.4 以降**

   ```
   CALL mysql.rds_reset_external_source;
   ```

   **MySQL 8.0 以前のバージョン**

   ```
   CALL mysql.rds_reset_external_master;
   ```

1. マルチ AZ のサポートやリードレプリカなど、Amazon RDS のその他の機能を有効にします。詳細については、「[Amazon RDS でのマルチ AZ 配置の設定と管理](Concepts.MultiAZ.md)」および「[DB インスタンスのリードレプリカの操作](USER_ReadRepl.md)」を参照してください。

# 任意のソースから Amazon RDS for MySQL DB インスタンスにデータをインポートする
<a name="mysql-importing-data-any-source"></a>

Amazon RDS を使用すると、既存の MySQL データを任意のソースから RDS for MySQL DB インスタンスに移行できます。オンプレミスデータベース、他のクラウドプロバイダー、または既存の RDS for MySQL DB インスタンスからターゲット RDS for MySQL DB インスタンスにデータを転送できます。この機能を使用すると、データベースの統合、ディザスタリカバリソリューションの実装、セルフマネージド型データベースからの移行を行うことができます。一般的なシナリオには、セルフホスト型 MySQL サーバーからフルマネージド型の Amazon RDS DB インスタンスへの移行、複数の MySQL データベースの 1 つの DB インスタンスへの統合、本番データを使用したテスト環境の作成などがあります。以下のセクションでは、`mysqldump`、バックアップファイル、レプリケーションなどのメソッドを使用して MySQL データをインポートする詳細な手順について説明します。

## ステップ 1: ロードするデータを含むフラットファイルを作成する
<a name="mysql-importing-data-any-source-create-flat-files"></a>

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

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

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

Unix のようなシステム (Linux など) では、`split` コマンドを使用します。例えば、次のコマンドでは `sales.csv` ファイルが 1 GiB 未満の複数のファイルに分割されます。ただし、分割されるのは改行でのみです (-C 1024m)。新しいファイルの名前には、昇順の数値サフィックスが含まれます。次のコマンドは、`sales.part_00` や `sales.part_01` などの名前のファイルを生成します。

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

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

フラットファイルはどこにでも保存できます。ただし、[ステップ 5](#mysql-importing-data-any-source-load-data) でデータをロードするときは、ファイルが存在するのと同じ場所から `mysql` シェルを呼び出すか、`LOAD DATA LOCAL INFILE` の実行時にファイルの絶対パスを使用する必要があります。

## ステップ 2: ターゲット DB インスタンスにアクセスしているすべてのアプリケーションを停止する
<a name="mysql-importing-data-any-source-stop-apps"></a>

大きなロードをスタートする前に、ロード先のターゲット DB インスタンスにアクセスするすべてのアプリケーションアクティビティを停止します。特に、他のセッションでロード中のテーブルや参照するテーブルを変更する場合は、これをお勧めします。これにより、ロード中に発生する制約違反のリスクが軽減され、ロードパフォーマンスが向上します。また、ロードに関係しないプロセスによって行われた変更を失うことなく、DB インスタンスをロードの直前の時点に復元することもできます。

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

## ステップ 3: DB スナップショットを作成する
<a name="mysql-importing-data-any-source-create-snapshot"></a>

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

ロード直前に DB スナップショットを作成すると、必要が生じた場合にデータベースをロード前の状態に復元できます。ロード直後に DB スナップショットを作成しておくと、何らかの事故のときにそのスナップショットを使用すれば、データを再ロードせずに済みます。ロード後に DB スナップショットを使用して、新しいデータベースインスタンスにデータをインポートすることもできます。

次の例では、AWS CLI の [create-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-snapshot.html) コマンドを実行して、`AcmeRDS` インスタンスの DB スナップショットを作成し、その DB スナップショットに識別子 `"preload"` を指定します。

Linux、macOS、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
```

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

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

例えば、リハーサルや他のテスト用の DB インスタンスを作成するには、DB インスタンスに独自の識別子を指定します。この例での識別子は「`AcmeRDS-2`」です。この例では、`AcmeRDS-2` に関連付けられたエンドポイントを使用して DB インスタンスに接続します。詳細については、「[restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)」を参照してください。

Linux、macOS、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
```

既存のエンドポイントを再利用するには、まず DB インスタンスを削除してから、復元されたデータベースに同じ識別子を指定します。詳細については、「[delete-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance.html)」を参照してください。

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

Linux、macOS、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 自動バックアップをオフにする
<a name="mysql-importing-data-any-source-turn-off-automated-backups"></a>

**警告**  
ポイントインタイムリカバリを実行する必要がある場合は、自動バックアップをオフにしないでください。

自動バックアップをオフにすると、パフォーマンスが最適化します。これはデータのロードに必須ではありません。自動バックアップをオフにすると、既存のバックアップがすべて消去されます。その結果、自動バックアップをオフにすると、ポイントインタイムリカバリができなくなります。自動バックアップを無効にしても、手動 DB スナップショットに影響が及ぶことはありません。既存のすべての手動 DB スナップショットは引き続き復元で使用可能です。

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

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

AWS CLI の `modify-db-instance` コマンドを実行し、バックアップ保持期間を 0 に設定して変更をすぐに適用します。保持期間を 0 に設定するには DB インスタンスを再起動する必要があるため、続行前に再起動が完了するまで待っています。詳細については、「[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)」を参照してください。

Linux、macOS、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](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) コマンドで DB インスタンスのステータスを確認できます。次の例では、`AcmeRDS` DB インスタンスにおける DB インスタンスのステータスを表示します。

```
aws rds describe-db-instances --db-instance-identifier AcmeRDS --query "*[].{DBInstanceStatus:DBInstanceStatus}"
```

DB インスタンスのステータスが `available` になったら、次のステップに進む準備が整いました。

## ステップ 5: データをロードする
<a name="mysql-importing-data-any-source-load-data"></a>

フラットファイルから行を読み取ってデータベーステーブルにロードするには、MySQL の `LOAD DATA LOCAL INFILE` ステートメントを使用します。

**注記**  
フラットファイルが存在するのと同じ場所から `mysql` シェルを呼び出すか、`LOAD DATA LOCAL INFILE` の実行時にファイルの絶対パスを使用する必要があります。

次の例は、`sales.txt` という名前のファイルからデータベース内の `Sales` という名前のテーブルにデータをロードする方法を示しています。

```
mysql> LOAD DATA LOCAL INFILE 'sales.txt' INTO TABLE Sales FIELDS TERMINATED BY ' ' ENCLOSED BY '' ESCAPED BY '\\';
Query OK, 1 row affected (0.01 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 0
```

`LOAD DATA` ステートメントの詳細については、「MySQL ドキュメント」の「[LOAD DATA Statement](https://dev.mysql.com/doc/refman/8.4/en/load-data.html)」を参照してください。

## ステップ 6: Amazon RDS 自動バックアップを再度オンにする
<a name="mysql-importing-data-any-source-turn-on-automated-backups"></a>

[ステップ 4](#mysql-importing-data-any-source-turn-off-automated-backups) で Amazon RDS 自動バックアップをオフにした場合は、ロードが完了したら、バックアップ保持期間をロード前の値に戻して、自動バックアップをオンにします。ステップ 4 で説明したように、Amazon RDS は DB インスタンスを再起動するため、短時間の停止に備えてください。

次の例では、AWS CLI の [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) コマンドを実行して、`AcmeRDS` DB インスタンスの自動バックアップをオンにします。保持期間は 1 日に設定します。

Linux、macOS、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
```