相关内容原文地址:

博客园: 当我遇上你csy:Docker实战之MySQL主从复制

CSDN:liumiaocn:MySQL: 容器化方式启动



一、Docker文件编排

编排docker-compose-mysql-cluster.yml,安装master和slave节点:

version: '3'
services:
mysql-master:
image: mysql:5.7
container_name: mysql-master
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3307:3306"
volumes:
- "./mysql/master/my.cnf:/etc/my.cnf"
- "./mysql/master/data:/var/lib/mysql"
links:
- mysql-slave mysql-slave:
image: mysql:5.7
container_name: mysql-slave
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3308:3306"
volumes:
- "./mysql/slave/my.cnf:/etc/my.cnf"
- "./mysql/slave/data:/var/lib/mysql"
  1. 配置master配置文件my.cnf
[mysqld]
# [必须]启用二进制日志
log-bin=mysql-bin
# [必须]服务器唯一ID,默认是1,一般取IP最后一段
server-id=1
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
  1. 配置slave配置文件my.cnf
[mysqld]
# [必须]服务器唯一ID,默认是1,一般取IP最后一段
server-id=2
  1. 启动docker-compose,创建docker镜像文件
docker-compose -f docker-compose-mysql-cluster.yml up -d

通过docker ps可查看已启动的实例容器。

二、配置主从复制

2.1 配置master

2.2 配置slave

三、验证主从复制

3.1 master创建db



查看slave是否同步创建:

四、读写分离

MySQL主从复制是其自己的功能,实现读写分离就得依靠其他组件了,比如sharding-jdbc。但是sharding-jdbc只是实现读写分离,本身的权限控制还是需要MySQL这边来配置的。

  1. 配置master账户及权限

    创建帐号并授予读写权限:
CREATE USER 'master'@'%' IDENTIFIED BY 'Password123';
GRANT select,insert,update,delete ON *.* TO 'master'@'%';
flush privileges;

  1. 配置slave账户及权限

    创建帐号并授予只读权限:
use mysql;
CREATE USER 'slave'@'%' IDENTIFIED BY 'Password123';
GRANT select ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;

五、Docker启动Mysql

docker run --name mysql -d                          \
-e MYSQL_ROOT_PASSWORD=liumiao123 \
-e TZ=Asia/Shanghai \
-v `pwd`/mysql/data/:/var/lib/mysql \
-v `pwd`/mysql/conf.d/:/etc/mysql/conf.d \
-p 32011:3306 liumiaocn/mysql:5.7.16

进入mysql容器内部:

docker exec -it mysql sh

六、Docker-Compose方式

liumiaocn:mysql liumiao$ cat docker-compose.yaml
version: '2' services:
# database service: mysql
mysql:
image: liumiaocn/mysql:5.7.16
ports:
- "32011:3306"
volumes:
- ./mysql/data/:/var/lib/mysql
- ./mysql/conf.d/:/etc/mysql/conf.d
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=liumiao123
restart: "no"
liumiaocn:mysql liumiao$

启动示例:

liumiaocn:mysql liumiao$ ls
docker-compose.yaml
liumiaocn:mysql liumiao$ docker-compose up -d
Creating network "mysql_default" with the default driver
Creating mysql_mysql_1 ... done
liumiaocn:mysql liumiao$

结果确认:

liumiaocn:mysql liumiao$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------
mysql_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:32011->3306/tcp
liumiaocn:mysql liumiao$
liumiaocn:mysql liumiao$ docker exec -it mysql_mysql_1 sh
# mysql -uroot -pliumiao123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.16 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

