0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ローカルネットワーク内でMariaDBレプリケーション設定

Last updated at Posted at 2019-12-30

#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;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?