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_FILE や
MASTER_LOG_POS の代わりに
MASTER_AUTO_POSITION=1 を使用する。
確認
スレーブの状態を確認:
SHOW SLAVE STATUS\G
Slave_IO_Running および
Slave_SQL_Running が
Yes であれば正常。