私の環境
Windows11、WSL2、ubuntu24.04です。
docker composeでレプリケーションをしたくていろいろ試した。
できたので載せました。
tree
├── db01
│ └── my.cnf
├── db02
│ └── my.cnf
└── docker-compose.yml
docker-compose.yml
version: "3.9"
services:
db01:
image: mysql:8.0.33
ports:
- 3307:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Tokyo/Japan
volumes:
- ./db01/my.cnf:/etc/my.cnf
networks:
db_net:
ipv4_address: 192.168.10.11
db02:
image: mysql:8.0.33
ports:
- 3308:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Tokyo/Japan
volumes:
- ./db02/my.cnf:/etc/my.cnf
networks:
db_net:
ipv4_address: 192.168.10.12
networks:
db_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.10.0/24
/db01/my.cnf
[client]
port=3306
socket=/var/run/mysqld/mysqld.sock
[mysqld]
default_authentication_plugin=mysql_native_password
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# master用設定
server_id=1001
port=3306
# バイナリログ設定
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_rows_query_log_events=ON
relay_log_recovery=ON
/db02/my.cnf
[client]
port=3306
socket=/var/run/mysqld/mysqld.sock
[mysqld]
default_authentication_plugin=mysql_native_password
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# slave用設定
server_id=1002
port=3306
read_only=ON
report_host=db02
# バイナリログ設定
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_rows_query_log_events=ON
relay_log_recovery=ON
docker compose up -d
マスターのコンテナに入ってMySQLにログインします。
docker compose exec db01 bash
mysql -uroot -proot
mysql>CREATE DATABASE repl_test;
mysql>CREATE USER 'test'@'192.168.10.%' IDENTIFIED BY 'test';
GRANT
SELECT,
INSERT,
UPDATE,
DELETE,
CREATE,
ALTER,
DROP
ON *.* TO 'test'@'192.168.10.%';
mysql>CREATE USER 'repl'@'192.168.10.12' IDENTIFIED BY 'repl';
mysql>GRANT
REPLICATION SLAVE
ON *.* TO 'repl'@'192.168.10.12';
別のターミナルを開いてスレーブコンテナに入ってMySQLにログインします。
docker compose exec db02 bash
mysql -uroot -proot
いよいよレプリカ開始です。
mysql>CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '192.168.10.11',
SOURCE_USER = 'repl',
SOURCE_PASSWORD = 'repl',
SOURCE_AUTO_POSITION = 1;
mysql>START REPLICA;
下記コマンドで確認
mysql>SHOW REPLICA STATUS\G;
下2つがYesならOK!!
Replica_IO_Running: Yes
Replica_SQL_Running: Yes