MariaDBのマスタースレーブ構成 【CentOS 7】

2021-07-12

MariaDBでのマスタースレーブでのレプリケーション構成

マスタースレーブでの冗長構成は、サーバーが2台以上構成で、1台がMasterとなり2台目以降をSlaveとなり、マスターサーバーの更新内容が、各スレーブサーバのDBに反映するレプリケーション構成です

MariaDBのインストール

マスターサーバー・スレーブサーバとも、yum にMariaDBをインストールします

$ sudo yum install mariadb mariadb-server mariadb-devel  mariadb-libs

MariaDBをインストールしたら、MariaDBの自動起動の設置及びサービス起動します

$ sudo systemctl enable mariadb.service
$ sudo systemctl start mariadb
$ sudo systemctl list-unit-files -t service | grep mariadb
mariadb.service                                 enabled

MariaDBが起動したらDBの初期設定をします。

$ sudo /usr/bin/mysql_secure_installation

マスターサーバーのMariaDBの初期設定

マスターサーバーの設定を下記のようにおこないます。

  • log-bin=mysql-bin  レプリケーション構成で必要なバイナリログを有効にする
  • server-id=101  レプリケーション構成内の被らないようにIDを振ります。IPアドレスの末尾などでもいいかと思います
  • expire_logs_days=5  バイナリログの保存日数
$ sudo vi /etc/my.cnf.d/server.cnf 
[mysqld]
log-bin=mysql-bin
server-id=101
expire_logs_days=5

# 設定ファイルの内容を変更したらサービスの再起動をおこないます
$ sudo systemctl restart mariadb

レプリケーションユーザー作成します

# mysql -u root -p
MariaDB [(none)]> grant replication slave on *.* to ユーザー名@'%' identified by 'パスワード';
MariaDB [(none)]> flush privileges;

バイナリログのポジションを確認します

$ mysql -u root -p

# 書き込みを行わないようにDBをロックします
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

# バイナリログのポジションを確認します
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      387 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

DBの内容をダンプしてダンプファイルを転送します

$ sudo mysqldump -u root -p --all-databases --lock-all-tables > /var/tmp/dbdump.db
Enter password: 

# ダンプファイルをスレーブサーバに転送します
$ scp /var/tmp/dbdump.db ユーザー名@IPアドレス:/var/tmp

ダンプファイルを転送したらDBのロックを解除します

$ mysql -u root -p
MariaDB [(none)]> unlock tables;

スレーブサーバーのMariaDBの初期設定

スレーブサーバーの設定を下記のようにおこないます。

  • log-bin=mysql-bin  レプリケーション構成で必要なバイナリログを有効にする
  • server-id=102  レプリケーション構成内の被らないようにIDを振ります。IPアドレスの末尾などでもいいかと思います
  • read_only=1  書き込みを行わないようにリードオンリーに設定します
# vi /etc/my.cnf.d/server.cnf 
[mysqld]
server-id=102
log-bin=mysql-bin
read_only=1

# 設定ファイルの内容を変更したらサービスの再起動をおこないます
$ sudo systemctl restart mariadb

スレーブサーバーの設定を終わったらマスターサーバーDBのインポートします

# mysql -u root -prad31cdk6 < /var/tmp/dbdump.db

マスターサーバーのホスト名(IPアドレス)とポート番号、レプリケーションのユーザーとパスワード、マスターサーバーで確認したバイナリログのFileとPositionを設定します。

# mysql -u root -p

MariaDB [(none)]> change master to
 master_host='IPアドレス(ホスト名)', 
 master_user='ユーザー名', 
 master_password='パスワード',
 master_log_file='mysql-bin.000002',
 master_log_pos=387;

# 設定したらスレーブのレプリケーションを開始します
MariaDB [(none)]>start slave;

「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: www01
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 387
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 529
        Relay_Master_Log_File: mysql-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: 387
              Relay_Log_Space: 825
              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: 101
1 row in set (0.00 sec)

 

LinuxCentOS 7,mariadb

Posted by admin