温馨提示×

Ubuntu MariaDB故障排除有哪些步骤

小樊
34
2026-01-05 04:57:03
栏目: 云计算

Ubuntu MariaDB故障排除步骤

一 快速定位与日志检查

  • 确认服务状态与最近日志:
    • 查看状态:sudo systemctl status mariadb
    • 查看系统日志:sudo journalctl -u mariadb -xe
  • 定位错误日志文件:
    • 常见位置:/var/log/mariadb/error.log/var/log/mysql/error.log
    • 若自定义了配置,可在 /etc/mysql/my.cnf/etc/my.cnf[mysqld] 段查看 log_error
  • 高效筛选关键信息:
    • 关键字:grep -i “failed|error|access denied” /var/log/mariadb/error.log
    • 最新行:tail -n 50 /var/log/mariadb/error.log
    • 时间段:journalctl -u mariadb --since “2026-01-05 09:00:00” --until “2026-01-05 10:00:00”

二 服务无法启动的排查

  • 配置与权限:
    • 核对配置语法:mysqld --verbose --help
    • 检查数据目录与文件权限(以 /var/lib/mysql 为例):ls -ld /var/lib/mysql /var/lib/mysql/;必要时修正属主属组:sudo chown -R mysql:mysql /var/lib/mysql
  • 资源与冲突:
    • 磁盘空间:df -h;InnoDB 启动需可用空间,空间不足会导致启动卡住或失败
    • 端口占用:ss -lntp | grep 3306;若被占用,结束对应 PID 或调整端口
    • 多实例/锁文件:检查是否已有实例占用数据文件(如 ibdata1 被锁),必要时停止重复实例
  • 依赖与初始化:
    • 常见缺失依赖:libaio1numactl(缺失时 mysqld 启动会报找不到共享库)
    • 配置包含路径:排查是否误包含错误/旧配置(如 /etc/my.cnf/etc/mysql/my.cnf~/.my.cnf),必要时仅保留一份主配置
  • 包/初始化脚本异常:
    • 若安装/升级后 ExecStartPost=/etc/mysql/debian-start 失败,确认该脚本是否存在并可执行;缺失可从对应版本的 mariadb-server 包中解压恢复后重试启动

三 连接与认证问题的排查

  • 本机 socket 连接失败(如 ERROR 2002):
    • 确认服务运行:sudo systemctl status mariadb
    • 检查 socket 路径与权限(常见 /var/run/mysqld/mysqld.sock),必要时查看 my.cnf[mysqld] socket 与客户端 [client] socket 是否一致
  • 远程连接失败(如 ERROR 2003):
    • 监听地址:在 /etc/mysql/my.cnf[mysqld] 中设置 bind-address=0.0.0.0(允许所有 IP),或指定服务器内网 IP
    • 防火墙/安全组:开放 3306/tcp(示例:sudo ufw allow 3306;云主机需配置安全组入站规则)
  • 认证失败(如 ERROR 1045):
    • 使用正确凭据登录;若忘记 root 密码或插件异常,可在维护模式重置(见下一节)
    • 检查用户主机与权限:SELECT Host,User,plugin FROM mysql.user;;必要时创建允许远程的主机用户并授权
  • 特定升级后登录异常(如 ERROR 1524 Plugin ‘unix_socket’ is not loaded):
    • 说明:部分升级路径会导致 root 使用 unix_socket 插件,若不可用需改为 mysql_native_password
    • 处理:以维护模式登录后执行:UPDATE mysql.user SET plugin=‘mysql_native_password’ WHERE User=‘root’; FLUSH PRIVILEGES;

四 维护模式与安全加固

  • 进入维护模式(跳过权限表,谨慎操作):
    • 停止服务:sudo systemctl stop mariadb
    • 安全方式启动:sudo mysqld_safe --skip-grant-tables --skip-networking &
    • 登录并修复:执行必要的 UPDATE/FLUSH PRIVILEGES; 后退出并正常重启
  • 首次/定期安全加固:
    • 运行:sudo mysql_secure_installation(设置 root 密码、移除匿名用户、禁止 root 远程、删除 test 库等)
  • 通用建议:
    • 变更前备份数据与配置;变更后复核 error.logjournalctl 输出,确保无异常

五 高频错误速查表

症状 快速检查 常见修复
ERROR 2002 Can’t connect to local MySQL server through socket 服务是否运行;socket 路径与权限 启动服务;修正 my.cnf 中 [mysqld]/[client] 的 socket 一致
ERROR 2003 Can’t connect to MySQL server 监听地址、端口占用、防火墙 设置 bind-address=0.0.0.0;开放 3306;释放占用端口
ERROR 1045 Access denied 用户名/密码/主机;用户表 plugin 用正确凭据登录;调整用户 host 与权限;必要时重置密码/plugin
启动卡住/失败 磁盘空间、InnoDB 锁、配置错误 清理空间;结束重复实例;核对 my.cnf 与包含路径
ERROR 1524 Plugin ‘unix_socket’ is not loaded 升级后 root 认证插件异常 维护模式将 root 的 plugin 改为 mysql_native_password 并刷新权限
ExecStartPost=/etc/mysql/debian-start failed 脚本是否存在/可执行 从 mariadb-server 包提取 debian-start 到 /etc/mysql 后重试启动

0