LoginSignup
0
2

MySQL8.0とDockerを使ったレプリケーション

Last updated at Posted at 2024-05-20

私の環境
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

参考
https://qiita.com/igossou/items/9ee11e98c25132e60e1c

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