Ubuntu 上 MariaDB 故障排查技巧
一 快速定位与日志检查
sudo systemctl status mariadbsudo journalctl -u mariadb -xesudo journalctl -u mariadb --since "2025-12-26 10:00:00" --until "2025-12-26 12:00:00"/var/log/mariadb/error.log 或 /var/log/mysql/error.log/var/log/mariadb/mariadb.log(可能未启用)sudo grep -i "failed\|access denied" /var/log/mariadb/error.log二 服务无法启动的高频原因与修复
sudo mkdir -p /var/log/mariadb/ && sudo chown -R mysql:mysql /var/log/mariadb/sudo mkdir -p /var/run/mysqld/ && sudo chown -R mysql:mysql /var/run/mysqld/sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql/ --forcesudo chown -R mysql:mysql /var/lib/mysql/sudo aa-statussudo aa-complain /usr/sbin/mysqld/etc/apparmor.d/usr.sbin.mysqld 为新的 datadir 增加读写执行权限),然后 sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld 重载。[mysqld] 中设置 innodb_force_recovery=1(从 1 开始逐步尝试,最高到 6),启动后尽快 mysqldump 全量备份,随后重建实例并恢复数据。Process: ... ExecStartPost=/etc/mysql/debian-start (code=exited, status=2三 连接与认证类错误的排查
sudo systemctl is-active mariadbps -ef | grep mysqld 与客户端 --socket= 参数或 my.cnf 中的 socket 配置保持一致。ln -s /var/lib/mysql/mysql.sock /tmp/mysql.socksudo ufw allow from x.x.x.x to any port 3306/tcp/etc/mysql/mariadb.conf.d/50-server.cnf 将 bind-address 设为 0.0.0.0(或指定内网接口),然后 sudo systemctl restart mariadbGRANT ALL PRIVILEGES ON db.* TO 'user'@'x.x.x.x' IDENTIFIED BY 'strong_password';FLUSH PRIVILEGES;四 维护与恢复的安全操作建议
--skip-grant-tables(无密码模式)或设置 innodb_force_recovery 只读导出,完成数据抢救后再重建实例与权限。