Ubuntu 上 MariaDB 的常见问题排查与解决
一 安装与初始化
- 安装与基础检查
- 更新索引并安装:sudo apt update && sudo apt install mariadb-server
- 启动与开机自启:sudo systemctl start mariadb && sudo systemctl enable mariadb
- 查看状态:sudo systemctl status mariadb
- 首次安全加固:sudo mysql_secure_installation(设置 root 密码、删除匿名用户、禁止 root 远程、移除 test 库等)
- 常见初始化问题
- root 免密或只能用 sudo 登录:部分 Ubuntu 版本 root 默认使用 unix_socket 插件认证。进入数据库检查:SELECT User,Host,plugin FROM mysql.user WHERE User=‘root’;;如需改为密码登录,可执行:ALTER USER ‘root’@‘localhost’ IDENTIFIED VIA mysql_native_password USING PASSWORD(‘强密码’); FLUSH PRIVILEGES;
- 安装/启动失败并提示 debian-start 缺失:检查 /var/log/syslog 与 systemctl status mariadb;若缺 /etc/mysql/debian-start,可从对应版本的 mariadb-server-*.deb 包中解压恢复该文件后重试启动。
二 本地连接与认证
- 无法本地连接或报错
- 典型错误:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)。优先检查服务是否运行:sudo systemctl status mariadb;若未运行则启动;同时确认客户端使用正确的套接字路径(一般无需手动指定)。
- 使用 root 仍被拒绝或无需密码:确认 root 的 plugin 与 host。如需密码认证,将 root 改为 mysql_native_password 并设强密码,再执行 FLUSH PRIVILEGES;。
三 远程连接失败
- 常见原因与快速修复
- 服务未运行:启动服务 sudo systemctl start mariadb
- 监听地址限制:编辑 /etc/mysql/mariadb.conf.d/50-server.cnf,将 bind-address = 127.0.0.1 改为 bind-address = 0.0.0.0(或注释掉该行),然后重启:sudo systemctl restart mariadb
- 防火墙/云安全组:放行 3306/TCP
- 用户权限未放行:在数据库中为指定用户授权,例如:GRANT ALL PRIVILEGES ON . TO ‘admin’@‘%’ IDENTIFIED BY ‘强密码’ WITH GRANT OPTION; FLUSH PRIVILEGES;(生产环境不建议对 root 开放远程)
- 端口错误:确认客户端连接端口为 3306
- 客户端报错 10061
- 通常由“服务未运行/未监听外网/端口或防火墙阻断/权限未放行”引起,按以上顺序逐项排查。
四 字符集与升级
- 字符集导致启动失败或不兼容
- 配置 [mysqld] 段使用 utf8mb4(而非已废弃的 utf8):例如设置 character-set-server=utf8mb4、collation-server=utf8mb4_unicode_ci,保存后重启;如仍失败,检查错误日志定位具体配置项冲突。
- 升级后本地登录方式变化
- 若升级后 root 又回到 unix_socket 或本地免密,重复“初始化”章节的认证修复步骤,显式设置 mysql_native_password 并刷新权限。
五 运维与安全建议
- 运行与备份
- 常用运维:sudo systemctl status|start|restart|enable mariadb
- 逻辑备份:mysqldump -u 用户名 -p --single-transaction --routines --triggers --default-character-set=utf8mb4 数据库名 > backup.sql
- 安全加固
- 运行 sudo mysql_secure_installation,并遵循最小权限原则:仅授予必要权限、避免使用 root 远程、为应用创建专用账户、限制来源 IP、定期更新与审计。