#MariaDBのレプリケーション設定
さくらのクラウドサーバーで、MariaDBのレプリケーション設定を下記記事を参考に行いました。
ただ、スレーブ側にリストアする方法が若干異なるので、自分用メモとして残しておきます、
概要としては、さくらのクラウドのスイッチを介したローカルネットワーク内で、MariaDBをインストールしたサーバー(マスターサーバー・スレーブサーバー)2台を用意し、GTID(マスターで作成された各トランザクションの識別子)を使ってレプリケーション設定を行っています。
なお設定の流れを簡易的に記載しているため、細かい説明は省略しています。
##前提条件
・CentoOS7
・MariaDB ver10.3
・スイッチ 1台
・MariaDBインストールサーバー(192.168.0.1)
・MariaDBインストールサーバー(192.168.0.2)
・ローカルネットワークの構築が完了している
##マスター側でfirewallの許可設定
まず準備段階として、マスタ側のデータをスレーブ側に送るので、マスタ側でfirewallの許可設定が必要となります。
そのためマスタ側で、スレーブ側のプライベートIPアドレスである192.168.0.2のみの接続をfirewallコマンドで許可します。
# firewall-cmd --zone=public --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.2" service name="mysql" accept'
# firewall-cmd --reload
##レプリケーションのみ権限を付与したユーザーを作成
マスター側でレプリケーションの権限を持ったユーザーを作成。(後にスレーブ側のマスタDB設定でユーザー情報を記述します)
MariaDB [(none)]> CREATE USER 'repl'@'localhost' IDENTIFIED BY 'repl';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
##マスター側にレプリケーション用のパラメーターを設定
マスター側なのでserver-idを1とし、任意のバイナリログ(レコード変更などの履歴)ファイル名とします。
# systemctl stop mariadb
# vi /etc/my.cnf.d/server.cnf
[mysqld]
server-id = 1 # スレーブと異なるサーバIDにする
log-bin=master-bin # 任意のバイナリログファイル名
binlog-format = ROW
log-slave-updates
# systemctl start mariadb
MariaDB [(none)]> SHOW VARIABLES LIKE 'server_id'; #server_idが設定されている確認
##スレーブ側にレプリケーション用のパラメータを設定
スレーブ側なのでserver-idを2とし、任意のバイナリログファイル名とします。
# systemctl stop mariadb
# vi /etc/my.cnf.d/server.cnf
[mysqld]
server-id = 2 # マスターと異なるサーバIDにする
log-bin=slave-bin # 任意のバイナリログファイル名
read_only # 読み込み専用
log-slave-updates
# systemctl start mariadb
MariaDB [(none)]> SHOW VARIABLES LIKE 'server_id'; #server_idが設定されている確認
##マスターDBのダンプファイル作成
レプリケーションの開始時のみ、手動でマスターのDB全体を、スレーブにコピーする必要があります。
そのため、マスターのDBのデータを保存するためにダンプ(データベースに含まれるテーブルなどの構造やデータを SQL 文の形式で保存すること)をして、適当なファイル(dump.sql)にデータを入れます。
# mysqldump --all-databases -u root -p --master-data=2 --single-transaction --routines > dump.sql
##ダンプファイルのバイナリログファイル名とポジションを確認
GTIDを調べるための、バイナリログファイル名とポジションを確認
MariaDB [(none)]> SHOW MASTER STATUS; #File名とPosition番号を確認
##マスタサーバーの現時点のGTIDを調べる
GTIDはx-x-xのような記載で、ドメインID + サーバID + サーバーごとのトランザクション番号の構成となっています。
MariaDB [(none)]> SELECT BINLOG_GTID_POS( “File名”, Position番号);
##スレーブ側にGTIDを設定
このGTIDを目印として、レプリケーションを行います。
MariaDB [(none)]> SET GLOBAL gtid_slave_pos = ‘X-X-X’;
##スレーブ側にリストア
マスター側のダンプファイルを、スレーブ側にコピーします。
# scp dump.sql root@192.168.0.2:dump.sql
##スレーブ側でマスタサーバー設定とスレーブ開始設定
MariaDB> CHANGE MASTER TO
→ MASTER_HOST = '192.168.0.1',
→ MASTER_USER = 'repl',
→ MASTER_PASSWORD = 'replユーザのパスワード',
→ MASTER_USE_GTID = slave_pos;
MariaDB> START SLAVE;
MariaDB> SHOW SLAVE STATUS \G #GTIDが合っているか、スレーブ起動がYESになっているかなど確認
##最終確認
適当にデータベースを作ってみて、slave側でも反映されているか確認します。
MariaDB [(none)]> USE test;
MariaDB [(test)]> CREATE TABLE testTable(num int, name varchar(50));
MariaDB [(test)]> SHOW TABLES;