Ubuntu中MariaDB如何进行故障排查
导读:Ubuntu 上 MariaDB 故障排查步骤 一 快速定位与日志检查 查看服务状态与最近日志,优先关注失败的起停与错误提示: 命令:sudo systemctl status mariadb、sudo journalctl -u ma...
Ubuntu 上 MariaDB 故障排查步骤
一 快速定位与日志检查
- 查看服务状态与最近日志,优先关注失败的起停与错误提示:
- 命令:sudo systemctl status mariadb、sudo journalctl -u mariadb -xe
- 定位 MariaDB 错误日志文件(常见路径):
- 文件:/var/log/mariadb/mariadb.log 或 /var/log/mysql/error.log
- 命令:sudo tail -n50 /var/log/mariadb/mariadb.log、sudo 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.cnf 将 bind-address 设为 0.0.0.0(或注释掉该行)以监听所有地址;确保云安全组/防火墙放行 3306/tcp(如 sudo ufw allow 3306 或 firewall-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 mariadb;sudo 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’;
- 修复 root 认证插件/密码(示例):
- 退出并重启
- 结束安全进程并重启: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
