Linux下 MariaDB 故障排查速查手册
一 快速定位流程
二 常见故障与修复对照表
| 症状 | 快速检查 | 修复建议 |
|---|---|---|
| 服务起不来,提示“Job for mariadb.service failed …” | systemctl status、journalctl -xe、tail 错误日志 | 按日志指引修复:创建缺失目录并授权(如**/var/log/mariadb**、/var/run/mariadb),或初始化数据目录(见下节) |
| ERROR 2002 Can’t connect to local MySQL server through socket | ps -ef | grep mysql;cat /etc/my.cnf |
| 启动卡进度条或 InnoDB 报错 | 错误日志含 InnoDB 初始化/恢复失败 | 先查磁盘空间 df -h;若提示 InnoDB 恢复失败,按下一节“InnoDB 恢复”处理 |
| 1130 Host ‘x.x.x.x’ is not allowed to connect | 防火墙、bind-address、mysql.user 表 | 开放3306/tcp;将bind-address=0.0.0.0(按需);执行授权:GRANT … TO ‘user’@‘x.x.x.x’ IDENTIFIED BY ‘pwd’; FLUSH PRIVILEGES; |
| Communications link failure | 服务是否运行、端口连通、JDBC URL | 启动服务;检查3306连通(telnet/ss);JDBC 示例:jdbc:mysql://ip:3306/db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai |
| 目录/文件权限或 PID 写入失败 | ls -ld 日志/运行/数据目录;ps aux | 创建目录并授权mysql:mysql(如**/var/log/mariadb**、/var/run/mariadb、/var/lib/mysql);确保pid-file所在目录可写 |
| 动态库缺失(libaio、libnuma) | ldd /usr/sbin/mysqld | 安装依赖:yum/apt install libaio numactl |
| 配置文件读取错误/多实例冲突 | 多个 my.cnf 路径、端口占用 | 统一配置路径与端口;停掉重复实例(kill)后重启 |
三 启动失败高频场景与处理
日志目录或 PID 目录缺失/不可写
现象:启动失败并提示无法写入日志或 PID。
处理:创建目录并授权——mkdir -p /var/log/mariadb /var/run/mariadb;chown -R mysql:mysql /var/log/mariadb /var/run/mariadb;随后重启服务。
数据目录未初始化或权限错误
现象:日志提示数据目录未初始化、权限拒绝或表不存在。
处理:确保datadir(常见为**/var/lib/mysql**)为空后执行初始化——mysql_install_db --user=mysql --datadir=/var/lib/mysql --force;完成后chown -R mysql:mysql /var/lib/mysql并启动服务。
磁盘空间耗尽导致 InnoDB 无法启动
现象:启动进度条卡住或 InnoDB 报错(如无法锁定ibdata1、错误码11)。
处理:执行df -h确认空间;清理或扩容分区;必要时临时迁移数据目录并修改datadir后重启。
InnoDB 日志损坏无法启动
现象:错误日志出现“InnoDB: Corrupted file-level record; set innodb_force_recovery=1 …”。
处理:在配置中逐步设置innodb_force_recovery=1→6(从低到高,只读模式随级别升高),能启动后立刻mysqldump全量逻辑备份,然后重建实例并恢复数据。
四 连接与网络问题排查
本机 socket 连接失败(ERROR 2002)
处理:确认 mysqld 已运行;核对**/etc/my.cnf中socket路径与客户端一致;必要时用mysql --socket=实际路径连接,或在/tmp**创建软链指向真实 socket。
远程连接被拒绝(ERROR 1130)
处理:开放防火墙3306/tcp(firewalld/ufw/iptables);将bind-address=0.0.0.0(或指定网段);在库内为用户授予来源主机权限:GRANT … TO ‘user’@‘客户端IP’ IDENTIFIED BY ‘pwd’; FLUSH PRIVILEGES;。
应用报 Communications link failure
处理:确认服务运行与3306连通;JDBC URL 建议显式指定字符集与时区,例如:
jdbc:mysql://ip:3306/db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai。
五 应急与恢复建议