一、前言

本文将基于Docker部署2台MySQL服务实现主从同步,即主master用于(增删改),从slave用来(查)

二、Docker搭建MySQL实现主从同步

1、master(主)配置

① 创建所需文件夹,用于映射容器相应文件路径
mkdir -p /IT_zhengqing/soft/mysql/mysql-master
mkdir -p /IT_zhengqing/soft/mysql/mysql-master/conf.d
mkdir -p /IT_zhengqing/soft/mysql/mysql-master/data
② 创建my.cnf配置文件
cd /IT_zhengqing/soft/mysql/mysql-master# echo:如果没有这个文件则创建。如果有这个文件,那么新内容将会代替原来的内容
echo '[mysqld]
user=mysql                     # MySQL启动用户
default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎
character-set-server=utf8      # 设置mysql服务端默认字符集
pid-file        = /var/run/mysqld/mysqld.pid  # pid文件所在目录
socket          = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
datadir         = /var/lib/mysql              # 数据文件存放的目录
#log-error      = /var/log/mysql/error.log
#bind-address   = 127.0.0.1                   # MySQL绑定IP
expire_logs_days=7                            # 定义清除过期日志的时间(这里设置为7天)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!# 允许最大连接数
max_connections=200# ================= ↓↓↓ mysql主从同步配置start ↓↓↓ =================
# 同一局域网内注意要唯一
server-id=3310
# 开启二进制日志功能
log-bin=mysql-bin
# ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================[client]
default-character-set=utf8  # 设置mysql客户端默认字符集
' > my.cnf
③ 拉取mysql镜像
docker pull mysql:5.7
④ 运行镜像

温馨小提示:注意开放对应端口以备访问哦~

  1. --name :容器命名为mysql_server_3310
  2. -p :将容器的3306端口映射到宿主机的3310端口
  3. -d : 后台运行
  4. --restart=always : docker重启后,容器也随之启动
  5. -v :目录挂载
  6. -e MYSQL_ROOT_PASSWORD :初始化root账号的密码为root
docker run --name mysql_server_3310 -d -p 3310:3306 --restart=always -v /IT_zhengqing/soft/mysql/mysql-master/data/:/var/lib/mysql -v /IT_zhengqing/soft/mysql/mysql-master/conf.d:/etc/mysql/conf.d -v /IT_zhengqing/soft/mysql/mysql-master/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql:5.7
⑤ 进入容器
docker exec -it mysql_server_3310 /bin/bash
⑥ 创建数据同步用户slave,并授权
-- 登录mysql
mysql -uroot -proot--  创建用户slave,密码123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';-- 授予slave用户 `REPLICATION SLAVE`权限和`REPLICATION CLIENT`权限,用于在`主` `从` 数据库之间同步数据
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
-- 授予所有权限则执行命令: GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%';-- 使操作生效
FLUSH PRIVILEGES;

2、slave(从)配置

温馨小提示:这里slave配置与master配置区别在于:容器挂载目录容器名端口、以及my.cnf配置文件中的server-id log-bin relay_log

# 1. 创建所需文件夹,用于映射容器相应文件路径
mkdir -p /IT_zhengqing/soft/mysql/mysql-slave
mkdir -p /IT_zhengqing/soft/mysql/mysql-slave/conf.d
mkdir -p /IT_zhengqing/soft/mysql/mysql-slave/data# 2. 创建`my.cnf`配置文件
cd /IT_zhengqing/soft/mysql/mysql-slave
# echo:如果没有这个文件则创建。如果有这个文件,那么新内容将会代替原来的内容
echo '[mysqld]
user=mysql                     # MySQL启动用户
default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎
character-set-server=utf8      # 设置mysql服务端默认字符集
pid-file        = /var/run/mysqld/mysqld.pid  # pid文件所在目录
socket          = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
datadir         = /var/lib/mysql              # 数据文件存放的目录
#log-error      = /var/log/mysql/error.log
#bind-address   = 127.0.0.1                   # MySQL绑定IP
expire_logs_days=7                            # 定义清除过期日志的时间(这里设置为7天)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!# 允许最大连接数
max_connections=200# ================= ↓↓↓ mysql主从同步配置start ↓↓↓ =================
# 同一局域网内注意要唯一
server-id=3311
# 开启二进制日志功能,以备slave作为其它slave的master时使用
log-bin=mysql-slave-bin
# relay_log配置中记日志
relay_log=edu-mysql-relay-bin
# ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================[client]
default-character-set=utf8  # 设置mysql客户端默认字符集
' > my.cnf# 3. 运行镜像
docker run --name mysql_server_3311 -d -p 3311:3306 --restart=always -v /IT_zhengqing/soft/mysql/mysql-slave/data/:/var/lib/mysql -v /IT_zhengqing/soft/mysql/mysql-slave/conf.d:/etc/mysql/conf.d -v /IT_zhengqing/soft/mysql/mysql-slave/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root mysql:5.7

3、关联masterslave

① 在master服务器中进入mysql查看master状态
-- 进入mysql
mysql -uroot -proot-- 查看状态
show master status;

注:FilePosition字段的值slave中将会用到,在slave操作完成之前不要操作master,否则将会引起状态变化,即File和Position字段的值变化 !!!

② 在slave服务器中进入mysql,启动主从同步
  1. master_host :master服务器地址
  2. master_port :端口号
  3. master_user :用于数据同步的用户(之前在master中创建授权的用户)
  4. master_password :用于同步用户的密码
  5. master_log_file :指定slave从哪个日志文件开始复制数据,即之前提到的File字段值
  6. master_log_pos :从哪个Position开始读,即之前master中的Position字段值,0则是从头开始完整的拷贝master库
  7. master_connect_retry :连接失败时重试的时间间隔,默认是60秒
