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;

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
39 23
|
7天前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
39 22
|
10天前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
51 25
|
22天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
11天前
|
SQL 关系型数据库 MySQL
docker-compose部署mysql8
使用docker-compose容器化部署mysql8
|
20天前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
82 14
|
17天前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
68 7
|
8月前
|
关系型数据库 MySQL 数据库
使用 Docker 安装 MySQL 8
使用 Docker 安装 MySQL 8
1823 4
|
8月前
|
关系型数据库 MySQL 数据安全/隐私保护
Docker 安装 MySQL5.7 和 MySQL8
Docker 安装 MySQL5.7 和 MySQL8
432 0
|
8月前
|
存储 关系型数据库 MySQL
docker安装mysql8忽略大小写
docker安装mysql8忽略大小写
936 0