编写配置文件docker-compose.yml
version: "3"
services:
mysql-master:
image: mysql:5.7.22
restart: always
hostname: mysql-master
container_name: mysql_master
ports:
- 3316:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
volumes:
- ./master/mysql/data:/var/lib/mysql
- ./master/mysql/log:/var/log/mysql
command:
--server_id=100
--log-bin=mysql-master-bin
--sync_binlog=1
--binlog-ignore-db=mysql
--binlog_format=mixed
--expire_logs_days=7
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
links:
- mysql-slave-read
mysql-slave-read:
image: mysql:5.7.22
restart: always
hostname: mysql-slave-read
container_name: mysql-slave-read
ports:
- 3317:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
volumes:
- ./slave/mysql/data:/var/lib/mysql
- ./slave/mysql/log:/var/log/mysql
command:
--server_id=200
--read_only=1
--binlog-ignore-db=mysql
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
mysql-slave-back:
image: mysql:5.7.22
restart: always
hostname: mysql-slave-back
container_name: mysql-slave-back
ports:
- 3318:3306
environment:
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Shanghai
volumes:
- ./slave-back/mysql/data:/var/lib/mysql
- ./slave-back/mysql/log:/var/log/mysql
command:
--server_id=300
--log-bin=slave-back-bin
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
构建mysql镜像和mysql容器
docker-compose up --build -d
主从数据库创建操作:
# 创建主从复制的账号
grant replication slave on *.* to 'slave'@'%' identified by '123456';
FLUSH TABLES WITH READ LOCK
SHOW MASTER STATUS
UNLOCK TABLES
从表数据库创建操作:
STOP SLAVE
change master to
master_host="mysql-master",
master_user="root",
master_password="root",
master_log_file="mysql-master-bin.000003",
master_log_pos=706;
show slave status
START SLAVE
SHOW SLAVE STATUS
RESET SLAVE