mysql -uroot -prootchange master to master_host='www.zhengqingya.com',master_port=3310, master_user='slave', master_password='123456', master_log_file='mysql-bin.000003', master_log_pos= 746, master_connect_retry=30;# 开启主从同步过程  【停止命令:stop slave;】
start slave;
③ 查看主从同步状态
show slave status \G;

如下Slave_IO_RunningSlave_SQL_Running 都是Yes的话,就说明主从同步已经配置好了!

如果Slave_IO_RunningConnectingSlaveSQLRunningYes,则说明配置有问题,这时候就要检查配置中哪一步出现问题了哦,可根据Last_IO_Error字段信息排错或谷歌…

三、测试主从同步

Navicat中分别连接masterslave服务器

然后在master中建库建表插入数据,最后在slave中刷新可发现master中的数据同步成功过来了~

MySQL(17) 通过Docker搭建主从同步相关推荐

  1. Mysql服务器线上配置主从同步

    我们一般在线上搭建MYSQL都会部署一套主从同步方案: 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 主从复制的过程: Mysql同步过程的第一部分就是maste ...

  2. 使用Docker搭建主从数据库(MySQL)

    很多人对主从数据库有一个误区,把多个MySQL搭建在同一个服务器上,性能提升是不是很有限?这个理念是错误的,数据库的性能瓶颈主要是在IO和CPU负载过高,在同一台服务器运行多个数据库,能带来更低的延迟 ...

  3. mysql进阶:canal搭建主从|集群架构

    0.引言 之前我们讲解过canal的各种应用,但是对于生产环境来讲,服务高可用是必须保证的.因此canal单节点是不能满足我们的需求的.就需要搭建canal集群. 1. canal集群模式 从架构方式 ...

  4. Mysql数据备份恢复及主从同步

    目录 Mysql备份及主从同步 Mysql备份 1. mysqldump全量备份 2.log_bin增量备份 Mysql主从同步配置 1.1主从同步过程 1.2 配置 Mysql备份及主从同步 Mys ...

  5. memcache高集群搭建----主从同步实验

    目录 一.环境部署 二.主从服务器搭建 2.1 修改主机名 2.2 上传软件包并解压 2.3 主服务器上安装magent代理 2.4 主从服务器搭建keepalived 2.5 主服务器中keepal ...

  6. Redis搭建主从同步流程及原理

    目录 一.关于 Redis 主从复制 1.1 关于 Redis 的主从复制 1.2 Redis 主从架构 1.3 优缺点 二.配置 Redis 主从复制 2.1 准备事项 2.2 同步服务器的时区和时 ...

  7. 阿里云RDS Mysql 8.0 与本地主从同步

    我这里用的主库阿里云的RDS mysql版本为8.0, 主从配置需要注意的点 Master 和 Slave 数据库的版本要一致: Master 开启二进制日志, Master 和 Slave 的 se ...

  8. ubuntu mysql混合开发_mysql5.7主从同步 ubuntu

    实现环境: | System | mysql   |  ip   | |主ubuntu | mysql-5.7.24   | 10.192.209.122 | |从ubuntu    | mysql- ...

  9. mysql从库显示connecting_Mysql主从同步时Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes的情况故障排除...

    前几天在测试主从服务器Mysql同步时遇到了从数据库显示Slave_IO_Running:Connecting: Slave_SQL_Running:Yes的问题. 下面列举几种可能的错误原因: 1. ...

最新文章

  1. fatfs文件系统支持中文长文件名
  2. Quartz应用----发送邮件工作调度Java(转)
  3. php 直接定义 和 construct,PHP _construct()函数讲解
  4. 手机计算机数字显示在桌面上,手机计算器有哪些使用方法
  5. 巴塞尔大学合作项目博士招生,医学图像分析领域
  6. 助力移动AR应用发展,阿里巴巴推出AR开放平台
  7. 虚拟大师怎么修改手机_手机虚拟大师,打造一个属于你的专属手机平台
  8. 20155227第十二周课堂实践
  9. java用Calendar计算年龄的问题
  10. Python学习笔记10:内建结构
  11. s7200cpu224xp手册_西门子plc s7-200系列|s7-200 cpu224xp|CPU224 XP 高速I/O
  12. 服务器硬盘安装win10系统,硬盘安装win10的方法
  13. 微型计算机原理连线题,微机原理第7章练习题及答案
  14. JAVAFX输入法的实现
  15. linux光盘引导项,Linux制作grub引导光盘
  16. 关于时区、时间、时刻
  17. linux中who的功能,linux w及who命令
  18. ajax提交,form表单提交,onsubmit=return checksubmit()提交验证
  19. 《中国垒球》:跨界联赛·完美落幕
  20. 欺骗的艺术:为何Tor大陆被禁止,为何俄罗斯美国成漏洞榜一二,网络安全带你揭秘...

热门文章

  1. python快速爬虫视频_“python怎么快速爬虫视频“python 爬网页视频教程
  2. 1、Django项目设计与搭配开发环境
  3. c++中无名命名空间的使用
  4. 编译程序与解释程序的区别
  5. javaweb对于高并发策略--限流
  6. 用gif图展示UML中箭头和线条的含义,及搞懂UML类图、时序图和用例图
  7. 2023值得入手的小米电视推荐 小米75寸电视哪款性价比高?
  8. CMMI 3级18个过程域
  9. linux chrome 硬件加速,在Chrome上开启硬件加速和预先渲染的方法技巧
  10. 常微分方程(2):一阶线性微分方程