1、启动3个Mysql 容器
使用docker-compose.yml 配置如下
version: "3"
services:
mysql-master:
image: mysql:8.0.25
ports:
- 33061:3306
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_0900_ai_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--local_infile=1
--log_bin_trust_function_creators=TRUE
environment:
- MYSQL_ROOT_PASSWORD=Mysoft95938
security_opt:
- seccomp:unconfined
volumes:
- ./mysql/data/master:/var/lib/mysql
mysql-slave1:
image: mysql:8.0.25
ports:
- 33062:3306
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_0900_ai_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--local_infile=1
--log_bin_trust_function_creators=TRUE
environment:
- MYSQL_ROOT_PASSWORD=Mysoft95938
security_opt:
- seccomp:unconfined
volumes:
- ./mysql/data/slave1:/var/lib/mysql
mysql-slave2:
image: mysql:8.0.25
ports:
- 33063:3306
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_0900_ai_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--local_infile=1
--log_bin_trust_function_creators=TRUE
environment:
- MYSQL_ROOT_PASSWORD=Mysoft95938
security_opt:
- seccomp:unconfined
volumes:
- ./mysql/data/slave2:/var/lib/mysql
启动命令docker-compose up
2、配置主容器
进入主Mysql容器docker exec -it <容器id> /bin/bash 修改 /etc/mysql/my.cnf 加入下面配置
#binlog 的复制方式混合
inlog_format = MIXED
# 服务唯一id
server-id=100
# 开启二进制日志
log-bin=mysql-bin
3、exit 命令退出容器 重启容器docker restart <容器id>
4、进入主Mysql 容器,进入数据库mysql -u root -p <数据库密码>
5、创建复制账号
CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave1'@'%';
6、查询主容器Mysql 文件位置点
show master status;
7、配置从库文件
进入从库Mysql修改 /etc/mysql/my.cnf 加入下面配置
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
8、退出容器重启
9、进入从容器Mysql告诉从容器要复制的主库以及日志还有文件的位置点
change master to master_host='172.17.0.2', master_user='slave1', master_password='123456', master_port=33061, master_log_file='mysql-bin.000001', master_log_pos= 683, master_connect_retry=30;
10、查看从库复制的状态
show slave status \G;
11、启从库复制 start slave; 如果I/O 线程和SQL 线程为YES 说明复制开启成功
Slave_IO_Running:YES
Slave_SQL_Running:YES