MariaDB10でGTIDを使ったレプリケーションの設定

2014/05/04 18:25 | 0 Comments

最近GAになったMariaDB10での、GTIDを使ったレプリケーションの設定方法のメモを残しておく。Global Transaction ID - MariaDB Knowledgebaseを参考にしつつやってみた。


まずMySQLとの違いとして、MariaDBではGTIDは既定で有効になっているため、my.cnfに「gtid-mode=ON」を書く必要はない。(というか書いたらむしろ動かない)

全体の流れとしては、以下の通りだ。
(0.マスターとスレーブのサーバーセットアップ)
1.(マスター側)レプリケーションの設定
2.(マスター側)データをmysqldumpでダンプ
3.(マスター側)現在のGTIDを調べておく
4.(スレーブ側)データをリストア
5.(スレーブ側)レプリケーションの設定と開始


●0.マスターとスレーブのサーバーセットアップ
2台のマシンにMariaDBをインストールする。たとえばyumで入れるなら https://mariadb.com/kb/en/installing-mariadb-with-yum/ あたりを参照。
あとはそれぞれのマシンの/etc/my.cnf.d/server.cnfでserver-idを設定し、mysqlを再起動。


●1.(マスター側)レプリケーションの設定
/etc/my.cnf.d/server.cnfにバイナリログの設定をし、mysqlを再起動する。

log-bin=localhost-bin
log-slave-updates

log-slave-updatesはスレーブからさらに別のサーバーへレプリケーションをさせたいときに使う。(これはMySQLと同じ。)

あとはスレーブ側にレプリケーション権限を付与する。

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_host' IDENTIFIED BY 'slave_password'

あと、ポート番号3306にスレーブ側からアクセスできるようにもしておく。

設定ができたら、マスター側にデータを投入しておく。(テスト目的なら適当なテーブルを作ってレコードをいくつか追加しておく)


●2.(マスター側)データをmysqldumpでダンプ
レプリケーションに必要なデータを含めてDBのダンプをとる。

mysqldump -uroot -p --all-databases --single-transaction --master-data=2 > dbdmp.sql


●3.(マスター側)現在のGTIDを調べる
スレーブ側で設定をするためのダンプを取得した時点でのGTIDを調べてメモしておく。
調べ方は以下の通り。
・手順2でとったダンプファイルをテキストエディタで開き、「CHANGE MASTER TO~~」を見て、現在のバイナリログファイル名とポジションを調べる。
・mysqlにログインし、次のクエリを実行する。

SELECT BINLOG_GTID_POS("バイナリログファイル名", ポジション);
すると、ダンプを取得した時点でのGTID(0-1-30みたいな感じ)を教えてくれるのでメモっておく。


●4.(スレーブ側)データをリストア
手順2でとったダンプファイルをスレーブ側にコピーし、スレーブ側でリストアする。

mysql -uroot -p < dbdmp.sql


●5.(スレーブ側)レプリケーションの設定と開始
手順3でとったGTIDを設定する。

SET GLOBAL gtid_slave_pos = "x-x-xxx";

それからchange masterを実行する。

change master to
  master_host = 'slave_host',
  master_user='slave_user',
  master_password='slave_password',
  master_use_gtid = slave_pos;

スレーブを開始する。

START SLAVE;


以上でGTIDを使ったレプリケーションの設定は完了。マスター側でデータを更新して、スレーブ側にも反映されているかどうかを確認する。うまく行かないshow slave statusで確認する。

このエントリーをはてなブックマークに追加
名前 (必須)
コメント (必須)
確認文字 (必須) ひらがなで「ども」と入力してください。(スパム防止用)