Ubuntu MariaDB常见错误及解决
导读:Ubuntu MariaDB 常见错误与解决 一 服务无法启动 典型现象:执行 sudo systemctl status mariadb 显示失败,或 journalctl 提示 “Job for mariadb.service fai...
Ubuntu MariaDB 常见错误与解决
一 服务无法启动
- 典型现象:执行 sudo systemctl status mariadb 显示失败,或 journalctl 提示 “Job for mariadb.service failed …”。优先查看服务日志与 MariaDB 自身日志:journalctl -xe 与 tail -n 30 /var/log/mariadb/mariadb.log。常见根因包括:日志目录缺失、数据目录未初始化、PID 目录不可写、InnoDB 异常等。修复要点:创建并授权日志目录 sudo mkdir -p /var/log/mariadb & & sudo chown -R mysql:mysql /var/log/mariadb;若数据目录为空需初始化(旧版本可用 mysql_install_db,新版本多用 mariadb-install-db 或包管理器完成);若提示 PID 文件不可写,创建目录 sudo mkdir -p /var/run/mariadb & & sudo chown -R mysql:mysql /var/run/mariadb;如 InnoDB 崩溃或异常,可在 [mysqld] 中临时加入 innodb_force_recovery=1 并逐步递增至 2/3/4 以导出数据,值≥4 可能永久损坏数据,务必先备份并按官方说明操作。
二 本地登录失败 ERROR 1698 或 ERROR 1045
- 典型现象:mysql -u root -p 报 ERROR 1698 (28000) 或 1045 (28000)。多数 Ubuntu/Debian 安装会将 root 设为使用 unix_socket 插件,导致本机 sudo 可进、普通用户或密码直连被拒。处理步骤:先用 sudo mysql -u root 进入;在 mysql 库执行 SELECT User,Host,plugin FROM mysql.user; 查看 root 的 plugin;若 plugin 为 unix_socket 或 auth_socket,可改为密码认证(示例:UPDATE mysql.user SET plugin=‘mysql_native_password’, authentication_string=PASSWORD(‘YourStrongP@ss’) WHERE User=‘root’ AND Host=‘localhost’; FLUSH PRIVILEGES; )。如忘记 root 密码或脚本反复提示空密码,可在 [mysqld] 加入 skip-grant-tables 后重启,无密码登录并更新密码,随后务必移除该配置并重启;生产环境请设置强密码并限制 host 为必要来源。
三 远程连接失败 ERROR 2003 或 Navicat 10061
- 典型现象:远程主机 telnet 服务器 3306 不通或客户端报 2003/10061。排查顺序:确认服务运行与监听端口(ss -lntp | grep 3306 或 netstat -anpt | grep 3306);检查 MariaDB 是否仅监听 127.0.0.1(在 /etc/mysql/mariadb.conf.d/50-server.cnf 将 bind-address 改为 0.0.0.0 或注释掉;同时确保未启用 skip-networking);开放云主机与系统防火墙对 3306/TCP 的入站规则;在数据库内授予远程权限(示例:GRANT ALL ON . TO ‘root’@‘%’ IDENTIFIED BY ‘YourStrongP@ss’ WITH GRANT OPTION; FLUSH PRIVILEGES; )。注意:将 root 开放到 ‘%’ 存在安全风险,建议创建专用远程账号并限制来源网段。
四 套接字或通信链路异常 ERROR 2002 或 Communications link failure
- 典型现象:本地执行 mysql 报 ERROR 2002 (HY000) “Can’t connect to local MySQL server through socket …”,或应用报 Communications link failure。处理要点:确认 mysqld 已启动(systemctl start mariadb);检查 my.cnf 中 socket 路径与客户端是否一致(mysql --socket=…);若仅本地 socket 不可用,可强制走 TCP:mysql -h 127.0.0.1 -P 3306 -u root -p;应用侧常见为数据库未启动、连接串错误、端口不对或超时,需核对 JDBC URL(如 jdbc:mysql://127.0.0.1:3306/db?characterEncoding=utf8& useSSL=false& serverTimezone=Asia/Shanghai)、网络与端口连通性,并确保服务开机自启(systemctl enable --now mariadb)。
五 数据损坏与崩溃恢复
- 典型现象:异常断电或磁盘问题后出现启动失败、InnoDB 断言、表损坏等。应急步骤:优先备份当前数据目录;若仅个别 MyISAM 表损坏,可用 myisamchk 修复(示例:myisamchk -c -r /var/lib/mysql/mysql/proc.MYI);若 InnoDB 异常,按官方指引使用 innodb_force_recovery=1 起服并尽快 mysqldump 导出,值≥4 有数据损坏风险;若上次异常关机留下两阶段事务,可在启动命令加 --tc-heuristic-recover=ROLLBACK;完成导出后恢复配置、正常重启并重建实例。以上操作务必在充分备份前提下进行。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu MariaDB常见错误及解决
本文地址: https://pptw.com/jishu/748904.html
