概述:

总所周知,使用docker安装一些中间件是非常快速和便捷的,搭建mysql主从复制【1主n从节点或n主n从节点】,这里我为了演示简单一点,选择搭建mysql主从复制的【1主1从】并使用mysql最新版的镜像进行搭建,话不多说,咱撸起袖子就是干!!!

一.mysql主从复制的原理【简单聊聊】

1.master服务器负责写,当master上的数据发生改变时,则将其改变写入binlog二进制日志中;

2.slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个IO线程请求master二进制文件内容事件

3.同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制文件事件,并保存至从节点本地的中继日志中,从节点将启动SQL解析线程从中继日志中读取二进制日志内容,在本地服务器重新执行改变的内容,使得其数据和主节点的保持一致

二.mysql主从复制搭建步骤【重点】

主【写】服务配置步骤

1.拉取镜像mysql默认是latest最新版本,拉取之后查看本地仓库是否有mysql镜像

docker pull mysqldocker images

2.使用该mysql:latest镜像创建并启动一个容器并将该3307端口容器作为我们的主[写]服务器,具体命令如下

docker run -p 3307:3306 --privileged=true
--name mysql-master
-v /mydata/mysql-master/log:/var/log/mysql
-v /mydata/mysql-master/data:/var/lib/mysql
-v /mydata/mysql-master/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest参数解释:
-p                 //宿主机端口映射:容器端口
--privileged      //权限,挂载容器卷会使用到
--name             //指定容器名称
-v                //挂载容器卷,宿主机目录:容器目录-e MYSQL_ROOT_PASSWORD  //指定mysqlroot用户登录时的密码-d                     //后台方式启动

3.执行完第二步的命令之后使用docker ps 查看容器有没有成功启动,如果报错/var/lib/mysql不存在错误,那我们在my.cnf配置[mysqld]中增加一项配置即可,然后需重新启动容器[docker restart mysql-master]否则无效

secure_file_priv=/var/lib/mysql

4.在刚才启动容器时指定的主节点的挂载目录/mydata/mysql-master/conf下创建my.cnf文件,然后编辑我们3307写服务器的my.cnf配置内容,开启二进制文件以及关于一些二进制文件的其他配置,详细的配置内容如下


[mysqld]
user=root
character-set-server=utf8
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password
#master
server_id=101
binlog-ignore-db=mysql
log-bin=mall-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
[client]
default-character-set=utf8[mysql]
default-character-set=utf8
//配置说明## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

5.然后进入主服务器的容器使用myslq -uroot -p123456登录mysql,创建主从同步用户slave并赋予相关权限

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';  //创建用户
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';//赋予权限

从【读】服务配置步骤

1.使用该mysql:latest镜像创建并启动一个容器并将该3308端口容器作为我们的从[读]服务器,具体命令如下,参数说明参考写服务器,这里与写服务器的挂载目录,容器名称和映射端口不一样而已

docker run -p 3308:3306 --privileged=true --name mysql-slave
-v /mydata/mysql-slave/log:/var/log/mysql
-v /mydata/mysql-slave/data:/var/lib/mysql
-v /mydata/mysql-slave/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

2.在从服务器容器挂载的宿主机/mydata/mysql-slave/conf目录下创建my.cnf,修改完配置之后重新启动容器 docker restart mysql-slave

[mysqld]
user=root
character-set-server=utf8
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password
#slave
server_id=102
binlog-ignore-db=mysql
log-bin=mall-mysql-slave1-bin
binlog_cache_size=1M
binlog_format=mixed
slave_skip_errors=1062
relay_log=mall-mysql-relay-bin
log_slave_updates=1
read_only=1
expire_logs_days=7
[client]
default-character-set=utf8[mysql]
default-character-set=utf8
//配置说明[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1

3.登录主数据库,查看主从同步状态,show master status 这些信息后续从节点的配置需要用到

4.登录从服务器数据库增加主从配置如:主服务器的地址,同步用户账号与密码master的二进制文件以及同步数据的读取position等信息,登录从节点数据库执行一下命令【注意下面的是一条命令连起来的而不是多条分开的命令】

change master to master_host='宿主机ip', //写服务器ip地址
master_user='slave', //同步用户名
master_password='123456', //同步用户密码
master_port=3307, //写服务器端口
master_log_file='mall-mysql-bin.000005',  //二进制文件id
master_log_pos=2550, //读取位置
master_connect_retry=30;//重试次数

5.执行完上面的命令之后,使用 show slave status \G; 查看从节点的主从状态,从服务器默认是没有开启主从同步的,我们需执行start slave命令启动主从同步功能,如果没有执行start slave 那么下图中的io线程与sql默认的值都是NO

三.验证结果

测试主从同步有没有生效,在mysql-master主服务器上新创建一个数据库db01,在db01数据库下再创建一个employee表并且往employee表中插入一条数据,然后登录从服务节点数据库查询是否有同步到刚才主数据库写的数据库和数据表,如果有就证明配置成功啦!!!测试步骤如下。

1.登录查看从节点服务器有没有db01数据库

