参考并感谢

下载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. 从浏览器输入url到显示页面的过程 (前端面试题)

    域名DNS解析,解析到真正的IP地址             | 客户端与服务端建立TCP连接,3次握手 | 客户端发送Http请求 | server接收到http请求,处理,并返回 | 客户端接收到 ...

  2. lintcode-1174.下一个更大的元素 III

    题目描述: 1174. 下一个更大的元素 III 给定一个32位整数n,用同样的数字组成新的32位整数,使得它要比n大,返回最小的这样的数.如果不存在这样的整数,返回-1. 算法思路: 首先将这个数转 ...

  3. numpy.linalg.svd函数

    转载自:python之SVD函数介绍 函数:np.linalg.svd(a,full_matrices=1,compute_uv=1) 参数: a是一个形如\((M,N)\)的矩阵 full_matr ...

  4. 使用建造者模式和Lombok简化代码

    在项目开发中,我们经常需要构建对象.常见的做法有getter/setter,或者构造器构建对象. 可能会有人写出类似如下的代码: Company company=new Company(); comp ...

  5. Python3 fake_useragent 模块的使用和报错解决方案

    在使用 Python 做爬虫的时候,我们需要伪装头部信息骗过网站的防爬策略,Python 中的第三方模块 fake_useragent 就很好的解决了这个问题,它将给我们返回一个随机封装了好的头部信息 ...

  6. 网络营销CPA、CPS、CPM、CPT、CPC 是什么

    网络营销之所以越来越受到重视一个主要的原因就是因为“精准”.相比较传统媒体的陈旧广告形式,网络营销能为广告主带来更为确切的效果与回报,更有传统媒体所没有的即时互动性.很多企业借助于精准的网络营销成为人 ...

  7. Python script to package the information of tracking benchmarks like LaSOT and GOT-10k into json files for Siamese network based trackers

    ############################################################################################ #### Fo ...

  8. Java基础 三目运算符 用if-else对其进行解释

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  9. bladex下载前端代码后,运行服务时报错【'vue-cli-service' 不是内部或外部命令,也不是可运行的程序或批处理文件。】的解决方法

    问题:E:\BladeXDB\Saber>yarn run serveyarn run v1.13.0$ vue-cli-service serve'vue-cli-service' 不是内部或 ...

  10. 【ARM-Linux开发】【CUDA开发】【视频开发】关于Linux下利用GPU对视频进行硬件加速转码的方案

    最近一直在研究Linux下利用GPU进行硬件加速转码的方案,折腾了很久,至今没有找到比较理想的硬加速转码方案.似乎网上讨论这一方案的文章也特别少,这个过程中也进行了各种尝试,遇到很多具体问题,以下便对 ...