Docker部署MySQL8 MGR

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 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;

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
37 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
19天前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
166 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
3天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
9 1
|
8天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
29 2
|
9天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
22 3
|
12天前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
120 2
|
13天前
|
弹性计算 数据库连接 Nacos
阿里云ECS服务器在docker中部署nacos
docker pull nacos 失败,docker部署nacos遇到的问题,nacos数据库连接,nacos端口映射
64 1
|
21天前
|
Web App开发 前端开发 测试技术
【Docker项目实战】使用docker部署tabler后台模版
【10月更文挑战第10天】使用docker部署tabler后台模版
31 1
【Docker项目实战】使用docker部署tabler后台模版
|
17天前
|
运维 Kubernetes 监控
掌握Docker容器化技术:构建、部署与管理的高效实践
【10月更文挑战第14天】掌握Docker容器化技术:构建、部署与管理的高效实践
32 0
|
18天前
|
关系型数据库 数据库 PostgreSQL
在docker上部署postgresSQL主从
通过以上步骤,我们完成了在Docker环境中部署PostgreSQL主从复制的基本配置。请注意,实际生产环境中还需考虑安全性增强(如SSL加密)、监控、自动故障切换等高级配置。此外,根据具体的业务需求和规模,可能还需要考虑使用更专业的解决方案或工具,如Patroni、PgBouncer等,来进一步提升数据库集群的稳定性和效率。
23 0

热门文章

最新文章