Symfoware

Symfowareについての考察blog

MariaDB 10のレプリケーション設定(Debian 8)

MariaDB 10系のレプリケーションを試してみます。
Debian 8 サーバーを2台仮想環境に用意しました。

マスター:192.168.1.101
スレーブ:192.168.1.103

MariaDBはapt-getでインストールした10.0.26です。


# apt-get install mariadb-server







レプリケーションするデータベースの用意



マスター(192.168.1.101)にレプリケーションするデータベースを作成します。

sampleというデータベースを作成。
testテーブルを用意し、適当にデータを入れておきます。


# mysql -uroot -pP@ssw0rd
MariaDB [(none)]> create database sample;
MariaDB [(none)]> use sample;
MariaDB [sample]> create table test (id int not null, item varchar(100) not null);
MariaDB [sample]> insert into test (id, item) values (1, 'test1');
MariaDB [sample]> insert into test (id, item) values (2, 'test2');
MariaDB [sample]> select * from test;
+----+-------+
| id | item |
+----+-------+
| 1 | test1 |
| 2 | test2 |
+----+-------+
2 rows in set (0.00 sec)







マスター側での操作



こちらを参考に...というかそのまま試してみました。
[MySQL][MariaDB] DBのレプリケーション構築手順


レプリケーション用のユーザー「repl」をパスワード「P@ssw0rd」で作成。
接続可能なネットワークセグメントは「192.168.1.0/255.255.255.0」とします。


MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.0/255.255.255.0' IDENTIFIED BY 'P@ssw0rd';




作成できたかSHOW GRANTSで確認。


MariaDB [(none)]> SHOW GRANTS FOR 'repl'@'192.168.1.0/255.255.255.0';
+--------------------------------------------------------------------------------------------------+
| Grants for repl@192.168.1.0/255.255.255.0                                                        |
+--------------------------------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.0/255.255.255.0' IDENTIFIED BY PASSWORD 'XX' |
+--------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)




これでユーザーは準備出来ました。
次に、mariadb.cnfにレプリケーション用の設定を記載します。


# vi /etc/mysql/conf.d/mariadb.cnf




[mysqld]のセクションに以下の内容を追記。


# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf

[client]
# Default is Latin1, if you need UTF-8 set this (also in server section)
#default-character-set = utf8

[mysqld]
#
# * Character sets
#
# Default is Latin1, if you need UTF-8 set all this (also in client section)
#
#character-set-server = utf8
#collation-server     = utf8_general_ci
#character_set_server = utf8
#collation_server     = utf8_general_ci


# スレーブからもアクセスできるように変更
bind-address = 0.0.0.0
# スレーブと重複しないIDを採番号
server-id = 1
# ログの出力パス
log_bin = /var/log/mysql/mariadb-bin.log
# ログを保存する日数
expire_logs_days = 10




編集がおわったらデータベースを再起動。


# service mysql restart





データベースの読み書きを「FLUSH TABLES WITH READ LOCK」でロック


# mysql -uroot -pP@ssw0rd
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)




バイナルログファイル名とポジションを「SHOW MASTER STATUS」で確認。
メモしておきます。


MariaDB [(none)]> SHOW MASTER STATUS;
+--------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 |     314 |             |                 |
+--------------------+----------+--------------+------------------+
1 row in set (0.00 sec)




データベースのフルバックアップを取得します。


# mysqldump -uroot -pP@ssw0rd --all-databases --lock-all-tables > /tmp/dbdump.db




バックアップが終わったら「UNLOCK TABLES」でロックを開放します。


MariaDB [(none)]> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)




取得したバックアップファイルをスレーブにコピーします。
今回はsftpコマンドを使用しました。


# cd /tmp/
# sftp root@192.168.1.103
sftp> cd /tmp
sftp> put dbdump.db







スレーブの設定




マスターのバックアップを復元します。


# mysql -uroot -pP@ssw0rd < /tmp/dbdump.db




mariadb.cnfを編集。


# vi /etc/mysql/conf.d/mariadb.cnf




[mysqld]セクションにスレーブの設定を追記します。


[mysqld]
#
# * Character sets
#
# Default is Latin1, if you need UTF-8 set all this (also in client section)
#
#character-set-server = utf8
#collation-server     = utf8_general_ci
#character_set_server = utf8
#collation_server     = utf8_general_ci

# 確認用に外部からアクセスできるように変更
bind-address = 0.0.0.0
# スレーブと重複しないIDを採番号
server-id = 2
# ログの出力パス
log_bin = /var/log/mysql/mariadb-bin.log




編集がおわったらデータベースサービスを再起動。


