MySQL 8.0 リファレンスマニュアル


17.5.1.26 レプリケーションと予約語

古いソースから新しいレプリカにレプリケートしようとしたときに、レプリカで実行されている新しい MySQL バージョンの予約語であるソースで識別子を使用すると、問題が発生する可能性があります。 たとえば、MySQL 8.0 レプリカにレプリケートしている MySQL 5.7 ソース上の rank という名前のテーブルのカラムは、RANK が MySQL 8.0 で始まる予約語であるため、問題が発生する可能性があります。

このような場合、レプリケーションはエラー 1064 で失敗する可能性があります: You have an error in your SQL syntax...(予約語を使用して名前が付けられたデータベースまたはテーブル、または予約語を使用して名前が付けられたカラムを持つテーブルが、レプリケーションから除外されていても)。 これは、レプリカが影響を受けるデータベースオブジェクトを認識できるように、実行前に各 SQL イベントをレプリカで解析する必要があるためです。 イベントが解析された後にのみ、レプリカは --replicate-do-db, --replicate-do-table, --replicate-ignore-db および --replicate-ignore-table で定義されたフィルタリングルールを適用できます。

レプリカによって予約語とみなされるソース上のデータベース、テーブルまたはカラムの名前の問題を回避するには、次のいずれかを実行します:

  • ソースで 1 つ以上の ALTER TABLE ステートメントを使用して、レプリカでこれらの名前が予約語とみなされるデータベースオブジェクトの名前を変更し、かわりに古い名前を使用する SQL ステートメントを変更して新しい名前を使用します。

  • これらのデータベースオブジェクト名を使用する SQL ステートメントで、それらの名前をバッククォート文字 (`) で囲まれた識別子として書いてください。

MySQL バージョン別の予約語の一覧については、「MySQL Server Version Reference」の「Reserved Words」を参照してください。 識別子を囲むルールについては、セクション9.2「スキーマオブジェクト名」を参照してください。


関連キーワード:  ソース, ステートメント, ベース, テーブル, バイナリ, GTID, 名前, トランザクション, 構成, 変数