首页主机资讯Ubuntu中MariaDB如何进行故障排查

Ubuntu中MariaDB如何进行故障排查

时间2025-12-01 19:19:04发布访客分类主机资讯浏览880
导读:Ubuntu 上 MariaDB 故障排查步骤 一 快速定位与日志检查 查看服务状态与最近日志,优先关注失败的起停与错误提示: 命令:sudo systemctl status mariadb、sudo journalctl -u ma...

Ubuntu 上 MariaDB 故障排查步骤

一 快速定位与日志检查

  • 查看服务状态与最近日志,优先关注失败的起停与错误提示:
    • 命令:sudo systemctl status mariadbsudo journalctl -u mariadb -xe
  • 定位 MariaDB 错误日志文件(常见路径):
    • 文件:/var/log/mariadb/mariadb.log/var/log/mysql/error.log
    • 命令:sudo tail -n50 /var/log/mariadb/mariadb.logsudo tail -fn50 /var/log/mysql/error.log
  • 若 systemd 提示“See … for details”,按提示查看对应日志片段,通常能直接指向配置、权限或目录问题。

二 服务无法启动

  • 常见原因与修复要点:
    • 日志目录缺失或无写权限
      • 现象:启动失败,日志提示无法写入 /var/log/mariadb/
      • 处理:sudo mkdir -p /var/log/mariadb & & sudo chown -R mysql:mysql /var/log/mariadb
    • 数据目录未初始化或权限错误
      • 现象:启动失败,提示数据目录为空或权限异常
      • 处理:确保 /var/lib/mysql 为空后执行初始化(以发行版提供的脚本为准),例如:sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql;随后 sudo chown -R mysql:mysql /var/lib/mysql 并启动服务
    • PID 或运行目录不可写
      • 现象:启动失败,提示无法创建或写入 /var/run/mariadb/mariadb.pid
      • 处理:sudo mkdir -p /var/run/mariadb & & sudo chown -R mysql:mysql /var/run/mariadb
    • InnoDB 损坏导致反复崩溃
      • 现象:日志出现 “InnoDB corruption …” 或 “mysqld got signal 6”
      • 处理:在 [mysqld] 中临时加入 innodb_force_recovery=1(可逐步尝试到 2/3/4/5/6),启动后优先 mysqldump 导出可访问的数据,随后 drop + reimport 受损表,最后移除该参数并正常重启(注意:> 0 时仅允许 SELECT/Create/Drop,禁止 INSERT/UPDATE/DELETE)

三 无法连接与认证问题

  • 本地无法连接(socket 报错)
    • 现象:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket …
    • 处理:确认服务已启动;检查 /etc/my.cnf/etc/mysql/ 下的 socket 配置与客户端一致;必要时用 mysql --socket=实际路径 指定;若 /tmp/mysql.sock 与配置不一致,可创建软链或统一配置
  • 远程无法连接
    • 现象:客户端报 10061 或超时
    • 处理:确认服务运行 sudo systemctl status mariadb;在 /etc/mysql/mariadb.conf.d/50-server.cnfbind-address 设为 0.0.0.0(或注释掉该行)以监听所有地址;确保云安全组/防火墙放行 3306/tcp(如 sudo ufw allow 3306firewall-cmd --add-port=3306/tcp --permanent & & firewall-cmd --reload);验证用户权限(如 GRANT ALL ON . TO ‘root’@‘%’ IDENTIFIED BY ‘强密码’ WITH GRANT OPTION; FLUSH PRIVILEGES;
  • 认证失败
    • 现象:ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’
    • 处理:先确认用户名、密码与主机;若 root 使用 unix_socket 插件导致本地 socket 免密登录,可改用 mysql -u root -p 输入密码,或在维护模式下将 root 的 plugin 调整为 mysql_native_password 并设置密码(见下一节“安全模式操作”)

四 安全模式与账户修复

  • 进入维护模式(跳过权限校验)
    • 步骤:sudo systemctl stop mariadbsudo mysqld_safe --skip-grant-tables & mysql -u root
  • 常见修复
    • 修复 root 认证插件/密码(示例):
      • SQL:UPDATE mysql.user SET plugin=‘mysql_native_password’ WHERE User=‘root’;
      • SQL:UPDATE mysql.user SET authentication_string=PASSWORD(‘新密码’) WHERE User=‘root’; (新版本可用 ALTER USER
      • SQL:FLUSH PRIVILEGES;
    • 若之前遇到 “Plugin ‘unix_socket’ is not loaded”,可在修复后选择安装该插件:INSTALL PLUGIN unix_socket SONAME ‘auth_socket’;
  • 退出并重启
    • 结束安全进程并重启:sudo kill $(pgrep mysql)sudo systemctl start mariadb
  • 重要提示
    • 仅在维护窗口执行上述操作,完成后立即设置强密码并限制 root 远程登录范围

五 数据损坏与紧急恢复

  • 当 InnoDB 索引/页损坏导致启动失败或查询异常:
    • [mysqld] 设置 innodb_force_recovery=1 并逐级尝试至 6,以争取启动窗口
    • 启动后尽快 mysqldump 可访问库表,随后 drop + reimport 受损对象
    • 移除 innodb_force_recovery 并正常重启;若仍失败,考虑从备份恢复或寻求专业支持
  • 风险提示
    • 强制恢复可能带来数据不一致风险,务必先做可用数据备份,再执行修复与重建操作

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu中MariaDB如何进行故障排查
本文地址: https://pptw.com/jishu/760391.html
MariaDB在Ubuntu上如何进行性能调优 MariaDB在Ubuntu上如何设置权限

游客 回复需填写必要信息