参考并感谢

下载mysql镜像(不带tag标签则表示下载latest版本)

docker pull mysql/mysql-server

配置my.cnf 文件

my.cnf文件参考nginx的临时方案,从容器中拷贝出来

# 主库
[mysqld]
log-bin=mysql-bin # [必须]启用二进制日志
server-id=1 # [必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配
# 从库
[mysqld]
log-bin=mysql-bin # [必须]启用二进制日志
server-id=2 # [必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配

启动 mysql 主库

docker run -d \
-p 3306:3306 \
--privileged=true \
-e MYSQL_ROOT_PASSWORD="Mypwd@123456" \
--name mysql3306 \
--mount type=bind,source=/var/docker/configs/mysql/3306/my.cnf,target=/etc/my.cnf \
--mount type=bind,source=/var/docker/datas/mysql/3306,target=/var/lib/mysql \
--restart always \
mysql/mysql-server:latest

启动 mysql 从库

docker run -d \
-p 3307:3306 \
--privileged=true \
-e MYSQL_ROOT_PASSWORD="Mypwd@123456" \
--name mysql3307 \
--mount type=bind,source=/var/docker/configs/mysql/3307/my.cnf,target=/etc/my.cnf \
--mount type=bind,source=/var/docker/datas/mysql/3307,target=/var/lib/mysql \
--restart always \
mysql/mysql-server:latest

开放mysql端口并立即生效

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --reload

登录主库

docker exec -it mysql3306 bash
mysql -u root -p
Mypwd@123456
# 主库创建同步用户
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Mypwd@123456';
# 主库给同步用户授权
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
# 主库创建用户并配置读写权限
CREATE USER 'madmars'@'%' IDENTIFIED WITH mysql_native_password BY 'Mypwd@123456';
GRANT ALL PRIVILEGES ON *.* TO 'madmars'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 查询主库状态,并记录 File 的值和 Position 的值
SHOW MASTER STATUS;

登录从库

docker exec -it mysql3307 bash
mysql -u root -p
Mypwd@123456
# 配置slave (master_log_file 和 master_log_pos 是主库的file和position值)
change master to
master_host='172.17.0.1',
master_user='repl',
master_log_file='mysql-bin.000003',
master_log_pos=1345,
master_port=3306,
master_password='Mypwd@123456';
# 启动salve
START SLAVE;
# 查看slave状态
SHOW SLAVE STATUS\G;
# 从库用户配置只读权限
CREATE USER 'madmarsreadonly'@'%' IDENTIFIED WITH mysql_native_password BY 'Mypwd@123456';
GRANT SELECT ON *.* TO 'madmarsreadonly'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

PS:

  • 启动容器之前,需要创建好对应的宿主机的文件目录,宿主机缺少文件会导致容器启动失败
  • docker环境部署,如果需要数据库持久化,必须要增加 privileged=true

《(七) Docker 部署 MySql8.0 一主一从 高可用集群》CSDN地址:https://blog.csdn.net/madmarszff/article/details/100904288

《(七) Docker 部署 MySql8.0 一主一从 高可用集群》博客园地址:https://www.cnblogs.com/godzff/p/11530713.html

《(七) Docker 部署 MySql8.0 一主一从 高可用集群》简书地址:

(七) Docker 部署 MySql8.0 一主一从 高可用集群的更多相关文章

  1. 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群

    本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

  2. 部署一套完整的Kubernetes高可用集群(二进制,v1.18版)

    一.前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式: kubeadm Kubeadm是一个K8s部署工具,提供kubeadm ...

  3. 部署一套完整的Kubernetes高可用集群(二进制,最新版v1.18)下

    七.高可用架构(扩容多Master架构) Kubernetes作为容器集群系统,通过健康检查+重启策略实现了Pod故障自我修复能力,通过调度算法实现将Pod分布式部署,并保持预期副本数,根据Node失 ...

  4. Centos7.4 Storm2.0.0 + Zookeeper3.5.5 高可用集群搭建

    想了下还是把kafka集群和storm集群分开比较好 集群规划: Nimbus Supervisor storm01 √ √ storm02 √(备份) √ storm03 √ 准备工作 老样子复制三 ...

  5. Hadoop 2.6.0+ZooKeeper+Hive HA高可用集群安装

    http://blog.csdn.net/totxian/article/details/45248399

  6. Docker部署Mysql8.0.20并配置主从复制

    1. Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)   Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从) 2. 前提准备 # 创建主从数据库文件夹 ...

  7. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  8. MySQL8.0 MIC高可用集群搭建

    mysql8.0带来的新特性,结合MySQLshell,不需要第三方中间件,自动构建高可用集群. mysql8.0作为一款新产品,其内置的mysq-innodb-cluster(MIC)高可用集群的技 ...

  9. 使用二进制的方式部署 K8S-1.16 高可用集群

    一.项目介绍 项目致力于让有意向使用原生kubernetes集群的企业或个人,可以方便的.系统的使用二进制的方式手工搭建kubernetes高可用集群.并且让相关的人员可以更好的理解kubernete ...

随机推荐

  1. ubuntu之路——day11.7 end-to-end deep learning

    在传统的数据处理系统或学习系统中,有一些工作需要多个步骤进行,但是端到端的学习就是用一个神经网络来代替中间所有的过程. 举个例子,在语音识别中: X(Audio)----------MFCC----- ...

  2. 《Hadoop综合大作业》

    作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 我主要的爬取内容是关于热门微博文章“996”与日剧<我要 ...

  3. [Beta]第二次 Scrum Meeting

    [Beta]第二次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/6 22:00 30min 大运村公寓6F楼道 附Github仓库:WEDO 例会照片 工作情况总 ...

  4. server2003 IIS6.0 网站不可用

    事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到.本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息.您可能可以使用 /AUXSOURC ...

  5. TCP连接关闭总结

    由于涉及面太广,只作简单整理,有兴趣的可参考<UNIX Networking Programming>volum 1, Section 5.7, 5.12, 5.14, 5.15, 6.6 ...

  6. apicloud打包成apk

    前言:本文是打包vue项目,其他项目也是这样打包 页面的开发过程跟我们平时开发一样,利用vue把页面全部完成,最后进行npm run build将项目打包. 接下来就是apicloud打包的过程,首先 ...

  7. Python 初级 6 循环 (三)

    一.复习 1 计算循环(for循环) for looper in [1, 2, 3, 4, 5]: print("hello") 1) looper的值从第0个数1开始 2) 对应 ...

  8. openstack虚拟机获取不到ip

    一.现象描述: openstack平台中创建虚拟机后,虚拟机在web页面中显示获取到了ip,但是打开虚拟机控制台后查看网络状态,虚拟机没有ip地址,下图为故障截图: 二.分析思路: (1)查看neut ...

  9. java判断手机还是电脑访问

    很多博客写的很复杂,没具体看.我只用下面的几行代码 String userAgent = req.getHeader("user-agent"); ) { //安卓 } ) || ...

  10. c#中Split 分离字符以及空格消除方法

    1        split几种分离方法 1)用字符串分隔: using System.Text.RegularExpressions; string str="aaajsbbbjsccc& ...