1、下载mysql镜像(略)。
2、启动容器
docker run -itd --name=master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=admin -v /d/demo/mysql/master/conf/my.cnf:/etc/mysql/my.cnf mysql
docker run -itd --name=slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=admin -v /d/demo/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf mysql
注意:配置文件设置为只读
3、修改配置文件
主
[mysqld]
## 设置server_id,注意要唯一
server-id=100
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-bin
从
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
4、主配置
docker exec -it master bash
执行sql
CREATE USER 'slave'@'%' IDENTIFIED WITH 'mysql_native_password' BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
注意:mysql8.0默认使用caching_sha2_password,会导致从连接失败,改为mysql_native_password
查看binlog文件、复制位置
show master status;
5、从配置
docker exec -it master bash
执行sql
change master to master_host='192.168.10.7',master_user='slave',master_password='123456',master_log_file='mysql-bin.000007',master_log_pos=157,master_port=3307, master_connect_retry=30;
注意
- ip地址使用宿主机ip地址
- master_log_file、master_log_pos使用主查询的结果
开启复制
start slave
查看状态
show slave status\G;
6、测试脚本
create database test;
CREATE TABLE IF NOT EXISTS `user`(
`user_id` INT UNSIGNED AUTO_INCREMENT,
`user_name` VARCHAR(100) NOT NULL,
`user_date` DATE,
PRIMARY KEY ( `user_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
7、失败后重试
主
flush logs
show master status
从
stop slave;
change master to master_host='192.168.10.7',master_user='slave',master_password='123456',master_log_file='mysql-bin.000007',master_log_pos=157,master_port=3307, master_connect_retry=30;
start slave;
show slave status;
8、连接docker mysql
mysql -h192.168.10.7 -P3307 -uslave -p123456