windows下使用docker 搭建mysql主从

157 阅读1分钟

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;

image.png

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;

image.png 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