猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

DataBase MySQL

utilitiesのmysqlfailoverを使う(1)

投稿日:

そもそもこの機能が動作しなくて非常にこまりました。
もしスレーブが認識できないのであれば前回の記事が役に立つかもしれません。

utilitiesのmysqlrplshowを使いたい

レプリケーションの目的や構成も様々だと思います。
今回の構成・目標は以下の通りです。

【構成】
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

次回はマスターとスレーブの入れ替えの方法です。

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL

執筆者:

関連記事

sqlserver

SQL Server Browser を起動する方法

SQL Server構成マネージャーより起動できるはずが、なぜか開始も停止もできない。 コントロール パネル > システムとセキュリティ > 管理ツール > サービス を見ると、SQL Server …

MySQLの実行速度テスト用PHP

1.testデータベースにtest_tableテーブルを作成。 2.1万件のデータを登録します。 3.1000件のフラグを更新 4.更新したデータを検索する時刻を測定して表示 するサンプルです。 &l …

mysql

MySQLが起動できない

エラーログには下記ログが大量に出力されて起動できない・・・。 2013-08-22 17:32:10 30137 [ERROR] InnoDB: Unable to lock ./ibdata1, e …

mysql

MySQLの時間の計算・比較

列同士を比較する datetime型をそのままプラス・マイナスしてはいけません!! 例えば、 mysql> select * from test; +———————+ …

mysql

ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

ダンプをインポートしようとすると下記エラーが表示されてインポートできませんでした。 [root@centos]# mysql -u root -p reset master; するとインポートできまし …