docker-compose配置 mysql 一主一从
编写 mysql-master 的 compose 文件
version: '3.1'
services:
mysql:
restart: always
image: mysql:5.7.25 # 镜像版本
container_name: mysql-master #docker 实例名称
ports:
- 3307:3306 # 端口映射 暴露端口:内部端口
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456 # root账号的密码
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
--server-id=47
--log_bin=master-bin
--log_bin-index=master-bin.index
--skip-name-resolve
--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
volumes:
- ./data:/var/lib/mysql
编写 mysql-slave 的 compose 文件
version: '3.1'
services:
mysql:
restart: always
image: mysql:5.7.25
container_name: mysql-slave
ports:
- 3308:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
--server-id=48
--relay-log-index=slave-relay-bin.index
--relay-log=slave-relay-bin
--log-bin=mysql-bin
--log-slave-updates=1
--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
volumes:
- ./data:/var/lib/mysql
查看 mysql-master 的状态
SHOW MASTER STATUS;
配置 mysql-slave
设置 master 连接
MASTER_LOG_FILE 以及 MASTER_LOG_POS 这两个的配置一定要和 show master status
中查看到的一致!!!
不然就会出现 Slave_IO_Running
状态为 NO
!!!
CHANGE MASTER TO
MASTER_HOST='192.168.148.139',
MASTER_PORT=3307,
MASTER_USER='root',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000004', -- 与 show master status 查出来的 File 要一致
MASTER_LOG_POS=1681; -- 与 show master status 查出来的 position 要一致
启动 slave
START SLAVE;
查看 slave 状态
-- 方式一
SHOW SLAVE STATUS;
-- 方式二
SHOW SLAVE STATUS \G;
我这里用的是方式一