まず、RDSAuroraのストレージについて理解します。 Auroraには2種類のストレージがあります。 インスタンスストア 一時的なオブジェクトが保存されるローカルストレージとメインストレージです。 データ用。したがって、テーブルに対してALTERを実行すると、一時テーブルが生成され、RDSauroraはインスタンスストレージを使用して一時テーブルを格納します。 db.r3.largeインスタンスであるインスタンスの場合、1×32 GBのローカルストレージがあるため、インスタンス上の一時オブジェクトがこのサイズより大きくなると、「テーブルがいっぱい」というエラーが発生します。また、ローカルストレージの制限は、ストレージボリュームの合計とは異なります。 Auroraインスタンスで利用可能であり、データベースの使用状況に基づいて、AmazonAuroraストレージボリュームは10GB刻みで最大64TBまで自動的に増加します。Amazon Auroraのストレージボリュームが自動的に64TBまで増加するのに、この問題が発生したのはなぜですか?
RDSの大きなテーブルで変更 テーブルの完全なエラーの解決策
- この問題を解決するには、インスタンスをスケールアップして、ALTERを実行するローカルストレージを増やし、テーブルを変更してから、インスタンスタイプをスケールダウンします。これにより、インスタンスタイプのアップグレード/ダウングレード中にダウンタイムが発生します。
- 次のコマンドも使用できます:「pt-online-schema-change」コマンドを使用すると、元のテーブルをダウンタイムなしで引き続き使用できるようになりますまたはテーブルロックなし。
結果:
ptでテーブルを変更する場合 -online-schema-change のコマンド サイズが35〜40 GBのテーブルの場合、約30時間かかる場合があります。pt-online-schema-changeコマンドを使用する理由と有効にする理由 DBパラメータグループの「log_bin_trust_function_creators」? ?
pt-online-schema-change テーブルをロックしません。このコマンドは、元のテーブルにトリガーを作成します。ただし、このためには、スーパーユーザー権限が必要です。ストアドプロシージャを使用している場合、次のエラーが発生します。#1419 – SUPER権限がなく、バイナリロギングが有効になっています(安全性の低いlog_bin_trust_function_creators変数を使用する場合があります理由: このエラーは、「ストアドプロシージャ」を使用しようとすると、RDSインスタンスで発生します。ユーザーにスーパー特権を付与しても機能しないことがすぐにわかります。したがって、物事を機能させる唯一の方法は、log_bin_trust_function_creatorsを1に設定することです。 Perconaドキュメントによると: 要点は、バイナリログが有効になっているサーバーでトリガーを作成するには、SUPER権限を持つユーザーが必要です(Amazon RDSでは不可能です)。エラーメッセージは回避策を示しています。 DBパラメータグループ「log_bin_trust_function_creators」の変数を有効にする必要があります。これを有効にすることは、サーバーに次のように言うようなものです。 「通常のユーザーのトリガーと機能を信頼しており、問題が発生しないことを信頼しているので、ユーザーがそれらを作成できるようにします。」 データベースの機能は変更されないため、ユーザーを信頼することが問題になります。 log_bin_trust_function_creatorsは、動的に変更できるグローバル変数です。 MySQLデータベースのユーザーテーブルでユーザーの権限を確認するときに、「Super_priv」の詳細を検索しようとしています。 Super_privがrdsadminユーザー以外には設定されていないことがわかります。
MySQL> select User,Super_priv from user; +-----------+------------+ | User | Super_priv | +-----------+------------+ | rdsadmin | Y | | root | N | | dbuser | N | +-----------+------------+ 3 rows in set (0.00 sec)
ここで、「root」はマスターユーザー、「dbuser」はこれらのユーザーが作成したDBユーザーであり、「rdsadmin」ユーザーはこのユーザーにアクセスできないAWSによって自動的に作成されます。 rdsadmin MySQLユーザーは、Amazonがメンテナンスおよび管理作業に使用します。
これでチュートリアルは終了です。RDSソリューションのビッグテーブルを変更して、完全なエラーをテーブルに表示する方法です。