MySQL は、あるメジャーバージョンから次以降のメジャーバージョンへのレプリケーションをサポートします。たとえば、MySQL 4.1 を実行するマスターから MySQL 5.0 を実行するスレーブ、MySQL 5.0 を実行するマスターから MySQL 5.1 を実行するスレーブなどへの複製ができます。
ただし、古いマスターから新しいスレーブに複製するときに、マスターがスレーブ上で使用されているバージョンの MySQL でもうサポートされていないステートメントを使用したり、そのような動作に依存したりする場合は、問題が発生することがあります。たとえば、MySQL 5.5 では、CREATE TABLE ... SELECT
ステートメントが、作成済みでないテーブルを変更することが許可されますが、MySQL 5.6 では許可されなくなりました (セクション17.4.1.5「CREATE TABLE ... SELECT ステートメントのレプリケーション」を参照してください)。
2 つを超える MySQL Server バージョンを使用することは、マスターまたはスレーブ MySQL サーバーの数にかかわらず、複数のマスターを使用するレプリケーションセットアップでサポートされません。この制限は、メジャーバージョンだけではなく、同じメジャーバージョン内のマイナーバージョンにも適用されます。たとえば、チェーンまたは循環レプリケーションセットアップを使用している場合、MySQL 5.6.1、MySQL 5.6.2、および MySQL 5.6.4 は同時に使用できませんが、これらのリリースの任意の 2 つを一緒に使用することはできます。
場合によっては、マスターと、マスターよりメジャーバージョン 2 つ以上新しいスレーブとの間で複製できます。ただし、MySQL 4.1 以前を実行するマスターから MySQL 5.1 以降を実行するスレーブに複製しようとすることに関する既知の問題があります。このような問題に対処するために、2 つの間に中間バージョンを実行する MySQL サーバーを挿入できます。たとえば、MySQL 4.1 マスターから MySQL 5.1 スレーブに直接複製するのではなく、MySQL 4.1 サーバーから MySQL 5.0 サーバーに複製してから、MySQL 5.0 サーバーから MySQL 5.1 サーバーに複製できます。
レプリケーション (およびほかの) 機能は継続的に改善されているので、その MySQL メジャーバージョン内で使用可能な最新リリースを使用することを強くお勧めします。また、MySQL メジャーバージョンの早期リリースを使用するマスターとスレーブは GA (本番環境) リリースに更新することをお勧めします (そのメジャーバージョンで後者を入手できるようになったとき)。
新しいマスターから古いスレーブに複製できる場合がありますが、一般的にはサポートされません。これはいくつかの要因によります。
-
バイナリログ形式の変更 バイナリログ形式はメジャーリリース間で変わることがあります。下位互換性を維持しようと試みてはいますが、これがいつか可能なわけではありません。たとえば、MySQL 5.0 に実装されたバイナリログ形式は、以前のバージョンで使用されたものから大幅に変わりました (特に、文字セット、
LOAD DATA INFILE
、およびタイムゾーンの扱いに関して)。これは、MySQL 5.0 (以降) マスターから MySQL 4.1 (以前) スレーブへのレプリケーションは一般的にサポートされないことを意味します。これは、レプリケーションサーバーのアップグレードにも密接な関係があります。詳細は、セクション17.4.3「レプリケーションセットアップをアップグレードする」を参照してください。
-
行ベースレプリケーションの使用 行ベースレプリケーションが MySQL 5.1.5 で実装されたため、行ベースレプリケーションを使用して MySQL 5.6 以降のマスターから MySQL 5.1.5 より古いスレーブに複製することはできません。
行ベースレプリケーションの詳細は、セクション17.1.2「レプリケーション形式」を参照してください。
-
SQL 非互換 複製されるステートメントが、マスター上で利用できるけれどもスレーブ上で利用できない SQL 機能を使用する場合は、ステートメントベースレプリケーションを使用して新しいマスターから古いスレーブに複製することはできません。
ただし、マスターとスレーブの両方が行ベースレプリケーションをサポートし、複製するデータ定義ステートメントにマスター上で見つかるけれどもスレーブ上で見つからない SQL 機能に依存するものがない場合は、行ベースレプリケーションを使用してデータ変更ステートメントの効果を複製できます (マスター上で実行される DDL がスレーブ上でサポートされない場合でも)。
-
MySQL 5.6 の重要な変数 以前の MySQL バージョンに複製するときに無効にする必要がある機能が、MySQL 5.6 に追加されています。非互換を回避するには、MySQL 5.6 マスターで次の変数を設定してください。
binlog_checksum=NONE
binlog_row_image=FULL
binlog_rows_query_log_events=OFF
log_bin_use_v1_row_events=1
gtid_mode=OFF
潜在的なレプリケーション問題の詳細は、セクション17.4.1「レプリケーションの機能と問題」を参照してください。