Translate

2014年9月25日木曜日

バージョンの異なるMySQLのレプリケーションは気を付けましょう(その1)

 こんにちは、稲田商会です。

 昨日のことでしたが、苦労しました。

 XAMPPで動いているMySQLをレプリケーションしようとしたんです。
 始めにWindows7で動いている、同じXAMPPを入れたものは簡単にレプリケーションが出来ました。
 同じ調子で、WindowsXPに入れたXAMPPのMySQLをレプリケーションのスレーブとして追加しようとしてはまりました。

 正確な環境は覚えていないのですが、大体次のようだったと思います。

対象機器:
PC1(レプリケーションマスター)
 Windows7、Xampp1.8.3、MySQL5.5

PC2(レプリケーションスレーブ)
 Windows7、Xampp1.8.3、MySQL5.6

PC3(これからレプリケーションスレーブに加える)
 WindowsXP、Xampp1.8.2、MySQL5.5

作業前の状況:
 PC1とPC2のレプリケーションは成功。
 PC1にPC3をレプリケーションスレーブとする作業を行う予定。

症状1: データの移動が出来ない。
 PC1でレプリケーション用のデータをとり、PC2で展開したデータがPC3ではエラーになる。

PC1>mysqldump.exe -u root -p --all-databases --lock-all-tables >C:\db\dbdump.db
PC2>mysql.exe -u root -p <C:\db\dbdump.db   --- OK
PC3>mysql.exe -u root -p <C:\db\dbdump.db   --- NG

 こんな感じのエラーが出てきます。

ERROR 1064 (42000) at line XXX: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'STATS_PERSISTENT=0' at line XX

 調べると、STATS_PERSISTENTがMySQLの5.5では対応していないパラメータで、削除すれば上手く行くとのこと。
(参考URL FAT47の底辺インフラ議事録

 ですが、今のdbファイルでは内容がさっぱり判らない。
 で、mysqldump.exeをググってみると、「-a」オプションでテキスト形式の出力が可能とのこと。

PC1>mysqldump.exe -u root -p --all-databases --lock-all-tables -a >C:\db\dbdump2.sql
STATS_PERSISTENT=0 -> /*STATS_PERSISTENT=0*/ とコメントアウト
PC3>mysql.exe -u root -p <C:\db\dbdump2rev.sql   --- OK

 さて、データが写ったのでレプリケーション開始。

PC3_mysql>start slave;   --- NG

 あちゃー。

 続きは、また今度。

それでは、今回はこのへんで。