Amazon RDS での MySQL
Amazon RDS では、MySQL の複数のバージョンを実行する DB インスタンスがサポートされています。まず、Amazon RDS の管理ツールまたはインターフェイスを使用して Amazon RDS MySQL DB インスタンスを作成します。その後、DB インスタンスの再設定、DB インスタンスへの接続の許可、バックアップやスナップショットの作成やそれらからの復元、マルチ AZ セカンダリの作成、リードレプリカの作成、DB インスタンスのパフォーマンスのモニタリングが可能になります。標準的な MySQL のユーティリティとアプリケーションを使用して、DB インスタンスに対してデータを保存したりデータにアクセスしたりします。
以下に、Amazon RDS MySQL DB インスタンスで実行する一般的な管理タスクと各タスクについての情報へのリンクを示します。
Amazon RDS でサポートされている MySQL バージョン、ストレージエンジン、セキュリティ、機能など、計画に必要になる情報については、「Amazon RDS での MySQL の計画についての情報」を参照してください。
DB インスタンスを作成する前に、このガイドの「Amazon RDS のセットアップ」セクションの手順を完了してください。
Amazon RDS MySQL DB インスタンスを作成できます。そのためには、セキュリティグループ、DB パラメータグループ、または DB オプショングループの作成など、前提条件を満たしている必要があります。詳細については、MySQL データベースエンジンを実行する DB インスタンスの作成 を参照してください。
セキュリティグループと DB インスタンスを作成した後、MySQL のアプリケーションとユーティリティから DB インスタンスに接続できます。詳細については、MySQL データベースエンジンを実行している DB インスタンスに接続する を参照してください。
新しく作成された Amazon RDS DB インスタンスには、そのインスタンスの作成時に指定した名前の付いた 1 つの空のデータベースと、指定した名前とパスワードが設定された 1 つのマスターユーザーアカウントが用意されます。MySQL のツールまたはユーティリティを使用して、マスターユーザーとしてログインした後、MySQL のコマンドと SQL ステートメントを使用して、以下のように、アプリケーションから DB インスタンスに対してデータの保存や取得を行うすべてのユーザーと、それらの操作に必須になるすべての要素を追加する必要があります。
すべてのユーザーの ID を作成し、それらのユーザーに適切なアクセス許可を付与します。詳細については、MySQL のドキュメントの「MySQL ユーザーアカウント管理」を参照してください。
必須のデータベースとオブジェクト(テーブルやビューなど)をすべて作成します。詳細については、MySQL のドキュメントの「データ定義ステートメント」を参照してください。
データをインポートまたはエクスポートする手順を確定します。推奨されるいくつかの手順については、「MySQL DB インスタンスからのデータのインポートおよびエクスポート」を参照してください。
DB インスタンスのサイズ変更や再設定など、DB インスタンスの定期的な変更が必要になる場合があります。詳細については、MySQL データベースエンジンを実行する DB インスタンスを変更する を参照してください。各タスクの詳細については、以下のリンクを参照してください。
バックアップが自動的に作成されるように DB インスタンスを設定したり、スナップショットを手動で作成したりできます。そうすることで後で、そのバックアップまたはスナップショットからインスタンスを復元できます。詳細については、バックアップと復元 を参照してください。
MySQL ログ、CloudWatch Amazon RDS メトリックス、イベントの表示などのアクションを使用して、インスタンスをモニタリングできます。詳細については、Amazon RDS のモニタリング を参照してください。
リードレプリカを作成することで、主要な MySQL DB インスタンスから読み取りトラフィックをオフロードできます。詳細については、PostgreSQL、MySQL、および MariaDB リードレプリカの使用 を参照してください。
Amazon RDS には MySQL DB インスタンスに使用できる機能がいくつかあり、これらは Amazon RDS データベースエンジン間で共通です。詳細については、以下を参照してください。
さらに、Amazon RDS MySQL DB インスタンスの使用に役立つ情報を以下の付録で提供しています。
Amazon RDS での MySQL の計画についての情報
Topics
Amazon RDS での MySQL のバージョン
Amazon RDS で現在サポートされている MySQL のバージョンは 5.7、5.6、5.5、5.1 であり、Amazon RDS の MySQL バージョンで今後追加される予定です。毎年サポートされる新しいバージョンリリースの数は、MySQL バージョンリリースの頻度とコンテンツ、および当社のデータベース技術チームのリリース診断結果により異なります。ただし、一般的なガイダンスとして、当社では、一般公開リリースの 3 ~ 5 か月以内に新しい MySQL バージョンをサポートできるよう取り組んでいます。
MySQL のバージョン番号は、バージョン = X.Y.Z として編成されています。Amazon RDS の用語では、X.Y はメジャーバージョン番号を、Z はマイナーバージョン番号を示します。Amazon RDS 実装では、メジャーバージョン番号が変更された場合 (5.1.71 から 5.5.33 へなど)、そのバージョン変更はメジャーと考えます。マイナーバージョン番号のみが変更された場合 (5.5.31 から 5.5.33 へなど)、そのバージョン変更はマイナーと考えます。
新しい DB インスタンスを作成するときは、現在サポートされているいずれかの MySQL バージョンを指定できます。MySQL 5.7、5.6、5.5、または 5.1 のメジャーバージョンと共に、指定したメジャーバージョンのいずれかのサポートされているマイナーバージョンを指定できます。バージョンを指定しない場合、Amazon RDS では、サポートされているいずれかのバージョン、通常はデフォルトで最新のバージョンに設定されます。マイナーバージョンではなく、メジャーバージョン (MySQL 5.7 など) を指定した場合、Amazon RDS は、お客様が指定したメジャーバージョンの最新リリースをデフォルトに設定します。サポートされているバージョンの一覧と新しく作成される DB インスタンスのデフォルトを見るには、DescribeDBEngineVersions API アクションを使います。
Amazon RDS を使用して、Amazon RDS でサポートされている新しいバージョンに MySQL インスタンスをアップグレードするタイミングを制御します。特定の MySQL バージョンとの互換性を維持しながら、新しいバージョンを本稼働環境へのデプロイ前にアプリケーションに対してテストし、自分のスケジュールに最適なタイミングでバージョンアップグレードを実行できます。
お客様が指定しない限り、お客様の DB インスタンスは、新しい MySQL マイナーバージョン (Amazon RDS がサポートするバージョン) に自動的にアップグレードされます。このパッチの適用は、スケジュールされたメンテナンス時間中に行われ、事前に Amazon RDS コミュニティフォーラムで告知されます。自動バージョンアップグレードをオフにするには、AutoMinorVersionUpgrade パラメータを「false」に設定します。
スケジュールされた自動アップグレードを解除している場合は、サポートされているマイナーバージョンリリースに手動でアップグレードできます。その手順はメジャーバージョンの更新の場合と同じです。詳細については、DB インスタンスのメンテナンスとアップグレード を参照してください。
Amazon RDS では、現在、MySQL バージョン 5.5 からバージョン 5.6 へ、MySQL バージョン 5.6 からバージョン 5.7 へのメジャーバージョンアップグレードがサポートされています。メジャーバージョンアップグレードは、何らかの互換性のリスクを伴うため、自動的には行われません。DB インスタンスを変更するリクエストを行う必要があります。本稼働インスタンスのアップグレード前に、どのアップグレードも完全にテストする必要があります。DB インスタンスのアップグレードについては、「DB インスタンスのメンテナンスとアップグレード」を参照してください。
DB インスタンスを新しいバージョンに対してテストできます。そのためには、既存の DB インスタンスの DB スナップショットを作成し、DB スナップショットから復元して新しい DB インスタンスを作成した後、その新しい DB インスタンスのバージョンアップグレードを開始します。その後で、オリジナルの DB インスタンスをアップグレードするかどうかを決める前に、コピーした DB インスタンスで安全性を確かめることができます。
以下に、Amazon RDS MySQL の廃止についてのポリシーを示します。
当社ではメジャー MySQL バージョンリリース(MySQL 5.5 を含む)に対して、Amazon RDS によるサポートが開始されてから 3 年間のサポートを予定しています。
マイナー MySQL バージョンリリース (MySQL 5.5.46 など) に対しては、Amazon RDS によるサポートが開始されてから、少なくとも 1 年間のサポートを予定しています。
MySQL メジャー/マイナーバージョンが「廃止」となった後は、予定メンテナンスで自動アップグレードされる前に、ユーザーがサポート対象バージョンにアップグレードするための猶予期間を 3 か月間設けます。
MySQL 5.1 の廃止
2016 年 11 月 6 日に、Amazon RDS では MySQL バージョン 5.1 のサポートを終了します。2013 年 12 月に、MySQL Community Edition 5.1 は新しいソフトウェア、セキュリティの修正、更新を行わない継続サポートに移動しました。AWS をご利用のお客様に最適なエクスペリエンスを提供するために、バージョン 5.1 は廃止されます。
2016 年 10 月 18 日までに、MySQL バージョン 5.1 を実行している DB インスタンスを、MySQL のサポートされているバージョンのいずれかにアップグレードすることをお勧めします。Amazon RDS では、MySQL バージョン 5.5、5.6、および 5.7 がサポートされています。
Important
MySQL バージョン 5.6.4 では、日時、時刻、またはタイムスタンプ列で、MySQL バージョン 5.1 とは異なる新しい日時、時刻、またはタイムスタンプが導入されました。MySQL バージョン 5.1 の DB インスタンスをバージョン 5.5、さらにバージョン 5.6、最終的にバージョン 5.7 にアップグレードする場合、バージョン 5.6 からバージョン 5.7 へのアップグレードが遅くなる場合があります。これは、バージョン 5.7 にアップグレードするときに MySQL により、すべての日付と時刻の列のタイプが強制的に新しい形式に変換されるためです。この変換はテーブルを再作成するため、DB インスタンスのアップグレードを完了するのにかなりの時間がかかる場合があります。 日付と時刻の形式を自分で変換して、MySQL バージョン 5.7 へのアップグレードに必要な時間を短縮する方法については、「MySQL バージョン 5.7 へのアップグレードは遅くなる場合があります。」を参照してください。
MySQL バージョン 5.1 を実行する DB インスタンスをアップグレードする前に、MySQL データベースエンジンのサポートされているバージョンを実行する DB インスタンスを作成して、その DB インスタンスでアプリケーションをテストすることもできます。
新しいバージョンの MySQL を実行する DB インスタンスのテストバージョンを作成するには
MySQL 5.1 DB インスタンスのスナップショットを作成します。詳細については、「DB スナップショットの作成」を参照してください。
新しい DB インスタンスにスナップショットを復元します。詳細については、「DB スナップショットからの復元」を参照してください。
新しい DB インスタンスを MySQL のサポートされているバージョンにアップグレードします。詳細については、「MySQL DB エンジンのアップグレード」を参照してください。
以下のサイトで MySQL のサポートされているバージョンに関するリリースノートを確認できます。
MySQL バージョン 5.6 に DB インスタンスをアップグレードする場合は、まず DB インスタンスを MySQL バージョン 5.5 にアップグレードしてから、MySQL バージョン 5.6 にアップグレードする必要があります。MySQL バージョン 5.7 にアップグレードする場合は、まず DB インスタンスを MySQL バージョン 5.5 にアップグレードしてから、次にバージョン 5.6、それからバージョン 5.7 にアップグレードする必要があります。
DB インスタンスを MySQL の新しいバージョンにアップグレードする手順については、「MySQL DB エンジンのアップグレード」を参照してください。
Amazon RDS は、次のスケジュールで MySQL バージョン 5.1 のサポートを廃止します。
2016 年 8 月 9 日より後は、MySQL バージョン 5.1 を使用する DB インスタンスを作成できなくなります。
2016 年 10 月 18 日から、バージョン 5.1 を実行している MySQL DB インスタンスは、次のメンテナンスウィンドウ中にバージョン 5.5 へのアップグレードが自動的にスケジューリングされます。MySQL 5.1 DB スナップショットから復元される DB インスタンスはすべて、インスタンスのメンテナンスウィンドウにアップグレードされます。
2016 年 11 月 6 日に、MySQL バージョン 5.1 を実行するすべての DB インスタンスは、バージョン 5.5 に直ちにアップグレードされます。
MySQL の memcached オプションを使用する
ほとんどの Amazon RDS DB エンジンでは、DB インスタンスの追加機能を選択できる、オプショングループをサポートしています。MySQL バージョン 5.6 以降の DB インスタンスは、シンプルなキーベースのキャッシュである memcached オプションをサポートします。memcached オプションの詳細については、「付録: MySQL データベースエンジンのオプション」を参照してください。オプショングループの操作方法の詳細については、「オプショングループを使用する」を参照してください。
Amazon RDS でサポートされているストレージエンジン
MySQL ではさまざまな機能を備えた複数のストレージエンジンがサポートされていますが、それらのすべてのエンジンが回復性やデータ耐久性のために最適化されているわけではありません。Amazon RDS では、MySQL DB インスタンス用に InnoDB ストレージエンジンが完全にサポートされています。Amazon RDS のポイントインタイム復元やスナップショット復元などの機能では、回復可能なストレージエンジンが必要であるため、InnoDB ストレージエンジンのみがサポートされています。InnoDB memcached インターフェイスを使用するには、MySQL 5.6 以降のインスタンスを実行している必要があります。詳細については、「MySQL の memcached サポート」を参照してください。
Federated ストレージエンジンは、現在、Amazon RDS MySQL ではサポートされていません。
MyISAM ストレージエンジンでは、信頼性の高い回復がサポートされておらず、エンジンの回復後に MySQL が再起動したとき、ポイントインタイム復元またはスナップショット復元が意図したとおりに機能せず、データが紛失または破損する場合があります。それでも、Amazon RDS で MyISAM を使用することにした場合は、スナップショットがいくつかの条件下で役立つことがあります。MyISAM の制限の詳細については、「サポートされない MySQL ストレージエンジンを使用した自動バックアップ」を参照してください。
既存の MyISAM テーブルを InnoDB テーブルに変換するには、alter table コマンドを使用します (たとえば、alter table TABLE_NAME engine=innodb;)。MyISAM と InnoDB の長所と短所は異なっているため、アプリケーションで切り替えた際の影響を切り替え前に十分に評価しておく必要があることを念頭に置いてください。
Amazon RDS と MySQL のセキュリティ
Amazon RDS MySQL DB インスタンスのセキュリティは以下の 3 つのレベルで管理されます。
AWS Identity and Access Management では、どのユーザーが DB インスタンスに対して Amazon RDS の管理アクションを実行できるかを制御します。IAM 認証情報を使用して AWS に接続するとき、IAM アカウントには、Amazon RDS の管理オペレーションを実行するためのアクセス許可を付与する IAM ポリシーが必要です。詳細については、「Amazon RDS に対する認証とアクセスコントロール」を参照してください。
DB インスタンスを作成するときは、VPC セキュリティグループまたは DB セキュリティグループのいずれかを使用して、どのデバイスまたは Amazon EC2 インスタンスが DB インスタンスのエンドポイントとポートへの接続を開くことができるかを制御します。これらの接続に SSL の使用を求めることもできます。さらに、会社のファイアウォールルールでも、社内のどのデバイスが DB インスタンスへの接続を開くことができるかを制御できます。
MySQL DB インスタンスへの接続が開かれたら、ログイン認証とアクセス許可は MySQL のスタンドアロンインスタンスの場合と同じ方法で適用されます。
CREATE USER、RENAME USER、GRANT、REVOKE、SET PASSWORDなどのコマンドは、スタンドアロンデータベースの場合と同じ方法で、データベーススキーマテーブルを直接変更します。詳細については、MySQL のドキュメントの「MySQL ユーザーアカウントの管理」を参照してください。
Amazon RDS DB インスタンスを作成すると、マスターユーザーには以下のデフォルト権限が付与されます。
alteralter routinecreatecreate routinecreate temporary tablescreate usercreate viewdeletedropeventexecutegrant optionindexinsertlock tablesprocessreferencesreplication clientreplication slave (MySQL 5.6 and later)selectshow databasesshow viewtriggerupdate
Note
DB インスタンスのマスターユーザーを削除できますが、お勧めしません。マスターユーザーを再作成するには、ModifyDBInstance RDS API アクションまたは modify-db-instance AWS CLI ツールを使用して、新しいマスターユーザーのパスワードを該当するパラメーターで指定します。インスタンスに既存のマスターユーザーがない場合、指定したパスワードを使用してマスターユーザーが作成されます。
各 DB インスタンスに管理サービスを提供するために、DB インスタンスの作成時に rdsadmin ユーザーが作成されます。rdsadmin アカウントをドロップしたり、名前変更したり、そのパスワードを変更したり、またはアカウントの権限を変更しようとしたりするとエラーになります。
DB インスタンスの管理を可能にするために、標準的なコマンド kill と kill_query の使用は制限されています。代わりに、Amazon RDS のコマンド rds_kill と rds_kill_query が用意されており、DB インスタンスでのユーザーセッションやクエリを終了させるために使用できます。
MySQL DB インスタンスで SSL を使用する
Amazon RDS では、MySQL データベースエンジンを実行する DB インスタンスとの SSL 接続がサポートされています。
Note
Amazon Aurora は MySQL と互換性があります。ただし、Amazon Aurora DB クラスターへの接続には別の SSL 証明書を使用します。SSL を使用して Amazon Aurora に接続する方法については、「SSL での Aurora データの保護」を参照してください。
Amazon RDS によって、Amazon RDS インスタンスのプロビジョニング時、SSL 証明書が作成され、DB インスタンスにインストールされます。これらの証明書は認証局によって署名されます。SSL 証明書には、なりすまし攻撃から保護するために、SSL 証明書の共通名(CN)として DB インスタンスのエンドポイントが含まれています。パブリックキーは https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem にあります。
Amazon RDS によって作成された SSL 証明書は信頼されたルートエンティティであり、ほとんどの場合は使用できますが、アプリケーションが証明書チェーンを受け入れていない場合は使用できない可能性があります。アプリケーションが証明書チェーンを受け入れていない場合は、リージョンに接続している中間証明書の使用が必要になる場合があります。 たとえば、SSL を使用して GovCloud (米国) リージョンに接続するために、中間証明書を使用する必要があります。 ダウンロードできるリージョンの中間証明書のリストについては、「中間証明書」を参照してください。
デフォルトの mysql クライアントを使用して接続を暗号化するには、以下の例のように、--ssl-ca parameter でパブリックキーを参照して mysql クライアントを起動します。
mysql -h myinstance.c9akciq32.rds-us-east-1.amazonaws.com
--ssl-ca=[full path]rds-combined-ca-bundle.pem --ssl-verify-server-cert
GRANT ステートメントを使用して、特定のユーザーアカウントに SSL 接続を求めることができます。たとえば、以下のステートメントを使用して、ユーザーアカウント encrypted_user に SSL 接続を求めることができます。
GRANT USAGE ON *.* TO 'encrypted_user'@'%' REQUIRE SSL Note
MySQL での SSL 接続の詳細については、MySQL のドキュメントを参照してください。
MySQL DB インスタンスのローカルタイムゾーン
デフォルトでは、RDS MySQL DB インスタンスのタイムゾーンは協定世界時(UTC)です。代わりに、DB インスタンスのタイムゾーンをアプリケーションのローカルタイムゾーンに設定できます。
DB インスタンスのローカルタイムゾーンを設定するには、DB インスタンスのパラメータグループの time_zone パラメータを、このセクションで後述するサポートされている値のいずれかに設定します。パラメータグループの time_zone パラメータを設定すると、そのパラメータグループを使用しているすべての DB インスタンスとリードレプリカは、新しいローカルタイムゾーンを使用するように変更されます。パラメータグループのパラメータの設定については、「DB パラメータグループを使用する」を参照してください。
ローカルタイムゾーンを設定した後、データベースへのすべての新しい接続にその変更が反映されます。ローカルタイムゾーンを変更するときにデータベースへの接続を開いている場合、その接続を閉じて新しい接続を開くまで、ローカルタイムゾーンは更新されません。
DB インスタンスとそのリードレプリカには異なるローカルタイムゾーンを設定できます。そのためには、DB インスタンスとレプリカに異なるパラメータグループを使用し、各パラメータグループの time_zone パラメータを異なるローカルタイムゾーンに設定します。
リージョン間のレプリケーションを実行する場合は、レプリケーションマスター DB インスタンスとリードレプリカに異なるパラメータグループ(パラメータグループはリージョンに固有のもの)を使用します。各インスタンスに同じローカルタイムゾーンを使用するには、インスタンスとリードレプリカのパラメータグループの time_zone パラメータを設定する必要があります。
DB スナップショットから DB インスタンスを復元すると、ローカルタイムゾーンが UTC に設定されます。復元が完了したら、タイムゾーンをローカルタイムゾーンに更新できます。DB インスタンスをある時点まで復元する場合、復元された DB インスタンスのローカルタイムゾーンは、復元された DB インスタンスのパラメータグループに設定されているタイムゾーンです。
ローカルタイムゾーンは MySQL バージョン 5.5、5.6、5.7 でのみサポートされています。
ローカルタイムゾーンは以下のいずれかの値に設定できます。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
InnoDB キャッシュウォームアップ
InnoDB キャッシュウォームアップでは、DB インスタンスがシャットダウンされたときのバッファープールの最新の状態を保存し、DB インスタンスが起動されたときに保存された情報からバッファープールを再ロードすることによって、MySQL DB インスタンスのパフォーマンスを向上させることができます。これにより、通常のデータベースの使用からバッファープールを「ウォームアップする」必要がなくなり、既知の一般的なクエリのページを使用してバッファープールを事前にロードします。保存されたバッファープール情報を格納するファイルには、バッファープールのページ自体ではなく、バッファープール内のページのメタデータのみが格納されます。そのため、このファイルは多くのストレージ領域を必要としません。ファイルサイズは、キャッシュサイズの約 0.2% となります。たとえば、64 GB のキャッシュでは、キャッシュのウォームアップファイルのサイズは 128 MB です。InnoDB キャッシュウォームアップの詳細については、MySQL のドキュメントの「再起動を高速化するための InnoDB バッファープールの事前ロード」を参照してください。
Amazon RDS での MySQL は、MySQL バージョン 5.6 以降の InnoDB キャッシュウォームアップをサポートします。InnoDB キャッシュウォームアップを有効にするには、DB インスタンスのパラメータグループで innodb_buffer_pool_dump_at_shutdown および innodb_buffer_pool_load_at_startup パラメーターを 1 に設定します。パラメータグループのこれらのパラメータ値を変更すると、パラメータグループを使用するすべての MySQL DB インスタンスに影響します。特定の MySQL DB インスタンスの InnoDB キャッシュウォームアップを有効にするには、それらのインスタンスの新しいパラメータグループを作成することが必要になる場合があります。パラメータグループについては、「DB パラメータグループを使用する」を参照してください。
InnoDB キャッシュウォームアップは、主に、標準ストレージを使用している DB インスタンスにパフォーマンス上のメリットをもたらします。PIOPS ストレージを使用する場合、一般的に大きなパフォーマンス上のメリットは見られません。
Important
フェイルオーバー時など、MySQL DB インスタンスが正常にシャットダウンしなかった場合、バッファープールの状態はディスクに保存されません。この場合、DB インスタンスが再開されるときに、MySQL は利用可能な任意のバッファープールファイルをロードします。特に害はありませんが、復元されたバッファープールは、再開前のバッファープールの最新の状態を反映していない可能性があります。起動時に InnoDB キャッシュをウォームアップするために、バッファープールの最新の状態が利用できるようにするには、定期的に「オンデマンド」でバッファープールをダンプすることをお勧めします。DB インスタンスが MySQL バージョン 5.6.19 以降を実行している場合、バッファープールをオンデマンドでダンプまたはロードできます。
自動で定期的にバッファープールをダンプするイベントを作成できます。たとえば、次のステートメントは、1 時間ごとにバッファープールをダンプする periodic_buffer_pool_dump という名前のイベントを作成します。
CREATE EVENT periodic_buffer_pool_dump
ON SCHEDULE EVERY 1 HOUR
DO CALL mysql.rds_innodb_buffer_pool_dump_now(); MySQL のイベントの詳細については、MySQL のドキュメントの「イベントの構文」を参照してください。
オンデマンドでのバッファプールのダンプとロード
MySQL バージョン 5.6.19 以降の場合、InnoDB キャッシュを「オンデマンド」で保存およびロードできます。
バッファープールの現在の状態をディスクにダンプするには、mysql.rds_innodb_buffer_pool_dump_now ストアドプロシージャを呼び出します。
バッファープールの保存された状態をディスクからロードするには、mysql.rds_innodb_buffer_pool_load_now ストアドプロシージャを呼び出します。
進行中のロードオペレーションをキャンセルするには、mysql.rds_innodb_buffer_pool_load_abort ストアドプロシージャを呼び出します。
Amazon RDS でサポートされていない MySQL の機能
Amazon RDS では、現在、MySQL の以下の機能はサポートされていません。
グローバルトランザクション ID
トランスポータブルテーブルスペース
認証用プラグイン
パスワード強度用プラグイン
レプリケーションフィルター
準同期レプリケーション
マネージド型サービスの操作性を実現するために、Amazon RDS では DB インスタンスへのシェルアクセスはできません。また、上位の権限を必要とする特定のシステムプロシージャやシステムテーブルへのアクセスが制限されます。Amazon RDS では、標準的な SQL クライアントアプリケーションを使用した、DB インスタンス上のデータベースへのアクセスがサポートされています。Amazon RDS では、Telnet、Secure Shell(SSH)、または Windows のリモートデスクトップ接続を使用した、DB インスタンスへのダイレクトホストアクセスは許可されません。DB インスタンスを作成すると、そのインスタンス上のすべてのデータベースに対する db_owner ロールに割り当てられ、すべてのデータベースレベルのアクセス許可が付与されます(バックアップのためのアクセス許可は付与されません。バックアップは Amazon RDS によって管理されます)。
既知の問題と制限
既知の問題および制限は次のとおりです。
InnoDB バッファープールサイズの不整合
現在のところ、MySQL 5.7 には、InnoDB バッファプールサイズの管理方法にバグがあります。MySQL 5.7 が innodb_buffer_pool_size パラメーターの値を大きな値に調整し、それにより InnoDB バッファプールが大きくなりすぎ、過度のメモリを使用する可能性があります。この影響により、MySQL データベースエンジンは実行を停止するか、MySQL データベースエンジンが起動できなくなる場合があります。この問題は、使用できるメモリが少ない DB インスタンスクラスでより多く発生します。
この問題を解決するには、innodb_buffer_pool_size パラメーターの値を、innodb_buffer_pool_instances パラメーターの値と innodb_buffer_pool_chunk_size パラメーターの値の積の倍数に設定します。たとえば、次の例に示すように、innodb_buffer_pool_size パラメーターの値を innodb_buffer_pool_instances および innodb_buffer_pool_chunk_size パラメーターの積の 8 倍に設定します。
innodb_buffer_pool_chunk_size = 536870912
innodb_buffer_pool_instances = 4
innodb_buffer_pool_size = (536870912 * 4) * 8 = 17179869184
この MySQL 5.7 のバグの詳細については、MySQL ドキュメントの https://bugs.mysql.com/bug.php?id=79379 を参照してください。
Memcached で推奨される MySQL のバージョン
memcached インターフェイスは、MySQL バージョン 5.6.21b 以降でのみ使用することをお勧めします。これは、バージョン 5.6.21b 以降、MySQL エンジンに含まれる memcached インターフェイスに関連する多くのバグが修正されているからです。詳細については、MySQL のドキュメントの「MySQL 5.6.20 (2014-07-31) の変更点」と「MySQL 5.6.21 (2014-09-23) の変更点」を参照してください。
Amazon RDS 上の MySQL とともに memcached を使用する方法については、「MySQL の memcached サポート」を参照してください。
MySQL バージョン 5.5.40 の非同期 I/O が無効である
2014 年 4 月 23 日より前に作成され、2014 年 10 月 17 日以降に MySQL バージョン 5.5.40 にアップグレードした MySQL DB インスタンスでは、I/O パフォーマンスの低下が見られる場合があります。このパフォーマンスの低下は、対応する DB パラメータグループで innodb_use_native_aio パラメータを有効にしている場合でも、innodb_use_native_aio パラメータを無効にするエラーによって発生している可能性があります。
このエラーを解決するには、バージョン 5.5.40 を実行している MySQL DB インスタンスを、この動作を修正するバージョン 5.5.40a にアップグレードすることをお勧めします。マイナーバージョンのアップグレードについては、「MySQL DB エンジンのアップグレード」を参照してください。
MySQL の非同期 I/O の詳細については、MySQL のドキュメントの「Linux での非同期 I/O」を参照してください。
インデックスマージの最適化で誤った結果が返される
インデックスマージの最適化を使用するクエリは、MySQL 5.5.37 で導入された MySQL クエリオプティマイザのバグのために誤った結果を返す場合があります。複数のインデックスを持つテーブルに対してクエリを実行すると、オプティマイザは複数のインデックスに基づいて行の範囲をスキャンしますが、結果を正しくマージしません。クエリのクエリオプティマイザのバグの詳細については、MySQL バグデータベースの http://bugs.mysql.com/bug.php?id=72745 と http://bugs.mysql.com/bug.php?id=68194 を参照してください。
たとえば、2 つのインデックスを持つテーブルで、検索引数がインデックス付き列を参照するクエリがあるとします。
SELECT * FROM table1
WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';
この場合、検索エンジンは両方のインデックスを検索します。ただし、バグが原因で、マージされた結果は正しくありません。
この問題を解決するには、次のいずれかを実行します。
MySQL DB インスタンスの DB パラメータグループで
optimizer_switchパラメータをindex_merge=offに設定します。DB パラメータグループのパラメータの設定については、「DB パラメータグループを使用する」を参照してください。MySQL DB インスタンスを MySQL バージョン 5.6.19a にアップグレードします。メジャーバージョンのアップグレードについては、「DB インスタンスのメンテナンスとアップグレード」を参照してください。
インスタンスをアップグレードできない場合や、
optimizer_switchパラメータを変更できない場合は、明示的にクエリのインデックスを指定してバグを回避できます。たとえば、次のように指定します。SELECT * FROM table1 USE INDEX covering_index WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';
詳細については、「インデックスマージの最適化」を参照してください。
MySQL Version 5.6.21 にアップグレードした後、レプリケーションに失敗する
バージョン 5.6.4 以前のバージョンを実行する DB インスタンスがある場合や、DB インスタンスをバージョン 5.6.4 よりも前のバージョンからアップグレードした場合、MySQL バージョン 5.6.21 を実行するリードレプリカがあると、次のエラーが出力されることがあります。
mysqld got signal 11 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail. MySQL バージョン 5.6.4 では、datetime、time、timestamp 列で、日付と時刻の値に小数部を使用できる新しい日付と時刻の形式が導入されました。このエラーはマスターとレプリカの間で日付と時刻の形式が一致していないことが原因で発生します。その結果、行ベースのログ作成で、マスター DB インスタンスからレプリカ DB インスタンスに、オペレーションを再現しようとすると失敗します。また、MySQL エラーログに多くの関連する行ベースのログ作成メッセージが表示されることもあります(Relay_log_info、Rows_log_event など)。MySQL の新しい日付と時刻の形式については、MySQL のドキュメントの「MySQL 5.5 から MySQL 5.6 にアップグレードする」を参照してください。
エラーを解決するには、次のいずれかを実行します。
リードレプリカを MySQL バージョン 5.6.23 以降にアップグレードします。Amazon RDS 上の MySQL DB インスタンスをバージョン 5.6 にアップグレードする方法については、「DB インスタンスのデータベースエンジンバージョンのアップグレード」を参照してください。
マスター DB インスタンスを MySQL バージョン 5.6.12 以降にアップグレードし、影響を受ける日付と時刻の列の形式を更新します。Amazon RDS 上の MySQL DB インスタンスをバージョン 5.6 にアップグレードする方法については、「DB インスタンスのデータベースエンジンバージョンのアップグレード」を参照してください。
マスター DB インスタンスで日付と時刻の列を新しい形式にアップグレードするには、
ALTER TABLEコマンドを発行する必要があります。<table_name>FORCE;Note
テーブルを変更すると、テーブルが読み取り専用としてロックされるため、この更新はメンテナンス時間中に実行することをお勧めします。
次のクエリを実行して、データベース内で
datetime、time、またはtimestamp型の列を含むテーブルをすべて検索し、各テーブルについてALTER TABLEコマンドを作成できます。<table_name>FORCE;SELECT DISTINCT CONCAT('ALTER TABLE `', REPLACE(is_tables.TABLE_SCHEMA, '`', '``'), '`.`', REPLACE(is_tables.TABLE_NAME, '`', '``'), '` FORCE;') FROM information_schema.TABLES is_tables INNER JOIN information_schema.COLUMNS col ON col.TABLE_SCHEMA = is_tables.TABLE_SCHEMA AND col.TABLE_NAME = is_tables.TABLE_NAME LEFT OUTER JOIN information_schema.INNODB_SYS_TABLES systables ON SUBSTRING_INDEX(systables.NAME, '#', 1) = CONCAT(is_tables.TABLE_SCHEMA,'/',is_tables.TABLE_NAME) LEFT OUTER JOIN information_schema.INNODB_SYS_COLUMNS syscolumns ON syscolumns.TABLE_ID = systables.TABLE_ID AND syscolumns.NAME = col.COLUMN_NAME WHERE col.COLUMN_TYPE IN ('time','timestamp','datetime') AND is_tables.TABLE_TYPE = 'BASE TABLE' AND is_tables.TABLE_SCHEMA NOT IN ('mysql','information_schema','performance_schema') AND (is_tables.ENGINE = 'InnoDB' AND syscolumns.MTYPE = 6);
ログファイルのサイズ
MySQL バージョン 5.6.20 以降では、redo ログに書き込まれる BLOB にサイズ制限があります。この制限に対処するには、MySQL DB インスタンスの innodb_log_file_size パラメータを、テーブル内で最も大きい BLOB データサイズに、同テーブル内の他の可変長フィールド(VARCHAR、VARBINARY、TEXT)を足した長さより 10 倍大きくします。パラメータ値を設定する方法については、「DB パラメータグループを使用する」を参照してください。redo ログの BLOB サイズ制限については、「MySQL 5.6.20 の変更点」を参照してください。
Amazon RDS DB インスタンスに使用する MySQL のパラメーターの例外
MySQL の一部のパラメータは、Amazon RDS DB インスタンスとともに使用する場合に、特別な考慮事項があります。
lower_case_table_names
Amazon RDS は、大文字と小文字が区別されるファイルシステムを使用するため、lower_case_table_names サーバーパラメータの値を 2([names stored as given but compared in lowercase])に設定することはできません。Amazon RDS DB インスタンスのサポートされている値は、デフォルトの 0 ([names stored as given and comparisons are case-sensitive]) または 1 ([names stored in lowercase and comparisons are not case-sensitive]) です。
lower_case_table_names パラメータは、DB インスタンスの作成前に、カスタム DB パラメータグループに追加して設定する必要があります。既存のデータベースインスタンスの lower_case_table_names パラメーターを変更しないでください。変更すると、ポイントインタイム復元のバックアップとリードレプリカの DB インスタンスで不整合が生じることがあるためです。
リードレプリカの lower_case_table_names パラメーターには常に、マスター DB インスタンスのものと同じ値を使用する必要があります。
long_query_time
long_query_time パラメータを浮動小数点値に設定することで、スロークエリを MySQL スロークエリログにマイクロ秒の精度で記録できます。たとえば、この値として 0.1 秒(100 ミリ秒)を設定すると、1 秒未満のスロートランザクションのデバッグ時に役立ちます。
MySQL のファイルサイズの制限
Amazon RDS MySQL DB インスタンスの場合、InnoDB file-per-table テーブル領域を使用するとき、プロビジョンドストレージの最大サイズにより、テーブルのサイズは最大 6 TB に制限されます。また、システムのテーブルスペースも最大 6 TB に制限されています。テーブルがそれぞれに固有のテーブル領域に存在する InnoDB file-per-table テーブル領域は、Amazon RDS MySQL DB インスタンスに対してデフォルトで設定されます。
Note
2014 年 4 月より前に作成された MySQL DB インスタンスには、2 TB のファイルサイズの制限があります。この 2 TB というファイルサイズの制限は、2014 年 4 月より前に作成された DB スナップショットから作成された DB インスタンスにも適用されます。その DB インスタンスがいつ作成されたかには関係ありません。
InnoDB file-per-table テーブルスペースの使用は、アプリケーションにより長所と短所があります。アプリケーションに最適な方法を判断するには、MySQL のドキュメントで「InnoDB File-Per-Table Mode」を参照してください。
テーブルを最大ファイルサイズまで拡張可能にすることはお勧めしません。一般的に望ましいのは、データを小さなテーブルにパーティション分割することです。これにより、パフォーマンスと復旧時間が改善される可能性があります。
大きなテーブルを小さなテーブルに分ける方法の 1 つはパーティション化です。パーティション化は、指定したルールに基づいて、大きなテーブルの各部分を個別のファイルに分散します。たとえば、トランザクションを日付ごとに保存する場合、パーティション化を使用して古いトランザクションを別々のファイルに分散させるパーティションルールを作成できます。また、定期的に、アプリケーションですぐに使用する必要のない履歴トランザクションデータをアーカイブできます。詳細については、MySQL のドキュメントの https://dev.mysql.com/doc/refman/5.6/en/partitioning.html を参照してください。
テーブルのファイルサイズを確認するには
次の SQL コマンドを使用して、パーティション化の対象になる過度に大きなテーブルがあるか判断します。
SELECT TABLE_SCHEMA, TABLE_NAME,
round(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024), 2) As "Approximate size (MB)"
FROM information_schema.TABLES
WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema'); InnoDB file-per-table テーブルスペースを有効にするには
InnoDB file-per-table テーブルスペースを有効にするには、DB インスタンスのパラメータグループで innodb_file_per_table パラメータを
1に設定します。
InnoDB file-per-table テーブルスペースを無効にするには
InnoDB file-per-table テーブルスペースを無効にするには、DB インスタンスのパラメータグループで innodb_file_per_table パラメータを
0に設定します。
パラメータグループの更新については、「DB パラメータグループを使用する」を参照してください。
InnoDB file-per-table テーブルスペースを有効または無効にすると、次の例のように ALTER
TABLE コマンドを実行してテーブルをグローバルテーブルスペースから固有のテーブルスペースに、または固有のテーブルスペースからグローバルテーブルスペースに移動できます。
ALTER TABLE table_name ENGINE=InnoDB;