以下のパラメータは要件に従って設定する必要があります。そうしない場合、検証時にシステムが警告を発します。警告は移行タスクの進行に影響しませんが、業務に一定の影響を及ぼす可能性があります。ユーザーが評価した上で、変更するかどうかを自身で判断してください。
1. ターゲットデータベースのmax_allowed_packetの値はソースデータベースより大きくすることを推奨します。
業務影響:ターゲットデータベースのmax_allowed_packetパラメータ設定がソースデータベースより小さい場合、ターゲットデータベースにデータを書き込めなくなり、全量移行が失敗する可能性があります。
処理アドバイス:ターゲットデータベースのmax_allowed_packetパラメータを、ソースデータベースの値より大きくなるように変更してください。
2. ターゲットデータベースのmax_allowed_packet設定は1GBより大きくすることを推奨します。
業務影響:max_allowed_packetの設定が大きすぎると、より多くのメモリを使用してパケット損失が発生し、異常に大きなトランザクションパケットSQLを捕捉できなくなります。設定が小さすぎると、プログラムエラーやバックアップ失敗を引き起こす可能性があり、ネットワークパケットの頻繁な送受信が発生し、システムパフォーマンスに影響を与える可能性があります。
処理アドバイス:以下のコマンドを参照してmax_allowed_packetパラメータを変更してください。
set global max_allowed_packet = 1024;
3. ソースデータベースとターゲットデータベースの文字セットを一致させることを推奨します。
業務影響:ソースデータベースとターゲットデータベースの文字セットが一致していない場合、文字化けが発生する可能性があります。
処理アドバイス:以下のコマンドを参照して、ソースデータベースとターゲットデータベースの文字セットを一致するように変更してください。
set character_set_server = 'utf8';
4. ソースデータベースとターゲットデータベースのsql_modeの値は一致させることを推奨します。そうしない場合、同期結果に異常が発生する可能性があります。
不一致が発生した場合は、以下の方法を参照して一致するように変更してください。
SET GLOBAL sql_mode = '新しいSQLモード';
5. 2 CPU、4000 MB Mem以上のスペックのインスタンスを使用することを推奨します。
6. 全量データ移行のみを実行する場合、移行プロセス中にソースインスタンスに新しいデータを書き込まないでください。そうしないと、ソースとターゲットのデータが不一致になります。データ書き込みがあるシナリオでは、データの一貫性をリアルタイムに維持するために、全量+増分データ移行を選択することをお勧めします。
7. ロックありエクスポート時:ソースインスタンスはFlush Table With Read Lockを使用して短時間ロックする必要があります。その中のMyISAMテーブルはフルデータエクスポートが完了するまでロックされます。現在のロック待機タイムアウト時間は60秒に設定されており、この時間内にロックを取得できない場合、タスクは失敗します。
8. ロックフリーエクスポート時:主キーがないテーブルにのみ読み取りロックがかかり、その他はロックされません。
9. 主キーも非NULLの一意キーもないテーブルにはデータ重複のリスクがあります。移行するテーブルに主キーまたは非NULLの一意キーを設定することをお勧めします。
10. TDSQL MySQLのデータ移行において、ソースデータベースインスタンスが分散データベースの場合、事前にターゲットデータベースにシャーディングテーブルを作成する必要があります。そうしないと、これらのテーブルは移行後にすべて単一テーブルになります。
11. ターゲットデータベースがMySQL/MariaDB/Percona/TDSQL-C MySQL/TDSQL Boundlessの場合、ソースデータベースとターゲットデータベースのexplicit_defaults_for_timestampの設定をチェックする必要があります。ソースデータベースがOFFの場合、またはソースとターゲットの両方がONの場合、タスクは警告を発し、タスクの実行中にこのパラメータを勝手に変更しないようユーザーに注意を促します。
12. フルエクスポートでデータベース・テーブル構造をエクスポートする際に、テーブルのCOLUMN_DEFAULT、IS_NULLABLE属性をチェックします。ソースデータベースのテーブルのCOLUMN_DEFAULTがNULLで、IS_NULLABLEがNOT NULLの場合、そのテーブル構造は移行/同期されません。データがターゲットデータベースに同期された後、MySQLシステムがTIMESTAMPデータ型にデフォルトパラメータ「CURRENT_TIMESTAMP」を自動的に追加する可能性を回避するためです。
13. MySQL 8.0バージョンからスレッドプール機能(Thread Pool)がサポートされています。ターゲットデータベースでスレッドプール機能が有効になっている場合(MySQLの設定ファイルで、thread_handlingパラメータがone-thread-per-connectionに設定されていない場合は、スレッドプール機能が有効であることを示します)、ターゲットデータベースのthread_pool_sizeパラメータを16以上にする必要があります。これにより、同時書き込み性能が向上します。16未満の場合、このチェック項目は警告を発し、書き込み性能の問題が発生する可能性があることをユーザーに通知します。