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主从复制内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    mac怎么安装mysql| macbook怎么下载mysql

    mac怎么安装mysql| macbook怎么下载mysql,标签,学习python 不得不学习的就是数据库,那么在开始学习数据库之前,那么今天我们先说下怎么安装m

    MySQL更新更新页面1/4。

    MySQL更新更新页面1/4。,,插入和替换 插入和替换语句的功能是将新数据插入表中,这两个语句的语法相似,它们之间的主要区别是如何处理重复的

    mysql数据库启动失败

    mysql数据库启动失败,报错,非正常,1、原因 公司服务器故障,非正常停机导致数据库启动失败。 报错信息 [ [email protected] dmp]# /etc/ini

    mysql长整型是什么

    mysql长整型是什么,整型,数据类型,语法,用户,填充,版本,MySQL长整型是“BIGINT”,是MySQL中最常用的数据类型之一,其可以用来存储较大的整数值,与

    聊聊docker下怎么启动容器

    聊聊docker下怎么启动容器,镜像,应用程序,下载,启动,名称,命令,Docker是一种轻量级的虚拟化解决方案,可以将应用和其所有的依赖性封装到一个独立

    深入理解MySQL分区

    深入理解MySQL分区,查询,数据,列表,索引,操作,按键,MySQL数据库是一个开源的关系型数据库管理系统。在一些大型数据环境中,为了更好地管理数据、

    mysql 如何查询

    mysql 如何查询,查询,数据,语句,条件,选取,排序,MySQL是一款常用的关系型数据库管理系统,被广泛应用于各种网站和应用开发。在MySQL中查询数据是

    MySQL中怎么实现分页操作

    MySQL中怎么实现分页操作,数据,显示,偏移量,分页,查询,初始,一、 背景什么是分页,就是查询时候数据量太大,一次性返回所有查询结果既耗费网络资源

    mysql怎么连接数据库

    mysql怎么连接数据库,服务,启动,数据库,命令,登录,步骤,mysql连接数据库的方法:1、通过计算机管理方式或通过命令行方式执行“net start mysql”

    mysql 查询拼接

    mysql 查询拼接,函数,字段,字符串,查询,分隔符,连接,MySQL 查询拼接在使用 MySQL 进行查询时,有时需要将多个字段或多张表中的字段进行拼接,这时

    怎么启动 mysql

    怎么启动 mysql,启动,服务器,输入,命令提示符,终端,命令,MySQL是一种广泛使用的关系型数据库管理系统。它是一种可扩展性强、性能卓越、跨平台