【每日一记11】数据库连接报错:ERROR 1047 (08S01)
  

zqm 1688

{{ttag.title}}
背景:昨天突然系统登录不上了,之前都好好很稳定,我想着不会有太大问题,由于是周日,我立即登录看了日志是怎么回事,发现数据库连接异常,如题异常;

数据库环境:CentOS + MariaDB10.1.22 + galera cluster

说明:可能一部分童鞋没用过MariaDB,MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:某公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。

MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

而galera cluster是mysql多主集群,包含在MariaDB中,同时支持Percona xtradb、MySQL,是一个易于使用的高可用解决方案,在数据完整性、可扩展性及高性能方面都有可接受的表现。

问题分析:当数据库集群正常运行的时候,可高性能正常运行,当其他节点正常关闭,只剩下一个节点的时候,也是可以正常读写的,但是当其他节点异常关闭时,就不能提供正常的读写了,因为此时数据库集群中没有了裁判节点,也就是此时会出现脑裂,数据库不知道读写出现混乱,不能正常读写。就会导致如题异常。

解决方案:

背景:昨天突然接到客户电话说系统登录不上了,之前都好好很稳定,我想着不会有太大问题,由于是周日,我立即登录看了日志是怎么回事,发现数据库连接异常,如题异常;

数据库环境:CentOS6.4 + MariaDB10.1.22 + galera cluster

说明:可能一部分童鞋没用过MariaDB,MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:某公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。

MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

而galera cluster是mysql多主集群,包含在MariaDB中,同时支持Percona xtradb、MySQL,是一个易于使用的高可用解决方案,在数据完整性、可扩展性及高性能方面都有可接受的表现。

问题分析:当数据库集群正常运行的时候,可高性能正常运行,当其他节点正常关闭,只剩下一个节点的时候,也是可以正常读写的,但是当其他节点异常关闭时,就不能提供正常的读写了,因为此时数据库集群中没有了裁判节点,也就是此时会出现脑裂,数据库不知道读写出现混乱,不能正常读写。就会导致如题异常。

解决方案:收集了很多资料,一步一步的走,最后花了一天的时间才解决这个问题;

第一步:查看完日志后,发现数据库异常后,查看数据库状态:service mysql status  发现只有一台DB服务是正常启动状态

第二步:查看galera cluster 节点数:进入数据库 查看集群的节点  MariaDB [(none)]> SHOW STATUS WHERE Variable_name IN; 和预想的一样就剩一个节点了,此时查看集群配置文件/etc/my.cnf.d/server.cnf  集群配置wsrep_cluster_address="gcomm://"里配置了3个节点服务ip,也就是说目前已经挂了两个了,经过咨询同事之前有一个节点是正常关闭(为了节省资源);然后就把问题缩小到目前正在使用的两个节点上了,很明显一个节点正常,那肯定是另一个节点异常关闭了,从而导致了现在的异常

第三步:知道是节点异常关闭的问题,那就先恢复数据库,那么现在问题来了在重启数据库的时候一直Failed

经过查阅mysql日志发现有一个节点,正常关闭的节点一直处于连接超时状态,我就修改了galera cluster 配置文件/etc/my.cnf.d/server.cnf 不用的这个集群几点删除,重启还是Failed , 查看日志报错就变了:WSREP: failed to open gcomm backend connection: 110: failed to reach primary view: 110 (Connection timed out),此时针对此错误:

删除所有节点的两个缓存文件及/var/lock/subsys 目录下的mysql 文件,然后重新启动:

rm -rf /var/lock/subsys/mysql

cd /var/lib/mysql

rm -rf galera.cache

rm -rf grastate.dat

第一个节点这样启动:

service mysql start --wsrep-new-cluster

其他节点正常启动:

service mysql start

到此处主节点已经正常启动了,也就是说数据库已经可以正常用了,但是集群还没起来,此时就要查看异常节点的日志了,查看的时候发现一直重复出现一条错误日志:19:25:02 [ERROR] Invalid (old?) table or database name 'lost+found'

这个日志的大致意思是什么呢?就是这个“lost+found”空间是无效的,这就很明了的,我火速查看磁盘空间,结果发现此节点所占的磁盘已经100%了

到此,异常原因和解决方案已经有了。

打赏鼓励作者,期待更多好文!

打赏
1人已打赏

gqce 发表于 2020-9-22 23:25
  
感谢分享
一一氵 发表于 2020-9-23 09:22
  

打卡学习
sxfusr 发表于 2020-9-23 11:53
  
打卡学习
发表新帖
热门标签
全部标签>
西北区每日一问
每日一问
干货满满
技术盲盒
技术笔记
产品连连看
GIF动图学习
新版本体验
标准化排查
技术咨询
安装部署配置
功能体验
2023技术争霸赛专题
信服课堂视频
自助服务平台操作指引
每周精选
解决方案
设备维护
秒懂零信任
升级
高手请过招
升级&主动服务
答题自测
玩转零信任
信服圈儿
通用技术
技术晨报
社区新周刊
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
原创分享
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高频问题集锦

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人