【Mysql】Database初心者が構築したレプリケーション環境

  • URLをコピーしました!
目次

はじめに

こんにちは。ネットワークエンジニアの「だいまる」です。

最近、ネットワークだけでなくセキュリティやデータベース、AI、DNSといった異なる分野の勉強もしているので、そのアウトプットをちょいちょいしていきたいと思います。

レプリケーションとは?

レプリケーションとは?

レプリケーションとは、「同じデータを持った複数のデータベースによる可用性向上や負荷分散手法の1つ」です。

レプリケーションは、主に更新可能な「マスタデータベース」読込のみ可能な「スレーブデータベース」2種類があります。

レプリケーション方法

レプリケーションの方法には、「シングルマスタ」と「マルチマスタ」の2つがあります。

シングルマスタ

主に「シングルマスタ」が用いられることが多く、これは「マスターデータベースが1つ、その他は読み取り専用のスレーブデータベース」の構成です。

マスターデータベースが1つのため、データの一貫性は保てますが、アプリケーション側の設計考慮が必要となり、処理速度の低下がデメリットとなります。

【令和8~9年】情報処理教科書 データベーススペシャリスト 2026~2027年版
〜2025年度売上第1位! 17年間選ばれ続ける最強の定番書!〜

マルチマスタ

もう1つは、複数のマスターデータベースを構成する「マルチマスタ」があります。

おうちで学べるデータベースのきほん
〜データベースの仕組みや考え方をクラウド&PCで動かしながら学ぶ!!〜

レプレケーションの構築方法

今回、シングルマスタでのレプリケーションを構築してみたので、その方法を紹介します。

Step1:マスタDBの設定

最初に実施することは、マスタDB側の「my.cnf」の変更です。

MariaDBを使っている場合は「 /etc/mysql/mariadb.conf.d/50-server.cnf」の場合もあります。

変更内容は以下の3行となります。(特にserver-id)

[mysqld]
server-id               = 1 #DBに紐づけるサーバID指定
log_bin                = /var/log/mysql/mysql-bin.log
bind-address = 10.1.1.1 #DBに紐づけるIPアドレスの指定

Bind-AddressはSlave DBからアクセスする際に指定するIPアドレスです!

上記設定を終えた後はスレーブDBがアクセスするためのユーザを作成します。

mysql> CREATE USER 'ユーザ名'@'アクセスで利用するアドレス' IDENTIFIED BY 'パスワード';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'ユーザ名'@'アクセスで利用するアドレス';

上記コマンドで登録することで完了します。

イメージがつきにくいと思うので、具体例も記載したいと思います。

mysql> CREATE USER 'daimaru'@'10.1.1.1' IDENTIFIED BY 'daimaru_passwd';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'daimaru'@'10.1.1.1';

この設定ではスレーブDBから「ユーザ:daimaru、宛先:10.1.1.1」のアクセスに対するユーザを作成することになります。

そして、設定を終えた後は、バックアップ用のDBを作成します。

mysqldump -u root -p<root用パスワード> -x --all-databases  > "バックアップファイル名.sql"

上記でバックアップ用DBを作成後は、このバックアップファイルをスレーブDBに転送し、スレーブDBを構築するサーバにログインします。

Step2:スレーブDBの設定

マスタDBの設定を終えた後は「スレーブDBの設定」になります。

最初に行うべきことは、こちらも「my.cnf」の設定変更になります。

こちらも基本的に変更内容は同じですが、server-idのID値とスレーブDBと認識させるための「read-only」が異なる点となります。

[mysqld]
server-id               = 2 #DBに紐づけるサーバID指定
log_bin                = /var/log/mysql/mysql-bin.log
read_only

上記設定を終えた後は、マスタDBでバックアップ生成したファイルをリストアします。

mysql -u root -p<rootパスワード> < バックアップファイル名.sql

リストア後にやるべきことは「スレーブDBの設定」です。

mysql> CHANGE MASTER TO
-> MASTER_HOST='10.1.1.1', #マスタDBのIPアドレス指定(今回の例では10.1.1.1)
-> MASTER_PORT=3306, #マスタDBのポート番号指定(デフォルトは3306)
-> MASTER_USER='repl', #マスタDBアクセス用のユーザ名
-> MASTER_PASSWORD='repl9999', #上記ユーザのパスワード指定
-> MASTER_LOG_POS=1277; #マスタDBのPOS番号指定

「MASTER_LOG_POS」で指定する番号は、マスタDB側で以下コマンドで確認することができます。

MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000317 |     1043 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

上記設定後は、「mysql> START SLAVE;」でSLAVEDBとして起動させます。

これでマスタDBとスレーブDBの構築は完了です。

最後にスレーブDBの状態確認を行います。

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 10.1.1.1
                   Master_User: daimaru
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000317
           Read_Master_Log_Pos: 1043
                Relay_Log_File: mysqld-relay-bin.000627
                 Relay_Log_Pos: 1342
         Relay_Master_Log_File: mysql-bin.000317
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
              Master_Server_Id: 1
                 Parallel_Mode: optimistic
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
              Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 1450
1 row in set (0.000 sec)

上記の状態であれば、問題なしとなります。

リレーショナルデータベース入門: データモデル・SQL・管理システム・NoSQL
〜リレーショナルデータベースを効率的に学べる本!〜

最後に

今回の構築方法の紹介はいかがでしたか?

ネットワークだけでなく様々な分野についてもちょっとずつ勉強したことをアウトプットしていきたいと思います。

もしみなさんの参考になれれば幸いです。

  • URLをコピーしました!

この記事を書いた人

目次