前言

为什么要使用Docker搭建?

不管是使用源码安装还是离线安装,在服务器上安装一个mysql总会花费不少的时间,而且对于新人来说,中间稍不注意哪一步出错了就导致安装失败,我之前也是安装过2次才成功,更别说直接在服务器上安装mysql主从节点了

使用docker安装mysql的好处大概有下面节点:

  • 节省服务器资源,传统方式安装一个mysql,至少夜的一台配置不算太差的服务器吧,如果使用docker呢?一个服务器上你可以部署多个mysql啊,只需暴露出来的端口号不一样就可以啦
  • 安装便捷,只需一条命令即可完成安装,这样新手还说自己不会吗
  • 维护成本低,可以跨器移植

1、docker安装mysql

1.1 下载一个mysql镜像文件,为了使用的稳定性,不建议使用最新的,我这里使用的是5.7.25版本的

docker pull mysql:5.7.25


1.2 启动mysql,以后台启动方式

docker run -p 3307:3306 --name my5.7 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.25

1.3 查看启动成功的mysql进程并进入容器进行操作

docker exec -it 容器ID /bin/bash


基本上到这里我们就完成了一个mini版的docker下的mysql服务的安装,是不是很快,项目上使用的时候,最好配置一下宿主机和mysql容器的数据卷,方便后续数据管理和维护

2、docker搭建mysql主从

2.1 依照上面的流程,我们再启动两个mysql容器的实例,两个实例对外的端口和容器名称不同

主节点:

docker run -p 3339:3306 --name mymysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.25

从节点:

docker run -p 3340:3306 --name mymysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.25

启动成功可通过docker ps观察是否启动成功:

2.2 进入主节点容器,配置my.cnf文件,我们知道,mysql主从的原理是从节点通过监听主节点的bin_log文件完成数据的同步的,默认情况下,不管是服务器直接安装还是docker安装的mysql,均没有开始bin_log,需要手动开启,首先修改主节点的my.cnf

但是在docker的容器中,初次进去直接执行vi 或者vim命令时会提示命令找不到,需要手动安装一下vim的命令,如下:

apt-get update
apt-get install vim

安装成功后,主节点配置如下:

配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启。重启mysql服务时会使得docker容器停止,我们还需要docker start mymysql-master启动容器

service mysql restart
docker start mymysql-master

下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

File和Position字段的值后面将会用到,Position表示从节点要监听的bin_log位置起始点,在后面的操作完成之前,需确保Master库不做任何操作,否则将会引起状态变化,File和Position字段的值变化会对后面的数据同步时不准确

2.3 从节点也做同样的操作,即进入容器后配置my.cnf并重启容器

进入从节点的mysql命令模式客户端,执行如下命令,完成配置连接信息初始化,

change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 617, master_connect_retry=30;

简单解释下上面命令的含义:

  • master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect 容器名称|容器id查询容器的ip
  • master_port:Master的端口号,指的是容器的端口号
  • master_user:用于数据同步的用户
  • master_password:用于同步的用户的密码
  • master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
  • master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
  • master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

关于docker启动后的IP地址,可能有些同学不太熟悉,可以通过上面所说的:docker inspect 镜像ID查看:

2.3 再在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态

图中圈起来的是需要关注的地方,比如这里的position就是上面主节点的起始位置监听点,同时因为我们还没有开启主从复制过程,所以SlaveIORunning 和 SlaveSQLRunning 都是No,再次执行命令

start slave

然后再观察主从同步状态,这时候状态就变了

测试主从数据是否可以同步

正常情况下,开启了同步命令后,从节点就开启了对主节点的bin_log日志的监听,只要不出现连接短路的问题就一直处于connecting的状态

测试的话也非常简单,只需要在主节点创建一个库,然后看看从节点是否也有这个表就可以了啊,在主节点创建一个名test1的数据库

然后再在从节点的mysql命令行工具查看一下,

基本上到这里,我们通过docker完成了一个mysql主从搭建的简易案例,希望对看到的同学有用,最后感谢观看!

docker搭建mysql主从相关推荐

  1. mysql主从docker_(学习到实践)四、docker搭建mysql主从实践

    前言 目前已完成:php7及扩展.redis5的Dockerfile测试版编写,稍许完善后同步上传到github,(记下这里memcached还没有剥离安装). 今天数据库,编程的一个重要原则是不要重 ...

  2. docker搭建mysql主从数据库

    一.docker安装mysql 参考 在服务器上使用docker安装mysql 在服务器上运行两个MySQL容器,一个作为主,另一个作为从,主写从读. 二.配置my.cnf 1.配置主库 首先进入容器 ...

  3. Docker - Docker中搭建MySQL主从

    1.pull完centos7纯净版的镜像后,创建容器,然后将宿主机上下载的MySQL文件 (MySQL下载地址:http://mysql.mirror.kangaroot.net/Downloads/ ...

  4. docker下mysql主从搭建

    使用docker 建立mysql主从 环境:Mac Mysql:5.7.36 目标: master主机端口 3307 slave从机端口 3308 在Mac建立master,slave对应目录 log ...

  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主从 启动主库: 1.docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5 ...

  7. 【收藏】使用Docker搭建MySQL服务

    使用Docker搭建MySQL服务 https://www.cnblogs.com/sablier/p/11605606.html

  8. liunx下搭建mysql主从_linux下搭建mysql主从

    在master上创建repl账户,用于复制. grant replication slave on *.* to [email protected]%' identified by 'P@$$W0rd ...

  9. docker mysql主从_使用docker 实现MySQL主从同步/读写分离

    1. 利用 docker 实现 mysql 主从同步 / 读写分离 为了保证数据的完整和安全,mysql 设计了主从同步,一个挂掉还可以用另个.最近重构论坛,想来改成主从吧.担心失误,就先拿 dock ...

最新文章

  1. Tir-Hi3559AV100镜像烧写
  2. SCP传输文件和断点续传
  3. python中的线程threading.Thread()使用
  4. C语言(CED)与long long相关的知识
  5. Unity3dRPG 相机跟随player旋转_跟随式灌装机
  6. Linux系统基本操作(二)—设置本地光盘为yum源
  7. 今年最值得期待的JavaScript传奇绿皮书登场!
  8. python题目(1)
  9. Eclipse无法DEBUG
  10. 别人改汝代码,应该怎么办
  11. 小伙子自学C++编程简单DIY,即让你拥有一个屏幕画笔,非常实用!
  12. 非常规的DeepFaceLab(DeepFake)小花招和注意事项
  13. 【转】利用百度BAE3.0搭建原版WORDPRESS博客详细教程
  14. JEECG架构讲解及使用
  15. Default changeset implementation allows only one operation
  16. 每日 30 秒 ⏱ 强风吹拂
  17. html中index函数,INDEX函数.doc
  18. 向大家推荐一款可以免费在线Word转pdf,jpg转pdf,ppt转pdf等各种格式转换的网站
  19. omnet++,veins,sumo使用多应用层实现车辆和行人的模拟
  20. OpenMP求PI的四种方式

热门文章

  1. 菜鸟的成长记录--linux 通配符和特殊字符集合的使用
  2. Docker hello workd
  3. OpenStack快速入门-queens版本
  4. POJ2586(贪心)
  5. TextView跑马灯效果
  6. [转]详细易懂的Linux makefile教程(7)
  7. ShardingSphere(八) 分库分表的多种分片策略
  8. RabbitMq(九) SpringBoot整合RabbitMQ消费者示例代码
  9. 只删除字符串前面的‘*’号。
  10. ThinkPHP验证码不能显示如何解决