主服务器MariaDB意外停止原因排查及最优恢复方案咨询
定位MariaDB停止操作发起者
- 深挖systemd日志细节
执行journalctl -u mariadb.service -o verbose查看带元数据的详细日志,重点关注_SYSTEMD_USER_UNIT、_UID、_PID字段,这些信息能直接定位发起停止操作的进程或用户。如果需要精准时间范围,可结合时间参数:journalctl --since "YYYY-MM-DD HH:MM" --until "YYYY-MM-DD HH:MM" -u mariadb.service -o json-pretty,JSON格式便于解析关联的进程上下文。 - 排查systemd与集群触发机制
- 检查定时任务:查看用户级定时任务
crontab -l,系统级定时任务目录ls /etc/cron*,以及systemd定时器systemctl list-timers,确认是否有夜间执行的任务涉及MariaDB启停。 - 检查heartbeat/DRBD联动脚本:由于是异地高可用集群,heartbeat可能在检测到节点异常(如kayelles.service的网络故障)时触发服务切换。查看
/etc/ha.d/或集群配置目录下的资源脚本,确认是否存在主动停止MariaDB的逻辑。
- 检查定时任务:查看用户级定时任务
- 关联CPU负载与kayelles.service异常
- 提取CPU负载升高时段的系统日志:
grep "YYYY-MM-DD [0-9][0-9]:[0-9][0-9]" /var/log/syslog | grep "load average",结合进程审计工具(若安装psacct,用lastcomm查看当时的进程活动),定位导致CPU飙升的进程。 - 分析kayelles.service日志:查看其专属日志文件(如
/var/log/kayelles/*.log),确认数据包乱序是否引发网络分区,导致heartbeat误判主节点故障,进而触发MariaDB停止。
- 提取CPU负载升高时段的系统日志:
- 检查进程终止信号记录
- 查看内核日志:
dmesg | grep -i "kill\|signal",确认是否由内核发送信号终止MariaDB进程。 - 检查MariaDB错误日志(默认路径
/var/log/mariadb/mariadb.log),排查是否存在OOM killer记录(Out of memory: Killed process)——CPU负载持续升高可能引发内存耗尽,触发系统强制终止进程。
- 查看内核日志:
恢复MariaDB服务的最优方式
- 先确认DRBD同步状态
执行drbdadm status,确保主节点DRBD设备处于Primary/UpToDate状态,避免启动时出现数据不一致。若从节点为Secondary/UpToDate,可先锁定DRBD资源:drbdadm lock <resource-name>,防止同步过程中出现异常。 - 安全启动MariaDB
- 优先备份数据:执行
mysqldump --all-databases > /backup/mariadb_full_backup_$(date +%Y%m%d).sql,或直接打包MariaDB数据目录(默认/var/lib/mysql),避免修复过程中数据丢失。 - 检查数据完整性:对MyISAM表执行
myisamchk /var/lib/mysql/*.MYI,对InnoDB表执行innochecksum /var/lib/mysql/ibdata1;若发现损坏,用mysqlcheck --repair --all-databases尝试修复。 - 启动并验证服务:执行
systemctl start mariadb.service,启动后立即用systemctl status mariadb.service确认运行状态,同时登录数据库执行SHOW STATUS;验证核心功能正常。
- 优先备份数据:执行
- 高可用集群联动恢复
- 检查heartbeat状态:
service heartbeat status,确认集群资源已正确挂载到主节点,未触发不必要的故障切换。 - 修复kayelles.service网络问题:调整异地链路MTU、优化QoS配置解决数据包乱序,重启
kayelles.service并验证其稳定性,避免再次触发集群异常检测逻辑。
- 检查heartbeat状态:
- 事后预防配置
- 配置MariaDB OOM保护:在
/etc/systemd/system/mariadb.service.d/override.conf中添加:
防止MariaDB因内存紧张被系统OOM killer终止。[Service] MemoryMax=infinity OOMScoreAdjust=-1000 - 优化heartbeat检测阈值:修改
ha.cf中的deadtime、warntime参数,延长异常判定时间,避免短暂网络波动导致误切换。 - 开启进程审计:安装
auditd并添加规则auditctl -a exit,always -F path=/usr/bin/systemctl -F perm=x,记录所有systemctl操作,便于后续快速溯源。
- 配置MariaDB OOM保护:在
内容的提问来源于stack exchange,提问作者Slayes
相关产品推荐
相关产品推荐

