当前位置: 首页 > article >正文

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数据库测试从库是否同步

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


http://www.kler.cn/a/8148.html

相关文章:

  • Windows内核开发环境配置
  • pyinstaller打包资源文件和ini配置文件怎么放
  • 干货分享:ISO 20000认证的适用范围、认证资料清单、认证流程等问题详解
  • [Unity]Unity集成NuGet-连接mysql时的发现
  • Java基础面试题19:解释什么是Servlet链
  • 《计算机组成及汇编语言原理》阅读笔记:p48-p81
  • 美团后端开发暑期实习一面
  • 导入 Excel 文件时,抛出 413 (Request Entity Too Large) 错误
  • 【SQL开发实战技巧】系列(四十):Oracle12C常用新特性☞可以在同样的列(列组合)上创建多个索引以及可以对DDL操作进行日志记录
  • 软件测试岗,4 轮面试成功拿下字节 Offer..........
  • Linux学习[5]---shell脚本之bash脚本---判断选择循环
  • 高效自动化测试框架-优秀实践03-使用SeleniumGrid
  • unity,欧拉角
  • HashMap源码分析小结
  • python好玩的短代码
  • 不负期待,载誉收官 | 迅镭激光2023ITES深圳展圆满落幕!
  • 轻轻松松编译 Jmeter 源码,再也不求人
  • Leetcode.130 被围绕的区域
  • 继承(C++)
  • Spring-aop面向切面
  • Tomcat使用https配置实战
  • chatGPT中国入口-ChatGPT评论文章-ChatGPT怎么用
  • 多线程冲突处理方法,锁
  • 首届“兴智杯”产业赛收官,文心大模型助推产业创新
  • 量化注意事项和模型设计思想
  • rsync远程同步实现快速、安全、高效的异地备份