# service mysql restart




マスターで確認したバイナリログファイル名とポジションを設定します。


CHANGE MASTER TO MASTER_HOST='192.168.1.101',
MASTER_PORT=3306, MASTER_USER='repl',
MASTER_PASSWORD='P@ssw0rd',
MASTER_LOG_FILE='mariadb-bin.000002',
MASTER_LOG_POS=314;




実際にコマンドを実行した時の様子はこんな感じでした。


MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.1.101',
    -> MASTER_PORT=3306, MASTER_USER='repl',
    -> MASTER_PASSWORD='P@ssw0rd',
    -> MASTER_LOG_FILE='mariadb-bin.000002',
    -> MASTER_LOG_POS=314;
Query OK, 0 rows affected (0.21 sec)




「START SLAVE」でスレーブとしての動作を開始します。


MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.00 sec)






確認



マスターで「SHOW MASTER STATUS」を実行。
バイナリログのファイル名とポジションを確認します。


MariaDB [(none)]> SHOW MASTER STATUS;
+--------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 |     314 |             |                 |
+--------------------+----------+--------------+------------------+
1 row in set (0.00 sec)





スレーブで「SHOW SLAVE STATUS\G」を実行。
Slave_IO_RunningとSlave_SQL_RunningがYes。
Master_Log_File と Read_Master_Log_Pos がマスターで確認したFile、Positionと一致していれば成功です。


MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                 Master_Host: 192.168.1.101
                 Master_User: repl
                 Master_Port: 3306
                Connect_Retry: 60
             Master_Log_File: mariadb-bin.000002
         Read_Master_Log_Pos: 314
             Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 537
        Relay_Master_Log_File: mariadb-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
             Replicate_Do_DB:
         Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
     Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
                 Skip_Counter: 0
         Exec_Master_Log_Pos: 314
             Relay_Log_Space: 835
             Until_Condition: None
             Until_Log_File:
                Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
             Master_SSL_Cert:
            Master_SSL_Cipher:
             Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
             Last_SQL_Errno: 0
             Last_SQL_Error:
Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
             Master_SSL_Crl:
         Master_SSL_Crlpath:
                 Using_Gtid: No
                 Gtid_IO_Pos:
1 row in set (0.00 sec)







動作確認



マスターのtestテーブル。


MariaDB [sample]> select * from test;
+----+-------+
| id | item |
+----+-------+
| 1 | test1 |
| 2 | test2 |
+----+-------+




スレーブのtestテーブル。


MariaDB [sample]> select * from test;
+----+-------+
| id | item |
+----+-------+
| 1 | test1 |
| 2 | test2 |
+----+-------+




マスター側でレコードを追加します。


MariaDB [sample]> insert into test (id, item) values (3, 'test3');
Query OK, 1 row affected (0.05 sec)




スレーブでselectするとちゃんとマスターで追加したレコードが表示されました。


MariaDB [sample]> select * from test;
+----+-------+
| id | item |
+----+-------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
+----+-------+





再度マスターで「SHOW MASTER STATUS」


MariaDB [sample]> SHOW MASTER STATUS;
+--------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 |     845 |             |                 |
+--------------------+----------+--------------+------------------+
1 row in set (0.00 sec)




スレーブで「SHOW SLAVE STATUS\G」


MariaDB [sample]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                 Master_Host: 192.168.1.101
                 Master_User: repl
                 Master_Port: 3306
                Connect_Retry: 60
             Master_Log_File: mariadb-bin.000002
         Read_Master_Log_Pos: 845
             Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 1068
        Relay_Master_Log_File: mariadb-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
             Replicate_Do_DB:
         Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
     Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
                 Skip_Counter: 0
         Exec_Master_Log_Pos: 845
             Relay_Log_Space: 1366
             Until_Condition: None
             Until_Log_File:
                Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
             Master_SSL_Cert:
            Master_SSL_Cipher:
             Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
             Last_SQL_Errno: 0
             Last_SQL_Error:
Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
             Master_SSL_Crl:
         Master_SSL_Crlpath:
                 Using_Gtid: No
                 Gtid_IO_Pos:




ちゃんと同期されているようですね。



【参考URL】

[MySQL][MariaDB] DBのレプリケーション構築手順

MariaDB はじめてのMariaDB 【第10回 レプリケーションサーバの構築】


関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2016/08/09(火) 23:09:34|
  2. MySQL
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Cassandra 3.7をDebian 8.5(jessie)にaptでインストールする | ホーム | Eclipse NeonにMercurialプラグイン(mercurialeclipse)をインストールする>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1915-55a151bd
この記事にトラックバックする(FC2ブログユーザー)