Docker部署MySQL8 MGR

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Docker MySQL8.0.12 MGR

最近想试试用docker部署一套MySQL8的MGR多主,按照官方文档搞了好几天不成功,网上大部分是基于5.7安装的,没有参考意义价值。虽然有一些是基于8版本的但是配置文件都不对,这里就不喷了。所以这篇文章是自己的一个经验总结,也希望能帮助在MySQL8.0.3版本以上(为什么说8.0.3,后面会提到,嘿嘿)部署MGR的朋友(无论单主还是多主模式)。虽然我以前成功配置过MySQL5.7的单主和多主,但是和8还是有一定区别的。本文宿主机系统版本是CentOS7.3,MySQL最新稳定版8.0.12为主。
前期准备工作:
运行一个test名称的容器
docker run -d -it --name test centos
进入容器安装MySQL
docker exec -it test bash
执行如下安装命令
yum install yum-utils wget -y
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
yum install mysql-server –y
安装完成后直接退出容器,不需要启动。然后运行如下命令生成镜像
docker commit 容器ID mysql8.0.12
使用docker images可以进行查看
1、启动三个容器用于多主MGR配置,至于为什么加provileged和/usr/sbin/init,是因为MySQL服务启动会报Failed to get D-Bus connection: Operation not permitted,曾经以为docker后续会解决这个问题,但是一直没有。
docker run -d -it --privileged --name=mysql-mgr-node1 mysql8.0.12 /usr/sbin/init
docker run -d -it --privileged --name=mysql-mgr-node2 mysql8.0.12 /usr/sbin/init
docker run -d -it --privileged --name=mysql-mgr-node3 mysql8.0.12 /usr/sbin/init
执行成功后可以进去容器查看MySQL服务自动启动了,这点让我确实有点好奇~~~有知道的朋友欢迎留言。
image
2、配置第一个mysql-mgr-node1节点
查看mysql-mgr-node2和mysql-mgr-node3节点的hostname,做好IP和主机名映射关系,因为mgr后续要用到。另外两个节点也请配置,后续不再说明。
image
修改mysql的配置文件
cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server_id = 1
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_checksum = NONE

transaction_write_set_extraction = XXHASH64
loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856'
loose-group_replication_start_on_boot = off
loose-group_replication_local_address= "172.17.0.7:33061"
loose-group_replication_group_seeds= "172.17.0.7:33061,172.17.0.8:33061,172.17.0.9:33061"
loose-group_replication_bootstrap_group = off
重启mysql服务
systemctl restart mysqld
查看/var/log/mysqld.log里面会有一个临时的密码用于登录mysql服务器
mysql -u root -p"qpzsd24a5l;E"
mysql第一次必须修改密码
alter user 'root'@'localhost' identified by 'Bdqn@123';
开始配置mgr组复制
image
image
查看第一个以引导身份加入的mysql节点,ONLINE表示正常。角色是主。
image
3、配置第二个mysql-mgr-node2节点
mysql配置文件my.cnf直接复制mysql-mgr-node1节点即可!只需要修改两处地方。
server_id = 2
loose-group_replication_local_address= "172.17.0.8:33061"
hosts文件记得加入映射
重启mysql服务
systemctl restart mysqld
进入mysql修改密码及mgr配置
image
查看加入组复制的第二个mysql节点,ONLINE表示正常。角色是主。
image
这里说几个注意的地方:
上面我说了8.0.4,因为mysql为了考虑mgr组复制的安全性,在8.0.4版本之后(包括8.0.4)将group_replication_allow_local_disjoint_gtids_join移除了,也就是说上面需要打开global group_replication_recovery_get_public_key是我经过多次尝试发现的。
另外一个是两个节点都在一开始执行reset master操作,我不确定是什么原因导致的,因为不执行的话第二个、第三个及后续节点加入组复制都会报错。所以我在一开始的时候就做了这个操作。
4、配置第三个mysql-mgr-node3节点
mysql配置文件my.cnf还是直接复制mysql-mgr-node1节点即可!只需要修改两处地方。
server_id = 3
loose-group_replication_local_address= "172.17.0.9:33061"
同样hosts文件记得加入映射
重启mysql服务
systemctl restart mysqld
进入mysql修改密码及mgr配置,命令和mysql-mgr-node2节点一模一样
image
查看加入组复制的第三个mysql节点,ONLINE表示正常。角色是主。
image
至此MySQL8.0.12版本的MGR部署完成。
如果是单主模式每个mysql节点上不需要执行如下两条命令即可!
set global group_replication_single_primary_mode=FALSE;
set global group_replication_enforce_update_everywhere_checks=TRUE;

常见报错:

1)2018-09-14T06:18:04.866248Z 0 [ERROR] [MY-011526] [Repl] Plugin group_replication reported: 'This member has more executed transactions than those present in the group. Local transactions: fc283fd2-b7e0-11e8-bde9-0242ac110009:1 > Group transactions: ce9be252-2b71-11e6-b8f4-00212844f856:1-2'
2018-09-14T06:18:04.866384Z 0 [ERROR] [MY-011522] [Repl] Plugin group_replication reported: 'The member contains transactions not present in the group. The member will now exit the group.'
所有节点重启MySQL服务,然后执行
reset master;
配置第一个引导组的MySQL节点后,再加入第二个MySQL节点到组复制。
2)如果加入组复制的节点状态一直是RECOVERING
stop group_replication;
set global group_replication_recovery_get_public_key=ON;
start group_replication;

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
2
13
分享
相关文章
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
207 82
Ubuntu下部署及操作Docker技巧
以上就是在Ubuntu下部署及操作Docker的具体步骤。但这只是冰山一角,Docker的魅力远不仅如此。你可以将其视为存放各种工具的小箱子,随时随地取用,极大地提升工作效率。你也可以私人订制,适应不同的开发环境,就像一个拥有各种口味冰淇淋的冰箱,满足各种各样的需求。好了,现在你已经掌握了基本的Docker运用技巧,快去尝试使用吧!记住,沉浸在探索中,你会找到无尽的乐趣和满满的收获。
44 23
在Ubuntu系统的Docker上安装MySQL的方法
以上的步骤就是在Ubuntu系统的Docker上安装MySQL的详细方法,希望对你有所帮助!
38 12
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
63 16
大模型文件Docker镜像化部署技术详解
大模型文件Docker镜像化部署技术详解
100 2
|
23天前
|
在Docker上部署Ollama+AnythingLLM完成本地LLM Agent部署
通过以上步骤,您可以成功在Docker上部署Ollama和AnythingLLM,实现本地LLM Agent的功能。在部署过程中,确保环境和配置正确,以避免不必要的问题。希望本文能够帮助您顺利完成部署,并在本地环境中高效地使用LLM模型。
463 8
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
74 19
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
119 1
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
105 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等