古いマスターから新しいスレーブに複製しようとするとき、およびスレーブで実行中の新しい MySQL バージョンで予約語である識別子をマスター上で使用するときに、問題が発生する可能性があります。たとえば、4.1 以降のスレーブに複製している 4.0 マスター上で名前が current_user
のテーブルカラムを使用しているときです。CURRENT_USER
は MySQL 4.1 以降で予約語であるためです。このような場合、レプリケーションはエラー 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「スキーマオブジェクト名」を参照してください。