そもそもこの機能が動作しなくて非常にこまりました。
もしスレーブが認識できないのであれば前回の記事が役に立つかもしれません。
レプリケーションの目的や構成も様々だと思います。
今回の構成・目標は以下の通りです。
Windows8:192.168.0.99。mysqlfailoverを起動する
└centos:マスター。192.168.0.100。Windows8上のvmwareで起動
└centos:スレーブ。192.168.0.101。Windows8上のvmwareで起動
MySQLのバージョンは5.6.13。
MySQL Utilities mysqlfailover version 1.2.0 – MySQL Workbench Distribution 5.2.47
【目的】
通常はマスターを使用する。メンテナンス等でマスターとスレーブを切り替えたい。
その場合はスレーブをそのままマスターとし、スレーブはマスターとなる。
要するに自由に切り替えたい。
レプリケーションの設定
mysqlfailoverを使用するためにはMySQL5.6以上である必要がります。
そしてトランザクションに付加されるGTIDなるキーを利用してレプリケーションしていきます。
とはいってもほとんど設定は同じです。
以下マスター側(0.100)のmy.cnfのレプリケーション関連の抜粋です。
[root@localhost /]# vim /usr/my.cnf [mysqld] server_id=100 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES log-bin=mysql-bin log-slave-updates gtid-mode=ON enforce-gtid-consistency master_info_repository=TABLE relay_log_info_repository=TABLE report_host=192.168.0.100
以下スレーブ側(0.101)のmy.cnfのレプリケーション関連の抜粋です。
[root@localhost /]# vim /usr/my.cnf [mysqld] server_id=101 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES log-bin=mysql-bin log-slave-updates gtid-mode=ON enforce-gtid-consistency master_info_repository=TABLE relay_log_info_repository=TABLE report_host=192.168.0.101
レプリケーションだけなら多くの記事がありますが、mysqlfailoverを正しく利用するにはreport_hostの設定も重要です。
各サーバーのIPをそのまま設定すれば名前解決不要のようです。
ホスト名を入れる場合は各サーバーから名前解決できる必要があります。
レプリケーションユーザーの作成
grant replication slave on *.* to repl@"192.168.0.100" identified by 'pass'; grant replication slave on *.* to repl@"192.168.0.101" identified by 'pass';
マスター、スレーブ、それぞれで同じユーザーを作成しておきましょう。
all_dumpをエクスポートしてインポートしたらユーザーがなくなった・・・なんてことがないようにです。
MySQLを再起動すればマスター側(0.100)の設定は終わりです。
スレーブ側(0.101)はMySQLの再起動後に下記の手順でスレーブを起動するだけです。
mysql> change master to -> master_host='192.168.0.100', -> master_port=3306, -> master_user='repl', -> master_password='pass', -> master_auto_position=1; Query OK, 0 rows affected, 2 warnings (0.10 sec) mysql> start slave;
私はvmwareでサーバーをコピーしてマスターとスレーブを作りました。
そうすると以下のようなエラーがでました。
2013-08-20 18:36:36 15291 [ERROR] Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on sla ve but this does not always make sense; please check the manual before using it). Error_code: 1593
same-server-id となっていますが、server-uuidのことでした。
auto.cnfを編集して適当な別IDにしておきましょう。
[root@localhost mysql]# vim /var/lib/mysql/ auto.cnf
ここまででレプリケーションの設定は完了です。
あとはmysqlfailoverを起動するだけです。
C:\Program Files (x86)\MySQL\MySQL Workbench CE 5.2.47\utilities>mysqlfailover --master=use:pass@192.168.0.100 --discover-slaves-login=user:pass --candidates=user:pass@192.168.0.101 --force MySQL Replication Failover Utility Failover Mode = auto Next Interval = Fri Aug 23 00:45:00 2013 Master Information ------------------ Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB mysql-bin.000001 426 GTID Executed Set b5c7a552-08b9-11e3-bbc1-000c2973a9ab:1 Replication Health Status +----------------+-------+---------+--------+------------+---------+ | host | port | role | state | gtid_mode | health | +----------------+-------+---------+--------+------------+---------+ | 192.168.0.100 | 3306 | MASTER | UP | ON | OK | | 192.168.0.101 | 3306 | SLAVE | UP | ON | OK | +----------------+-------+---------+--------+------------+---------+
見事mysqlfailoverが起動したでしょうか?
–master=use:pass@192.168.0.100
–discover-slaves-login=user:pass
–candidates=user:pass@192.168.0.101
とありますが、レプリケーションユーザーではありません。
rootやその権限のあるユーザーという点に注意しましょう。
どうしてもできない人は、下記を参照してみてください。
mysqlreplicate — Set Up and Start Replication Between Two Servers
次回はマスターとスレーブの入れ替えの方法です。