Docker实现MySQL8主从读写分离【超简洁】

1、首先拉取镜像

docker pull mysql

2、创建主库容器

docker run -p 3388:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql --server-id=1 --log-bin=bin-log --binlog-do-db=znzm-dlaq

说明:

  • docker run  表示创建并运行容器
  • -p 3388:3306  把宿主机的3388端口映射到容器的3306端口
  • --name master  表示给这个容器取个名字叫 master
  • -e MYSQL_ROOT_PASSWORD=123456  设置 root 用户的密码
  • -d mysql 字母d是detach的首字母,表示后台静默运行
  • --server-id=1  设置唯一id
  • --log-bin=bin-log  设置binlog日志文件名,因为主从复制是通过这个日志来传输
  • --binlog-do-db=znzm-dlaq  对应要复制的数据名(!主从读写分离主要使用该数据库)
     

 3、创建从库容器

docker run -p 3389:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql --server-id=2 --relay-log=mysql-relay --read-only=1

说明:

  • --server-id=2  设置唯一id
  • --relay-log=mysql-relay  relay-log日志文件名,因为主从复制时去主库复制过来后,会先写入这个本机日志,然后再写入sql库里
  • --read-only=1  表示从库,只读不能写

4、在master主库中创建主从读写分离账户

进入主库,密码是123456 

docker exec -it master /bin/bash
mysql -u root -p

下面是创建主从读写分离账户,可自定义: 

# 创建一个用户名slave1,密码123456
CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';
# 授权
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
#此语句必须执行。否则报错
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 使权限生效
flush privileges;

查询主库的状态,并记录下File和Position的值,下面从库连接主库时要用。

show master status;

Crtl+D退出容器,查看主库容器本地ip。

docker inspect --format={
   
   {.NetworkSettings.IPAddress}} master

5、进入slave从库中,配置主从连接

进入从库,密码是123456 

docker exec -it slave /bin/bash
mysql -u root -p

配置主从连接

CHANGE MASTER TO MASTER_HOST='172.17.0.2', MASTER_PORT=3306,MASTER_USER='slave1', MASTER_PASSWORD='123456', MASTER_LOG_FILE='bin-log.000003', MASTER_LOG_POS=1145; 

说明:

  • MASTER_HOST='172.17.0.2'     本机容器的ip
  • MASTER_PORT=3306    容器的ip
  • MASTER_LOG_FILE='bin-log.000003'    主库File
  • MASTER_LOG_POS=1145;      主库Position

启动主从同步:

START SLAVE;

 执行sql语句,检查主从同步是否搭建成功

SHOW SLAVE STATUS\G;

如果有异常,请停止主从同步后,重新配置

stop slave;
reset slave;

6、在主库中创建znzm-dlaq数据库测试从库是否同步

!!!注意:是从库读取主库的日志来操作,不要颠倒 

猜你喜欢

转载自blog.csdn.net/yueyue763184/article/details/129966886