2.登录主服务器创建db01数据库并创建employee表,忘employee表中插入一条数据

3.返回从节点再次查看数据库以及查询employee数据

4.查看表employe数据

四.搭建过程中遇到的问题

1.从服务器开启主从同步时,连接不上master服务器查看日志显示Authentication plugin 'caching_sha2_password' cannot be loaded错误,出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后的加密规则是caching_sha2_password。

解决方案:修改加密规则在从节点和主节点的my.cnf的[mysqld]增加如下配置

default_authentication_plugin=mysql_native_password

2.mysql:latest启动容器失败Failed to access directory for --secure-file-priv. Please make sure 
that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files错误

出现这个原因主要是mysql高版本和低版本的不一样,MYSQL新特性secure_file_priv对读写文件的影响。

解决方案:在从节点和主节点的my.cnf的[mysqld]增加如下配置

secure_file_priv=/var/lib/mysql

附上参考链接:

https://www.cnblogs.com/zhurong/p/9898675.html

https://blog.csdn.net/qq_40604437/article/details/106680762

https://zhuanlan.zhihu.com/p/96212530

docker安装mysql[主从复制版]相关推荐

  1. docker安装mysql并配置mysql主从集群

    一.安装docker 1.1 安装之前卸载原有的环境 yum remove docker \docker-client \docker-client-latest \docker-common \do ...

  2. 【MySQL】基于Docker的Mysql主从复制搭建

    基于Docker的Mysql主从复制搭建 为什么基于Docker搭建? 资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相 ...

  3. docker安装mysql主从视频教程_docker安装mysql主从

    docker安装mysql主从 启动主库: 1.docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5 ...

  4. 群晖NAS下docker安装MySql

    群晖NAS下docker安装mysql 8.0.31 目前我使用的是在黑群晖 6.2DM 下的 docker 内刷入一个官方的 MySQL 版本是8.0.31 (推荐选择 Debian 的发行版, 因 ...

  5. docker安装mysql主从_docker安装mysql主从

    docker安装mysql主从 启动主库: 1.docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5 ...

  6. docker实现mysql 主从复制

    docker实现 mysql 主从复制! 记录一下如何在docker中启动两个mysql容器来进行主从复制 之前踩了不少坑,终于弄好了,和我一起来看看整个部署过程吧 ! 使用docker部署mysql ...

  7. Linux下搭建rabbitMQ、安装jdk、安装redis、安装zookeeper、docker安装MySQL、防火墙常用命令、docker安装、Windows下嘛呢私服搭建、Nginx安装

    rabbitMQ 1. 搭建Elang环境 1)安装GCC GCC-C++ Openssl等模块,安装过就不需要安装了 yum -y install make gcc gcc-c++ kernel-d ...

  8. Centos-安装Docker并使用Docker安装mysql遇到的问题以及解决方法

    为什么安装Docker?? ----不知道啊,说是用其安装mysql简单 step1:    首先百度,查找安装的教程,哎,找到了: 如下: https://www.jianshu.com/p/9c9 ...

  9. 虚拟机中docker安装mysql远程无法访问解决方法

    #docker安装mysql docker pull mysql docker run --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123 -d ...

最新文章

  1. R语言定量变量组间差异检验
  2. ExtJS 的工具条及菜单
  3. STM32 基础系列教程 14 - IIC
  4. [Leetcode] Binary Tree PosterOrder Travel
  5. 逻辑判断-if语句/文件目录属性判断/case判断
  6. 有些道理经历过就是道理,没经历过可能就是心灵鸡汤。
  7. HDOJ5547 SudoKu
  8. mysql居左查询abcd_MySql速查手册
  9. 促使整个团队改善的首要驱动力一定来自技术领域
  10. java 参数类型不确定_java泛型的那些事
  11. 原生JavaScript对CSS进行格式化和压缩
  12. 你关注过浏览器最小字体为多大吗?
  13. 计算硬盘的计算机,硬盘整数分区计算器免费版
  14. 天煌计算机组成原理控制软件,天煌THTJZ-2型计算机组成原理课程设计.doc
  15. Java和Android笔试题
  16. 学习笔记 Tianmao 篇 SliderLayout 的使用
  17. 前有狗屁不通文章生成器 | 后有申论生成器
  18. Grafana Tempo简介
  19. Spring AOP具象化理解(代理模式)
  20. 深度学习机器学习面试问题准备

热门文章

  1. 知识点:PCB板布线流程
  2. linux 只展示IP地址命令
  3. 白马美的的“红利间歇期”
  4. 仓库管理软件哪个好?一键解决仓库出入库、管理库存,选这些软件
  5. redis做mysql缓存的优点_面试官:如何保障数据库和redis缓存的一致性
  6. 微信小程序中的用户ID(openid和unionid)
  7. Android 12 预览版发布,64G手机用户:我又活了 #IT资讯# #Android# #手机系统#
  8. 启航!2023 Amazon DeepRacer 自动驾驶赛车中国联赛战燃擎开启!
  9. 飞秋 公司在发展过程中
  10. python学习线路图(2018年更新版)