Linux MariaDB故障排查方法有哪些
导读:Linux MariaDB故障排查方法 一 快速定位与通用流程 使用系统服务日志定位启动失败原因:执行systemctl status mariadb.service与journalctl -xe,优先关注“Failed/Error/Pe...
Linux MariaDB故障排查方法
一 快速定位与通用流程
- 使用系统服务日志定位启动失败原因:执行systemctl status mariadb.service与journalctl -xe,优先关注“Failed/Error/Permission denied/Cannot assign requested address”等关键词。
- 查看MariaDB应用日志:默认路径常为**/var/log/mariadb/mariadb.log**,使用tail -n 30 /var/log/mariadb/mariadb.log或tail -fn 30实时跟踪。
- 核对配置文件加载顺序与位置:MariaDB会按内置路径读取多个my.cnf,注意是否存在多份配置冲突;必要时用strace /usr/local/mysql/bin/mysqld 2> & 1 | tee 1.log观察配置加载过程。
- 手工前台启动验证:直接运行mysqld前台输出,能更快暴露语法/权限/目录等错误。
- 依赖与库检查:用ldd /usr/local/mysql/bin/mysqld确认动态库(如libaio.so.1、libnuma.so.1)是否缺失;若缺失安装对应包(如libaio、numactl)。
- 环境与资源巡检:确认磁盘空间 df -h、inode、内存、ulimit -n、SELinux/防火墙状态。
- 错误码辅助:用**perror < 错误码> **快速解释常见错误含义。
二 常见故障场景与处理要点
-
服务无法启动(Job failed)
- 日志目录不存在或无写权限:创建**/var/log/mariadb/并授权mysql:mysql**,如chown -R mysql.mysql /var/log/mariadb。
- 数据目录未初始化或权限错误:确保datadir为空后执行初始化(如mysql_install_db --user=mysql --datadir=/var/lib/mysql),并修正权限chown -R mysql:mysql /var/lib/mysql。
- PID/运行目录不可写:创建**/var/run/mariadb/并授权mysql:mysql**。
- 端口被占用或重复实例:用ss -lntp | grep 3306或ps aux | grep mysqld定位并停止占用进程。
- 配置错误/多配置文件冲突:统一配置路径与内容,避免重复包含。
- 依赖库缺失:安装libaio、numactl等缺失库。
- 磁盘满/InnoDB无法加锁:清理或扩容分区,检查df -h与InnoDB: Unable to lock ./ibdata1类报错。
-
本地连接失败 ERROR 2002 (HY000)
- 服务未启动:先systemctl start mariadb。
- Socket路径不一致:在客户端显式指定mysql --socket=/var/lib/mysql/mysql.sock;必要时创建软链ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock;用ps -ef | grep mysql与my.cnf核对socket配置。
-
远程连接失败 Communications link failure
- 数据库未启动或端口不通:确认systemctl status mariadb、ss -lntp | grep 3306,云环境检查安全组/防火墙。
- JDBC/驱动参数:在连接串中显式设置useSSL=false/true、serverTimezone、合理的connectTimeout;高版本驱动建议启用SSL并正确配置证书。
-
表损坏或异常关机后的恢复
- MyISAM表损坏:用myisamchk -c -r /var/lib/mysql/mysql/proc.MYI修复索引后重启。
- 存在未完成事务:启动时使用**–tc-heuristic-recover=ROLLBACK**提交或回滚悬挂事务。
- Galera集群异常:清理**/var/lib/mysql/grastate.dat或临时将wsrep_cluster_address=“gcomm://”**清空后单机启动,再恢复集群配置。
三 性能与高CPU问题排查
- 识别负载类型:
- QPS高且无明显慢SQL:曲线与CPU高度吻合,优化余地小,优先考虑扩容、读写分离、缓存(如Redis/Memcached)、历史数据归档与分库分表。
- 慢SQL导致:QPS不高但扫描行数大,优化空间大。
- 定位问题SQL:
- 实时会话:show processlist / show full processlist,关注状态为Sending data、Copying to tmp table、Sorting result、Using filesort的长时查询;必要时kill [ID]。
- 执行计划:对可疑SQL执行EXPLAIN,检查是否走索引、扫描行数、是否使用临时表/文件排序。
- 慢查询日志分析:
- 启用slow_query_log=1、设置long_query_time(如5秒)、log_output=TABLE,FILE,用mysqldumpslow -t 5 -s at /var/log/mysql/slow-query.log汇总分析。
- 优化手段:添加/改写索引、改写SQL避免全表扫描与文件排序、优化JOIN与子查询、合理设置innodb_buffer_pool_size等内存参数。
四 高频检查清单与命令速查
| 检查项 | 关键命令或路径 | 处理要点 |
|---|---|---|
| 服务状态 | systemctl status mariadb.service;journalctl -xe | 先看状态与报错摘要,再进入详细日志 |
| 应用日志 | tail -fn 30 /var/log/mariadb/mariadb.log | 关注首次报错行与时间线 |
| 端口占用 | ss -lntp | grep 3306;必要时 kill 旧进程 |
| 配置文件 | my.cnf;strace mysqld … | 避免多份配置冲突;用 strace 跟踪加载 |
| 数据目录 | ls -ld /var/lib/mysql;chown -R mysql:mysql | 权限与属主正确;初始化前确保为空 |
| 日志目录 | mkdir -p /var/log/mariadb;chown mysql:mysql | 目录缺失或不可写会启动失败 |
| 运行目录 | mkdir -p /var/run/mariadb;chown mysql:mysql | PID/套接字写入失败常见原因 |
| 依赖库 | ldd /usr/local/mysql/bin/mysqld | 缺 libaio/numactl 等需补齐 |
| 磁盘空间 | df -h;du -sh /var/lib/mysql | 空间满会导致 InnoDB 加锁/启动失败 |
| 本地连接 | mysql --socket=…;ps -ef | 核对 socket 路径与进程 |
| 远程连接 | ss -lntp | grep 3306;检查云安全组/防火墙 |
| 表修复 | myisamchk -c -r … | MyISAM 索引损坏时修复 |
| 异常关机 | mysqld --tc-heuristic-recover=ROLLBACK | 处理悬挂事务后再正常启动 |
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux MariaDB故障排查方法有哪些
本文地址: https://pptw.com/jishu/770914.html
