Docker部署MySQL8 MGR

简介: 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;

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
9月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
3993 4
|
10月前
|
存储 Docker Python
docker 部署 sftp
本文介绍SFTP服务的部署与配置,包括users.conf用户配置规则、Docker容器运行命令及上传目录权限说明,重点解析atmoz/sftp镜像的chroot机制与子目录映射,确保用户登录后正确访问/upload目录,并提供Python脚本实现文件上传示例。
827 12
docker 部署 sftp
|
9月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
421 5
|
9月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
2748 8
|
9月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
916 6
|
9月前
|
存储 搜索推荐 数据库
🚀 RAGFlow Docker 部署全流程教程
RAGFlow是开源的下一代RAG系统,融合向量数据库与大模型,支持全文检索、插件化引擎切换,适用于企业知识库、智能客服等场景。支持Docker一键部署,提供轻量与完整版本,助力高效搭建私有化AI问答平台。
8079 8
|
9月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
1199 4
|
10月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
590 158
|
10月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

热门文章

最新文章