温馨提示×

为什么debian mysql崩溃

小樊
36
2026-10-22 09:06:39
栏目: 云计算

Debian 上 MySQL(或 MariaDB,Debian 默认常带 MariaDB)崩溃的原因很多,下面按常见程度和排查思路给你一个系统性的说明。


一、最常见原因

1. 内存不足(OOM)

这是 Debian 服务器上 MySQL 崩溃的第一大原因。

表现:

  • MySQL 突然消失
  • systemctl status mysql 显示 killed
  • dmesg 中有 Out of memory: Killed process

检查:

dmesg | grep -i oom
free -h

解决:

  • 降低 innodb_buffer_pool_size
  • 增加 swap
  • 升级内存

2. 磁盘空间满

MySQL 无法写日志或临时文件时会直接崩溃。

检查:

df -h

重点看:

  • /var/lib/mysql
  • /tmp

解决:

  • 清理日志
  • 删除无用数据
  • 扩大磁盘

3. InnoDB 损坏

异常关机、断电、强制 kill 会导致 InnoDB 表空间损坏。

日志常见:

InnoDB: Database page corruption
InnoDB: Assertion failure

解决:

systemctl stop mysql
innodb_force_recovery = 1~6

(仅用于导出数据,不是长期方案)


4. 配置文件错误

如 my.cnf 中参数写错。

表现:

  • MySQL 启动失败
  • 日志提示 unknown variable

检查:

mysqld --verbose --help | head
journalctl -u mysql

5. 权限问题

/var/lib/mysql 权限被改坏。

检查:

ls -ld /var/lib/mysql

正确一般为:

drwx------ mysql mysql

修复:

chown -R mysql:mysql /var/lib/mysql

二、Debian 特有情况

1. 实际是 MariaDB

Debian 默认:

mysql → mariadb-server

崩溃日志在:

/var/log/mysql/error.log
journalctl -u mariadb

2. systemd 重启限制

如果 MySQL 反复崩溃:

systemctl status mysql

可能看到:

start request repeated too quickly

3. AppArmor 限制

Debian 默认启用 AppArmor。

表现:

  • 无法访问数据目录
  • 启动失败

检查:

aa-status
cat /var/log/syslog | grep apparmor

三、快速排查步骤(推荐顺序)

# 1. 看服务状态
systemctl status mysql

# 2. 看错误日志
journalctl -u mysql -n 100
cat /var/log/mysql/error.log

# 3. 看系统资源
free -h
df -h
dmesg | tail

# 4. 手动启动看报错
mysqld_safe --user=mysql

四、如果你愿意,我可以进一步帮你

你可以直接贴出:

  • journalctl -u mysql 或 error.log 的报错
  • MySQL / MariaDB 版本
  • 是 突然崩 还是 启动不了

我可以根据日志精准判断是哪一种崩溃。

0 踩