MySQL 8.0.26 を YUM でインストールし、GTID を使った主従レプリケーションを構成する

CentOS 7.9 環境において MySQL 8.0.26 を YUM でインストールし、GTID ベースのマスター・スレーブレプリケーションを設定する手順を示す。クラウド環境の普及により自前でのデータベース構築は減っているが、オンプレミスや特定用途では依然として必要となる。

YUM リポジトリの設定

まず、MySQL 公式リポジトリ RPM をダウンロードしてインストールする:
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum install -y mysql80-community-release-el7-3.noarch.rpm
sudo yum clean all
sudo yum makecache
デフォルトでは MySQL 8.0 が有効になっているため、特に変更しない場合はそのまま進める。もし別のバージョンが必要であれば、yum-config-manager で無効化・有効化を行う。

MySQL サーバーのインストールと初期設定

sudo yum install -y mysql-community-server
sudo systemctl start mysqld
初期パスワードはログファイルに記録されている:
sudo grep 'temporary password' /var/log/mysqld.log
例:
[Server] A temporary password is generated for root@localhost: yLd%fk8ALKfu
このパスワードを使ってログインし、パスワードを変更する:
mysql -u root -p'yLd%fk8ALKfu'
その後、ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード'; で再設定。

データディレクトリの移動

データを /data などの専用ディスクに移動する場合:
sudo systemctl stop mysqld
sudo cp -rf /var/lib/mysql /data/
sudo chown -R mysql:mysql /data/mysql

my.cnf の設定(マスターサーバー)

/etc/my.cnf を以下のように編集:
[mysqld]
port = 8177
datadir = /data/mysql
socket = /data/mysql/mysql.sock
log-error = /data/mysql/mysqld.log
pid-file = /data/mysql/mysqld.pid

character-set-server = utf8
init_connect = 'SET NAMES utf8'
default-storage-engine = InnoDB
default-authentication-plugin = mysql_native_password

server-id = 1001
log-bin = mysql_master_bin
binlog_format = MIXED
expire_logs_days = 180
max_binlog_size = 100M
binlog_cache_size = 4M
max_binlog_cache_size = 512M

gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON

binlog-ignore-db = sys
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog-do-db = test

[client]
port = 8177
socket = /data/mysql/mysql.sock
default-character-set = utf8

スレーブサーバーの my.cnf 設定

スレーブ側も同様に設定し、server-id を一意にする(例:1002):
server-id = 1002
log-bin = mysql_slave_bin
その他の設定はマスターとほぼ同一。

レプリケーションユーザーの作成(マスター側)

CREATE USER 'repl_user'@'192.168.199.%' IDENTIFIED WITH mysql_native_password BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.199.%';

マスターのバイナリログ情報を確認

SHOW MASTER STATUS;
出力例:
+------------------------+----------+--------------+------------------+-------------------+
| File                   | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------------+----------+--------------+------------------+-------------------+
| mysql_master_bin.000009|      196 | test         | ...              | ...               |
+------------------------+----------+--------------+------------------+-------------------+

スレーブ側でのレプリケーション設定

スレーブサーバーで以下のコマンドを実行:
CHANGE MASTER TO
  MASTER_HOST='192.168.199.198',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='SecurePass123!',
  MASTER_PORT=8177,
  MASTER_AUTO_POSITION=1;

START SLAVE;
GTID モードが有効なため、MASTER_LOG_FILEMASTER_LOG_POS の代わりに MASTER_AUTO_POSITION=1 を使用する。

確認

スレーブの状態を確認:
SHOW SLAVE STATUS\G
Slave_IO_Running および Slave_SQL_RunningYes であれば正常。

タグ: MySQL GTID Replication Yum CentOS

8月14日 02:12 投稿