首页 >
问答 >
云计算 >
Ubuntu中MariaDB如何进行故障排查
Ubuntu中MariaDB如何进行故障排查
小樊
37
2025-11-30 21:16:08
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’;
退出并重启
结束安全进程并重启:sudo kill $(pgrep mysql) ;sudo systemctl start mariadb
重要提示
仅在维护窗口执行上述操作,完成后立即设置强密码并限制 root 远程登录范围
五 数据损坏与紧急恢复
当 InnoDB 索引/页损坏导致启动失败或查询异常:
在 [mysqld] 设置 innodb_force_recovery=1 并逐级尝试至 6 ,以争取启动窗口
启动后尽快 mysqldump 可访问库表,随后 drop + reimport 受损对象
移除 innodb_force_recovery 并正常重启;若仍失败,考虑从备份恢复或寻求专业支持
风险提示
强制恢复可能带来数据不一致风险,务必先做可用数据备份,再执行修复与重建操作