Docker容器启动Mysql,Docker实现Mysql主从,读写分离的更多相关文章

  1. Docker容器启动时初始化Mysql数据库

    1. 前言 Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行.那么怎么初始化 SQL脚本以及数据呢? 我这里有两个传统方案 ...

  2. Docker(十七)-修改Docker容器启动配置参数

    有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动, 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker c ...

  3. 修改Docker容器启动配置参数

    有时候,我们创建容器时忘了添加参数 --restart=always ,当 Docker 重启时,容器未能自动启动, 现在要添加该参数怎么办呢,方法有二: 1.Docker 命令修改 docker c ...

  4. docker容器启动设置固定IP

    docker安装以后的网络类型 [root@insure updev]# docker network ls NETWORK ID NAME DRIVER SCOPE 14da40175b01 bri ...

  5. docker容器启动几分钟之后自动退出

    2018-11-06 问题: docker容器启动几分钟之后自动退出 log日志报错 WARNING: overlay2: the backing xfs filesystem is formatte ...

  6. 解决docker容器启动时候无法映射端口的问题

    当我们停止防火墙后,docker容器启动映射端口可能无法映射端口,这个时候需要重建docker0网桥. 详细的错误是这样的: docker: Error response from daemon: d ...

  7. docker容器启动后添加端口映射

    DOCKER 给运行中的容器添加映射端口 方法1 1.获得容器IP 将container_name 换成实际环境中的容器名 docker inspect `container_name` | grep ...

  8. Centos7 docker容器启动后添加端口映射

    docker容器启动后添加端口映射的两种方法: 一.通过修改防火墙策略添加端口映射 docker容器已创建好,但是想在容器内配置tomcat监控,需要新的端口去访问,但是映射时没有映射多余端口,此时, ...

  9. linux中MySQL主从配置(Django实现主从读写分离)

    一 linux中MySQL主从配置原理(主从分离,主从同步) mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到sl ...

随机推荐

  1. java图像开发学习——JTable之导入数据库

    package demo; import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.MouseAd ...

  2. Access-Control-Allow-Headers等基础常识

    跨源资源共享 (CORS) (或通俗地译为跨域资源共享)是一种机制,该机制使用附加的 HTTP 头来告诉浏览器,准许运行在一个源上的Web应用访问位于另一不同源选定的资源. 当一个Web应用发起一个与 ...

  3. Docker学习(二)- Docker 安装 Jenkins

    一.拉取镜像 我这里安装的版本是2.222.3-centos,可以去这里获取你需要的版本: https://hub.docker.com/_/jenkins?tab=tags docker pull ...

  4. htaccess在线生成工具用法大全 (转)

    对于一个不懂程序的SEOER来做,更改代码方面是一件非常苦难的事情,当我们遇到301转向以及404页面的制作问题时,经常会困恼我们,这里我提供一个htaccess在线生成工具,这里有404页面链接生成 ...

  5. 风炫安全web安全学习第三十一节课 命令执行以及代码执行演示

    风炫安全web安全学习第三十一节课 命令执行以及代码执行演示 参考: http://blog.evalshell.com/2020/12/20/风炫安全web安全学习第三十一节课-命令执行以及代/

  6. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (II)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架 II第二部 0. 本系列教程 1. 登录功能准备 a.python中操控mysql b. 安装数据库 c.安装mys ...

  7. Linux命令整理,用户管理,用户组管理,系统管理,目录管理常用命令

    知识点梳理 Linux课堂笔记 学习目标 能够知道什么是Linux系统以及它的应用场景 能够独立完成安装VMware虚拟机和网络配置 能够独立完成安装CentOS以及远程终端SecureCRT 能够熟 ...

  8. SpringMVC文件的上传与下载实现

    单文件上传 首先创建项目,开发工具是IDEA,选择Spring项目,勾选上Spring和SpringMVC. 然后命名,最后完成. 默认生成配置文件在web/WEB-INF下. 首先导入需要的jar包 ...

  9. 7.prometheus之查询API

    一.格式概述 二.表达式查询 2.1 Instant queries(即时查询) 2.2 范围查询 三.查询元数据 3.1 通过标签匹配器找到度量指标列表 3.2 获取标签名 3.3 查询标签值 四. ...

  10. Redis 5 配置 Redis sentinel(哨兵模式)

    先了解一下哨兵都 做了什么工作:Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: * 监控(Monitoring): Sentin ...