Ubuntu MariaDB故障排查思路
导读:Ubuntu MariaDB故障排查思路 一 快速定位与日志优先 查看服务状态与系统日志,聚焦关键词:Error、Failed、Can’t、Permission denied、InnoDB。命令示例: systemctl 状态与详细错误...
Ubuntu MariaDB故障排查思路
一 快速定位与日志优先
- 查看服务状态与系统日志,聚焦关键词:Error、Failed、Can’t、Permission denied、InnoDB。命令示例:
- systemctl 状态与详细错误:sudo systemctl status mariadb;sudo journalctl -xe -u mariadb
- 服务日志:sudo journalctl -u mariadb --since today
- 定位 MariaDB 错误日志与查询日志,常见路径与命令:
- 错误日志:/var/log/mysql/error.log 或 /var/log/mariadb/error.log;查询日志(若启用):/var/log/mariadb/mariadb.log
- 快速检索:sudo tail -n 50 /var/log/mysql/error.log;sudo grep -i “failed|access denied” /var/log/mysql/error.log
- 若 systemctl 提示 “Job for mariadb.service failed …”,优先用 journalctl 查看具体报错行号与上下文,再回到错误日志定位根因。
二 常见故障场景与处理要点
- 目录与权限类
- 日志目录缺失:/var/log/mariadb/ 不存在会导致启动失败。处理:sudo mkdir -p /var/log/mariadb & & sudo chown -R mysql:mysql /var/log/mariadb
- 运行时目录缺失:/var/run/mariadb/ 不存在或不可写,影响 pid/socket。处理:sudo mkdir -p /var/run/mariadb & & sudo chown -R mysql:mysql /var/run/mariadb
- 数据目录未初始化或权限错误:/var/lib/mysql 为空或属主不对。处理:确保为空后执行 sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql(或采用系统自带安全初始化流程),再修正属主为 mysql。
- 端口与进程冲突
- 端口被占用(默认 3306):ss -lntp | grep 3306;发现占用后停掉对应进程或修改 MariaDB 端口重启。
- 重复实例/无法加锁:InnoDB 报 “Unable to lock ./ibdata1, error: 11” 常见于同数据目录多实例或残留 mysqld 进程,需清理重复进程与锁文件。
- 配置与权限安全
- AppArmor 拦截:sudo aa-status 查看;调试时可 sudo aa-complain /usr/sbin/mysqld,必要时 sudo aa-disable /usr/sbin/mysqld(排障后恢复为 enforce)。
- 本地 socket 连接失败(ERROR 2002):检查 socket 路径(/var/lib/mysql/mysql.sock 或 /tmp/mysql.sock),必要时用 mysql --socket=… 指定或创建软链;确认 mysqld 正在运行。
- 远程连接失败(常见于客户端报 10061 或超时):确认服务运行、监听地址与端口、防火墙放行;如需远程,编辑 /etc/mysql/mariadb.conf.d/50-server.cnf 将 bind-address 设为 0.0.0.0(注意安全),并确保用户具备远程权限(如 GRANT … TO ‘user’@‘%’)。
- 存储与 InnoDB 异常
- 磁盘空间不足:df -h;清理或扩容后再启动。
- InnoDB 日志/表空间损坏导致无法启动:错误含 “InnoDB: Corrupted file-level record … set innodb_force_recovery=1 …”。处理:在 [mysqld] 中从 innodb_force_recovery=1 逐级尝试(到 4 以上为只读),能启动后立刻 mysqldump 全量备份,再重建实例恢复数据。
三 高频报错速查表
| 症状 | 快速检查 | 处理要点 |
|---|---|---|
| systemctl 启动失败 | systemctl status mariadb;journalctl -xe -u mariadb | 从报错行定位到具体配置/目录/权限问题 |
| ERROR 2002 Can’t connect to local MySQL server | ps -ef | grep mysqld;ls -l /var/lib/mysql/mysql.sock;my.cnf 中 socket 配置 |
| 端口占用/多实例冲突 | ss -lntp | grep 3306;ps aux |
| InnoDB 启动失败/日志损坏 | 错误日志含 “InnoDB: Corrupted …” | 设置 innodb_force_recovery=1…6 逐级尝试;能启动即备份,随后重建恢复 |
| 日志目录不存在 | ls -ld /var/log/mariadb | mkdir -p 并 chown mysql:mysql |
| 远程连不通/10061 | ss -lntp | grep 3306;iptables/firewalld;bind-address;mysql.user 主机列 |
四 安全加固与恢复建议
- 最小权限与网络
- 远程访问仅授予必要库表与主机,避免使用 root@‘%’;对外网开放时配合 TLS/SSL、强口令与防火墙白名单。
- 配置与访问控制
- 明确 server.cnf 中 datadir、socket、log-error、pid-file 路径;避免重复配置片段导致加载错误。
- 排障期间临时放宽 AppArmor 后务必恢复 enforce;变更 bind-address 与端口后同步更新防火墙与应用侧配置。
- 备份与回滚
- 任何 InnoDB 异常恢复(如启用 innodb_force_recovery)成功后,优先执行 全量逻辑备份(mysqldump),再重建实例与数据目录,确保可回滚与一致性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu MariaDB故障排查思路
本文地址: https://pptw.com/jishu/777925.html
