Docker上部署mysql8主从复制的实现

目录
  • 环境准备
  • 简易版本安装
  • 设置密码
  • 配置 MySQL 主从复制
    • 创建 bridge 网络并指定 IP 区间
    • 创建数据和配置存放目录
    • 准备配置文件
    • 启动数据库
    • 远程访问配置(主从)
    • 主库创建复制用户
    • 从库设置 master 的信息

环境准备

需要一个 MySQL8 版本的 MySQL,因为我个人没有用过 mysql5,不知道二者是否会有一些特性上的偏差。

默认你与我的环境是一样的。

简易版本安装

先仅仅安装一个 MySQL,一上来就主从的话很多细节都会杂糅在一起。

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

这里的参数介绍一下:

-p:指定内外端口映射,虚拟机为外,docker 容器为内,写在前面的为外部端口,写在后面的为内部端口。因为 MySQL 本身端口为 3306,为了不使你们混淆,我外部端口不设置为 3306。
-v:指定内外存储卷映射,Docker 实践经验(三)讲的就是这个。
-e:往容器内部传参,最后会由 MySQL 来接收。关于这个 -e 其实我也还没研究它的一个走势。

这样一个简易的 MySQL 就能动了。

设置密码

没有设置密码的话,不确定第二次要登录的时候是否还能进得去了。
不确定的意思就是可能进得去,可能进不去。

所以我们自行设置一个密码比较保险。

mysql> use mysql

mysql> update user set authentication_string='123456' where user='root' and host='localhost';

mysql> flush privileges;

不用注释吧。

现在这个 MySQL 能动了吧,可以考虑删掉了,咱开始做主从复制。

如果想留着用的:
修改 my.cnf,通过数据卷同步给MySQL:

cd /mysql/conf
vim my.cnf
插入以下内容:
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

重启MySQL:

docker restart mysql
docker exec -it mysql bash

配置 MySQL 主从复制

创建 bridge 网络并指定 IP 区间

docker network create --driver bridge mysql-master-slave

mysql连接数默认不够

set global max_connections=500;
set global mysqlx_max_connections=500;

创建数据和配置存放目录

# 创建主库数据存放目录
mkdir -p /home/docker/mysql/master/data
# 创建主库配置存放目录
mkdir -p /home/docker/mysql/master/conf

# 创建从库1数据存放目录
mkdir -p /home/docker/mysql/slave1/data
# 创建从库1配置存放目录
mkdir -p /home/docker/mysql/slave1/conf

准备配置文件

主数据库

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql

secure-file-priv= NULL

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# 服务器唯一ID,默认是1
server-id=10

# 启用二进制日志
log-bin=mysql-bin

# 最大连接数
max_connections=10000

# 设置默认时区
default-time_zone='+8:00'

# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1

!includedir /etc/mysql/conf.d/

从数据库

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql

secure-file-priv= NULL

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# 服务器唯一ID,默认是1
server-id=11

# 启用二进制日志
log-bin=mysql-bin

# 最大连接数
max_connections=10000

# 设置默认时区
default-time_zone='+8:00'

# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1

!includedir /etc/mysql/conf.d/

启动数据库

启动主数据库

如果上面完全按照我的步骤来,这里的命令也不用改参数。

docker run -d -p 3316:3306 --name mysql_master --restart=always --network mysql-master-slave -v /home/docker/mysql/master/data:/var/lib/mysql -v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql

启动从数据库

docker run -d -p 3326:3306 --name mysql_slave1 --restart=always --network mysql-master-slave -v /home/docker/mysql/slave1/data:/var/lib/mysql -v /home/docker/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql

远程访问配置(主从)

# 在容器 mysql_master 中开启一个交互模式的终端
docker exec -it mysql_master /bin/bash

# 在容器 mysql_slave1 中开启一个交互模式的终端
docker exec -it mysql_slave1 /bin/bash

# mysql 登录
mysql -u root -p

# 给予远程用户所有表所有权限
GRANT ALL ON *.* TO 'root'@'%';

# 更改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;

# 远程访问
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

# 刷新权限
flush privileges;

主库创建复制用户

CREATE USER 'woniu'@'%' IDENTIFIED WITH mysql_native_password BY 'woniu123456';

GRANT REPLICATION SLAVE ON *.* TO 'woniu'@'%';

flush privileges;

查看 master 机器的状态

SHOW MASTER STATUS;

从库设置 master 的信息

