古いソースから新しいレプリカにレプリケートしようとしたときに、レプリカで実行されている新しい 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「スキーマオブジェクト名」を参照してください。