LoginSignup
0
1

Ubuntu上でMySQL8.0のレプリケーション設定

Posted at

開発環境

仮想環境: AWSのEC2インスタンス
OS: Ubuntu 22.04 LTS
ミドルウェア: MySQL 8.0

マスター側の設定

スーパーユーザーの権限でコマンドを実行するため、以下のコマンドを実行

sudo su

サーバのパッケージインデックスを更新

apt update

mysql-serverパッケージをインストール

apt install mysql-server -y

/var/lib/mysql配下のpemファイルを確認

ll /var/lib/mysql/*.pem

-rw------- 1 mysql mysql 1705 Nov 15 01:26 /var/lib/mysql/ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 Nov 15 01:26 /var/lib/mysql/ca.pem
-rw-r--r-- 1 mysql mysql 1112 Nov 15 01:26 /var/lib/mysql/client-cert.pem   ←クライアント証明書
-rw------- 1 mysql mysql 1705 Nov 15 01:26 /var/lib/mysql/client-key.pem
-rw------- 1 mysql mysql 1705 Nov 15 01:26 /var/lib/mysql/private_key.pem
-rw-r--r-- 1 mysql mysql  452 Nov 15 01:26 /var/lib/mysql/public_key.pem
-rw-r--r-- 1 mysql mysql 1112 Nov 15 01:26 /var/lib/mysql/server-cert.pem   ←サーバ証明書
-rw------- 1 mysql mysql 1705 Nov 15 01:26 /var/lib/mysql/server-key.pem    ←サーバの鍵ファイル  

mysqld.cnfを開く

vi /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]ブロックに以下を記述

[mysqld]

#bind-address            = 127.0.0.1
bind-address            = *

server-id=1
log-bin

ssl-ca = /var/lib/mysql/client-cert.pem      #クライアント証明書
ssl-cert = /var/lib/mysql/server-cert.pem    #サーバ証明書
ssl-key = /var/lib/mysql/server-key.pem      #サーバの鍵ファイル

MySQLを起動

systemctl start mysql

MySQLにログイン

mysql

SSL対応の確認 →have_openssl と have_ssl が YES になっていれば完了

mysql> show variables like '%ssl%'; 

 have_openssl    | YES                            
 have_ssl        | YES

以下のコマンドでレプリカ用のユーザを作成

mysql> CREATE USER 'repl'@'replica_host' IDENTIFIED BY 'password';

全ての権限を付与

mysql> GRANT ALL ON *.* TO 'repl'@'replica_host' WITH GRANT OPTION;

変更を反映

FLUSH PRIVILEGES;

マスターサーバのバイナリログファイルに関するステータス情報を確認
→File と Position はレプリカ側の設定で使用する

mysql> show master status\G

*************************** 1. row ***************************
             File: primary-bin.000005
         Position: 157
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

レプリカ側の設定

マスター側と同じ手順でMySQLをインストール

sudo su
apt update
apt install mysql-server -y

mysqld.cnfを開く

vi /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]ブロックに以下を記述

[mysqld]

#bind-address           = 127.0.0.1
bind-address            = *

server-id=2   #マスタサーバと被らないように注意
log-bin
read_only   

ssl-ca = /var/lib/mysql/client-cert.pem      #クライアント証明書
ssl-cert = /var/lib/mysql/server-cert.pem    #サーバ証明書
ssl-key = /var/lib/mysql/server-key.pem      #サーバの鍵ファイル

MySQLを起動

systemctl start mysql

MySQLにログイン

mysql

SSL対応の確認

mysql> show variables like '%ssl%'; 

 have_openssl    | YES                            
 have_ssl        | YES

マスターサーバの情報を記述

 mysql> CHANGE MASTER TO
-> MASTER_HOST='マスター側のIPまたはドメイン名',
-> MASTER_PORT=3306,
-> MASTER_USER='repl',
-> MASTER_PASSWORD='password',
-> MASTER_LOG_FILE='show master status\Gコマンドの実行結果(File)',
-> MASTER_LOG_POS=show master status\Gコマンドの実行結果(Position),
-> MASTER_SSL = 1;

レプリケーションスレッドを起動

mysql> START REPLICA;

ソースとレプリカとの間にエラーがないかを確認
→Replica_IO_Running と Replica_SQL_Running が Yes になっていれば完了

mysql> SHOW REPLICA STATUS\G

 Replica_IO_Running: Yes
 Replica_SQL_Running: Yes

読み取り専用として作動させる際には、以下のコマンドを実行

mysql> FLUSH TABLES WITH READ LOCK;

※読み取り専用のロックを解除したいときは、以下のコマンドを実行

mysql> UNLOCK TABLES;

参考文献

MySQL 8.0 ではGRANT、IDENTIFIED BYでユーザーを作成するとエラー
https://urashita.com/archives/35970

MySQL8.0で新たに追加されているレプリケーション接続オプション
https://blog.s-style.co.jp/2020/03/5861/

17.3.1 暗号化接続を使用するためのレプリケーションの設定
https://dev.mysql.com/doc/refman/8.0/ja/replication-solutions-encrypted-connections.html

6.3.1 暗号化接続を使用するための MySQL の構成
https://docs.oracle.com/cd/E17952_01/mysql-8.0-ja/using-encrypted-connections.html

MySQL 8.0 : SSL/TLS の設定
https://www.server-world.info/query?os=Ubuntu_20.04&p=mysql8&f=2

17.4.1.3 ソースまたはレプリカを読取り専用にすることによるバックアップ
https://dev.mysql.com/doc/refman/8.0/ja/replication-solutions-backups-read-only.html

0
1
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
1