如果前面完全按我的步骤来,这里需要填写你们自己宿主机上的 ip、还有上图中显示的那两个数据。

change master to master_host='192.168.190.133', master_user='woniu', master_password='woniu123456', master_port=3316, master_log_file='mysql-bin.000003', master_log_pos=2838, master_connect_retry=30;

参数释义:

  • master_host:主数据库的IP地址;
  • master_port:主数据库的运行端口;
  • master_user:在主数据库创建的用于同步数据的用户账号;
  • master_password:在主数据库创建的用于同步数据的用户密码;
  • master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
  • master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
  • master_connect_retry:连接失败重试的时间间隔,单位为秒。

开启主从复制

# 开始同步
start slave;

# 同步状态
show slave status ;

如果成功,圈出来的地方要都是 yes、
如果失败,会显示日志:

可自行百度,不过百度出来的不一定就适用于咱,毕竟咱是在 docker 上部署的,现有资料较少。
要靠经验。

到此这篇关于Docker上部署mysql8主从复制的实现的文章就介绍到这了,更多相关Docker部署mysql8主从复制内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker 部署 Mysql8.0的方法示例

    1. 参照官网,安装docker 2.拉取mysql镜像 (默认拉取最新的镜像)8.0.11 docker pull mysql 3.在宿主机创建持久化 mysql data 及mysql.cnf mkdir /usr/local/mysqlData/test/cnf mkdir /usr/local/mysqlData/test/data vi /usr/loal/mysqlData/test/cnf/mysql.cnf 设置本地文件共享: Docker -> Preferences... -

  • Docker安装MySql8并远程访问的实现

    目录 拉取mysql镜像 启动mysql8 配置mysql 进行授权远程连接(注意mysql 8.0跟之前的授权方式不同) 远程连接测试 拉取mysql镜像 使用命令拉取mysql,目前最后一个版本是8.0.2* docker pull mysql 也可以在dockerhub上查看指定版本进行下载. 启动mysql8 docker run --name mysql01 -p 3333:3306 -e MYSQL_ROOT_PASSWORD=123654 mysql:latest docker p

  • mysql8.x docker远程访问配置详解

    目录 环境情况 遇到的错误 解决方法 1. 登录 mysql docker 内部 2. 设置root密码 3. 设置 root 远程访问权限 4. 设置普通用户 myuser 的远程访问 环境情况 mysql 8.x 是通过 docker 方式部署的,启动的 docker-compose.yml 如下: version: "3.2" services: mysql: container_name: mysql image: "mysql:8.0" ports: -

  • Docker部署Mysql8的实现步骤

    目录 一.前置需求 二.部署方法 三.访问测试 一.前置需求 1.linux系统 本人用的Centos7 2.安装docker 参考这篇文章 二.部署方法 1.拉取mysql8镜像 docker pull mysql:8 2.创建配置文件挂载目录和数据挂载目录 mkdir -p /usr/mysql/conf /usr/mysql/data chmod -R 755 /usr/mysql/ ps:/home/mysql/config:放mysql配置文件my.conf/home/mysql/da

  • docker部署mysql8并设置可远程连接

    docker部署mysql的关键在于两点 1.mysql在生产环境产生的数据放在容器里很不安全,我们需要把数据文件夹挂载到容器外,以防数据丢失. 2.运行mysql镜像时需要设置初始密码,并且设置mysql可以远程连接. 接下来我们开始docker部署mysql 首先我们先搜索一下mysql镜像: docker search mysql 列出很多mysql的镜像,我们选择第一个 我们用docker把mysql镜像拉下来 docker pull mysql docker运行mysql镜像 dock

  • Docker安装MySQL8.0的实现方法

    环境:MacOS_Cetalina_10.15.1.Mysql8.0.18.Docker_2.0.0.3 1.docker仓库搜索mysql docker search mysql 2.docker仓库拉取mysql8.0 docker pull mysql:8.0 备注: docker pull mysql //默认拉取最新版本 3.查看本地仓库镜像是否下载成功 docker images mysql:8.0 4.安装运行mysql8.0容器 docker run -p 3307:3306 -

  • Docker安装MySQL8的方法步骤

    一.下载镜像 docker Hub官网URL:https://hub.docker.com/_/mysql/ 下载最新版本:docker pull mysql 下载指定版本:docker pull mysql:verison(8.0.11,8.0,8) 二.启动镜像 复制代码 代码如下: docker run  -d --name mysql -v /data/datadir:/var/lib/mysql -v /etc/mysql/my.cnf:/etc/mysql/my.cnf -p 330

  • Docker上部署mysql8主从复制的实现

    目录 环境准备 简易版本安装 设置密码 配置 MySQL 主从复制 创建 bridge 网络并指定 IP 区间 创建数据和配置存放目录 准备配置文件 启动数据库 远程访问配置(主从) 主库创建复制用户 从库设置 master 的信息 环境准备 需要一个 MySQL8 版本的 MySQL,因为我个人没有用过 mysql5,不知道二者是否会有一些特性上的偏差. 默认你与我的环境是一样的. 简易版本安装 先仅仅安装一个 MySQL,一上来就主从的话很多细节都会杂糅在一起. docker run -d

  • docker上部署MySQL的示例

    容器云的概念现在很火,现在很多公司都把MySQL部署在容器上,开始今天内容之前,我们先来看看容器云的概念吧. 1 容器云是什么? 要理解容器云的概念,首先需要了解容器,容器的介绍过程中,需要引入虚拟机来进行对比. 虚拟机: VMware或者Virtual BoX这种虚拟机想必大家在日常工作中都有用到过,它是模拟计算机操作系统的软件,你可以在windows计算机上安装Virtual BoX软件,然后在Virtual Box上安装Centos或者Ubuntu这种Linux操作系统,从而在一台机器上运

  • Docker上部署Nginx的方法步骤

    目录 1.从 docker 下载 Nginx 镜像 2.创建挂载目录 3.为了保证文件的正确性,建议先进入容器把对应的文件给复制出来 4.接下来修改下 default.conf 文件就好了 5.接下来就可以启动容器了 6.不停止 nginx 更新配置文件 1.从 docker 下载 Nginx 镜像 docker pull nginx 2.创建挂载目录 之后的文件就放这里面,对 docker 里 Nginx 对应的目录进行映射,就不用改文件进到容器里了 mkdir -p /data/nginx/

  • Docker安装部署Mysql8的过程(以作数据持久化)

    目录 1.创建容器并进行持久化处理 2.配置远程连接并尝试 1.创建容器并进行持久化处理 #拉取镜像 docker pull mysql:8.0.20 #启动镜像,用于拷贝配置文件到宿主机 docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20 #查看是否启动成功 docker ps -a #新建挂载目录并拷贝配置文件 mkdir -p /mysqldata/ docker cp mys

  • 在Docker上部署Python的Flask框架的教程

    本文中,我将尝试展示用Docker开发python应用(主要是Web应用)的可行方法.虽然我本人专注于Python的Flask微框架,但本文目的是演示如何通过Docker更好地开发和共享应用程序,(由任何语言和框架开发的应用程序).Docker通过封装依赖项,大大减少了开发环境和正式产品的差距. 大多数Python开发人员在开发中使用virtualenv.它提供了一种易用的机制让应用程序使用自己专用的依赖项,这些依赖项可能与在其它应用程序或操作系统存在冲突(尤其是不同的Pyhton版本,还有不同

  • docker compose部署主从复制的实现

    目录 配置解析 服务搭建 目录结构 Compose File 实例配置 启动服务 测试 受限于 Redis 单点性能,加上我们对数据天生就有的备份的需求,因此 Redis 提供了主从复制的服务. 本文记录了通过 docker compose 搭建一主双从的 Redis 服务. 配置解析 ################################# REPLICATION ################################# # [Slave]连接 Master 的配置 # s

  • .NET 5 部署在docker上运行的方法

    1.创建站点 创建一个ASP.NET Core Web应用程序,选中启用Docker支持.自动帮我们创建一个Dockerfile文件. 2.编写Dockerfile文件 dockerfile是一个文件格式的配置文件,用户可以使用dockerfile来快速构建自定义的镜像.由一行行命令语句组成,并且支持#开头的注释行. dockerfile主题内容一般分为4部分 基础镜像信息 维护者信息使用label指令 镜像操作指令 容器启动时执行指令 #See https://aka.ms/container

  • Docker部署MySQL8集群(一主二从)的实现步骤

    目录 一.CentOS7.9安装Docker20 二.部署MySQL集群(一主二从) 三.结果 一.CentOS7.9安装Docker20 1.安装yum-utils工具 yum install -y yum-utils 2.设置docker的依赖源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 注释:CentOS直接使用yum命令安装的Docker版本为1.13.1属于

随机推荐