レプリケーションのマスターの変更

とあるデータを収集しているMySQLサーバのマスターのHDDがいっぱいになったのでこれを機に新しいマシンに切り替えることにしました。
ということでメモ。



まずは、元マスターのMySQLを止めて新マスターに/var/lib/mysqlにあるデータをコピーする。
今回はバージョンが一緒だったのでscpでコピーして、

chown -R mysql:mysql データディレクトリ 
chmod -R 660 データディレクトリ/*

普通にレプリケーションをやるときのように新しいマスターのmy.infに

log-bin=mysql-bin
server-id = 3

と設定をして、以下のようにレプリケーション用のユーザを作る。

grant replication slave on *.* to repl@スレーブのIP identified by 'password';

元マスターと同じユーザ名とパスワードにしておいたほうが無難。



スレーブ側での変更はchange master toを使う。
スレーブでMySQLクライアントを起動して、以下のようにやったがなぜか変更が反映されず。

stop slave;
change master to master_host='マスターのIP';
start slave;


以下のようにしたら反映されました。

stop slave;
change master to master_host='マスターのIP', master_log_file='mysql-bin.000001',master_log_pos=4;
start slave;


ちなみに今回はCentOS5でやったのですが、iptablesが最初から起動していてI/Oエラーになっていてあせりました。


おまけ

以前マスターを変えるときにはchange master toを知らなかったので、マスターの設定をした後に、my.cnfに書いてあるマスターに関する設定を書き換えて、/var/lib/mysql/master.infoファイルを消して、

stop slave;
reset slave;
start slave;

とやっていました。
my.cnfを書き換えても自動でmaster.infoは書き換わらないので、change master toを使って書き換えるのが無難です。