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

 更新时间:2022年08月02日 10:29:58   作者:m0_67392409  
本文主要介绍了Docker上部署mysql8主从复制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

环境准备

需要一个 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主从复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 两种方式创建docker镜像的启动容器时区别介绍(总结篇)

    两种方式创建docker镜像的启动容器时区别介绍(总结篇)

    这篇文章主要介绍了基于两种创建docker镜像的启动容器时区别总结,第一种凡是用docker commit生成的镜像启动的时候可以加载一个启动自己应用的脚本,第二种用Docfile文件生成的镜像时,来启动容器就不用再加这个脚本了,具体详情一起通过本文学习吧
    2016-10-10
  • Windows10 Docker Desktop安装过程

    Windows10 Docker Desktop安装过程

    Docker Desktop是Docker公司推出的一款桌面应用程序,它提供了一个用户友好的界面,方便开发人员在本地环境中使用容器技术,这篇文章主要介绍了Windows10 Docker Desktop安装过程,需要的朋友可以参考下
    2024-01-01
  • docker registry 私有仓库的搭建过程

    docker registry 私有仓库的搭建过程

    这篇文章主要介绍了docker registry 私有仓库,私有仓库最常用的就是Registry、Harbor两种,那接下来详细介绍如何搭建registry私有仓库,感兴趣的朋友跟随小编一起看看吧
    2022-01-01
  • 使用docker compose搭建一个elk系统的方法

    使用docker compose搭建一个elk系统的方法

    这篇文章主要介绍了使用docker-compose搭建一个elk系统的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Docker容器使用jenkins部署web项目(总结)

    Docker容器使用jenkins部署web项目(总结)

    这篇文章主要介绍了Docker容器使用jenkins部署web项目(总结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Docker Windows下如何安装详细介绍(图文)

    Docker Windows下如何安装详细介绍(图文)

    这篇文章主要介绍了Docker Windows下如何安装详细介绍(图文)的相关资料,需要的朋友可以参考下
    2016-12-12
  • 详解使用Docker部署MySQL(数据持久化)

    详解使用Docker部署MySQL(数据持久化)

    这篇文章主要介绍了详解使用Docker部署MySQL(数据持久化),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • docker环境中websocket 通过nginx代理不通解决方案

    docker环境中websocket 通过nginx代理不通解决方案

    这篇文章主要介绍了docker环境中websocket 通过nginx代理不通解决方案,下面是一些可能会导致 WebSocket 代理失败的问题以及相应的解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Docker-client for python详解及简单示例

    Docker-client for python详解及简单示例

    这篇文章主要介绍了Docker-client for python详解及简单示例的相关资料,需要的朋友可以参考下
    2017-04-04
  • 总结Docker不适合部署数据库的7大原因

    总结Docker不适合部署数据库的7大原因

    在本篇文章里小编给大家整理一篇关于Docker不适合部署数据库的7大原因,有兴趣的朋友们可以参考学习下。
    2021-01-01

最新评论