MySQLレプリケーション設定の最後の所でハマった時の対処法

・使用環境:
Debian 2.6
MySQL 5.1


CASE:
とある案件でMySQLレプリケーションを作ることになった。


MySQL公式サイトの レプリケーションの設定 の手順通りに進めていったのだが、最後らへんの

#MySQL上のコマンド
mysql > show slave status;

を実行した時に、

#抜粋
Last_IO_Error  :  error connecting to master 'repl@[マスタDBが置いてあるIPアドレス]:3306' - retry-time: 60  retries: 86400

が表示されていて、接続エラーを起こしているという。


スレーブ側の設定が悪かったのかと思って、考えつく限りの方法を(最初から設定し直すなど)試したが何も変わらず。
職場の先輩からのアドバイスで、スレーブ側サーバのコマンドライン上で

$ telnet [マスタDBが置いてあるIPアドレス] 3306

を実行したら、Connection Refused となって接続を拒否られていることを確認した。
拒否られる理由として上がったのが、マスタ側のMySQLのポート3306が外部に公開されていないということ。


ということで、マスタ側サーバのコマンドライン上で

$ netstat -ln

を実行したら

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp              0          0 127.0.0.1:3306      0.0.0.0:*                    LISTEN 

アドレスが127.0.0.1で表示されていた。ポート3306 は、外部に公開されていないというのが判明した。
ポートが外部に公開されていない原因は、MySQLの設定でbind-adressを変更していないからだった。



REMEDY:
マスタ側サーバのMySQL設定を変更する。

$ sudo vim /etc/mysql/my.cnf

#書き換える
bind-address           = 127.0.0.1
↓
bind-address            = 0.0.0.0

MySQLを再起動する。

$ sudo /etc/init.d/mysql restart

これで、

$ netstat -ln

を実行したら

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp              0          0 0.0.0.0:3306          0.0.0.0:*                    LISTEN 

127.0.0.1が0.0.0.0となって外部に公開されるようになった。
同様にスレーブ側サーバのMySQL設定も変更したら、うまくレプリケーションするようになった。