温馨提示×

Debian MariaDB故障排查怎么做

小樊
32
2025-12-30 19:15:17
栏目: 云计算

Debian 上 MariaDB 故障排查步骤

一 快速定位故障

  • 查看服务状态与最近日志:
    • 使用命令:sudo systemctl status mariadbsudo service mariadb status
    • 使用命令:sudo journalctl -u mariadb -xe 查看本次启动的详细错误与上下文
  • 定位错误日志文件:
    • 常见路径:/var/log/mariadb/error.log/var/log/mysql/error.log
    • 若未找到,检查配置文件中的 log_error 项:grep -n log_error /etc/mysql/*.cnf /etc/my.cnf
  • 快速筛选关键信息:
    • 查看错误日志末尾:sudo tail -n50 /var/log/mariadb/error.log
    • 搜索关键词:sudo grep -i "failed\|error\|access denied" /var/log/mariadb/error.log
  • 若服务未起来,尝试前台启动以获取更详细输出:
    • 命令:sudo mysqld --verbose --help(检查配置语法)
    • 命令:sudo mysqld_safe --datadir=/var/lib/mysql(前台运行,观察实时报错)

二 常见故障与修复

  • 配置语法错误或目录缺失
    • 检查配置:sudo mysqld --verbose --helpsudo mariadb-check-syntax(若可用)
    • 确认关键目录存在且属主正确:sudo mkdir -p /var/log/mysql /var/run/mysqld && sudo chown -R mysql:mysql /var/log/mysql /var/run/mysqld
  • 端口冲突(3306 被占用)
    • 检查占用:ss -tulnp | grep 3306netstat -tulnp | grep 3306
    • 处理:停掉占用进程或在 /etc/mysql/mariadb.conf.d/50-server.cnf 中修改 port,然后重启
  • 数据目录权限或 SELinux/AppArmor 限制
    • 权限修复:sudo chown -R mysql:mysql /var/lib/mysql
    • 安全模块:Debian 常用 AppArmor,必要时检查 /etc/apparmor.d/usr.sbin.mysqld 是否放行相关路径
  • 磁盘空间不足
    • 检查:df -h
    • 处理:清理无用文件或扩容;空间恢复后重启服务
  • InnoDB 崩溃恢复或异常关机后的残留事务
    • 现象:日志提示有 prepared transactions
    • 处理:按日志指引以 mysqld --tc-heuristic-recover=ROLLBACK 启动以回滚未完成事务,再正常重启
  • 表损坏(MyISAM)
    • 修复示例:myisamchk -c -r /var/lib/mysql/mysql/proc.MYI
  • 安装/升级后启动失败且提示缺少 /etc/mysql/debian-start
    • 从对应版本的 MariaDB 包中解压恢复该文件,例如:
      • apt download mariadb-server-<version>
      • dpkg-deb --extract mariadb-server-<version>.deb /tmp/mariadb
      • sudo cp /tmp/mariadb/etc/mysql/debian-start /etc/mysql/
    • 然后启动服务:sudo systemctl start mariadb
  • 首次安装后无法连接本地套接字
    • 典型报错:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
    • 处理:确认服务已启动(systemctl status mariadb),若仍失败,检查 /var/run/mysqld 目录权限与存在性,再查看错误日志定位具体原因

三 登录与权限问题

  • 本地无法登录或访问被拒绝
    • 先确认服务运行:systemctl status mariadb
    • 使用 socket 登录:sudo mysql -u root -p -h localhost
    • 若提示访问被拒绝,检查用户主机与密码插件;必要时重置 root 密码(单用户模式或 --skip-grant-tables 启动后修改)
  • 不显示系统库 mysql
    • 登录后执行:SHOW DATABASES;
    • 确认是否存在:SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='mysql';
    • 若缺失或异常,执行升级修复:sudo mysql_upgrade,然后重启:sudo systemctl restart mariadb
  • 运行安全初始化(首次部署或修复后)
    • 命令:sudo mysql_secure_installation(设置 root 密码、移除匿名用户、禁止远程 root 登录、删除测试库等)

四 性能与运行监控

  • 基础运行状态
    • 服务状态:systemctl status mariadb
    • 服务器状态:mysqladmin -u root -p status
    • 当前连接与线程:SHOW PROCESSLIST;SHOW STATUS;
  • 资源与连接监控
    • 系统资源:top/htopiostat
    • 网络连接:ss -tulnp | grep mariadb
  • 慢查询定位与分析
    • 启用慢查询日志(在配置中设置):slow_query_log=1long_query_time=1(示例值)、log_output=TABLE,FILE
    • 分析工具:mysqldumpslow -s at -t 10 /var/log/mysql/slow-query.log
  • 实时会话监控
    • 工具:mytop(实时查看 QPS、慢查询、线程与命令分布,支持交互式诊断)

五 最小可用排障清单

  • 执行并保存输出:systemctl status mariadbjournalctl -u mariadb -xe
  • 查看错误日志末尾:tail -n100 /var/log/mariadb/error.log
  • 检查端口占用:ss -tulnp | grep 3306
  • 检查磁盘空间:df -h
  • 校验数据目录权限:ls -ld /var/lib/mysql /var/run/mysqld /var/log/mysql && chown -R mysql:mysql /var/lib/mysql /var/run/mysqld /var/log/mysql
  • 前台启动观察:mysqld_safe --datadir=/var/lib/mysql
  • 必要时修复系统库:mysql_upgrade && systemctl restart mariadb
  • 仍无法恢复时,基于最近备份执行恢复,避免继续写入导致数据不一致

0