这不是MariaDB服务宕机,而是phpMyAdmin配置中host、port或认证方式与MariaDB实际监听及用户权限不匹配;需检查config.inc.php的host是否应为'127.0.0.1'而非'localhost',确认端口一致,验证root@127.0.0.1权限及unix_socket插件兼容性。
phpmyadmin 连不上 mariadb,90% 是配置文件 config.inc.php 里的 $cfg['servers'][$i]['host'] 或认证方式没对,而不是数据库服务本身挂了。
检查 config.inc.php 中的 host 和 port 是否匹配实际 MariaDB 监听地址
默认配置常写成 'host' => 'localhost',但这会触发 Unix socket 连接(而非 TCP),而 MariaDB 可能只监听 127.0.0.1 或禁用了 socket;反过来,若 MariaDB 配置了 bind-address = ::1(IPv6),而 phpMyAdmin 用 localhost 解析成 IPv6 地址,也可能因权限或防火墙失败。
- 确认 MariaDB 实际监听:运行
sudo ss -tlnp | grep mysqld,看输出里是127.0.0.1:3306还是*:3306或:::3306 - 对应修改 phpMyAdmin 配置:
'host' => '127.0.0.1'(强制 IPv4 TCP)比'localhost'更可靠 - 如果 MariaDB 改过端口(比如 3307),必须同步改
'port' => '3307',且确保skip-networking=OFF在my.cnf中
验证用户权限是否允许从 phpMyAdmin 所在主机登录
MariaDB 的用户授权是「用户名@主机名」粒度的,root@localhost 和 root@127.0.0.1 是两个不同账号——phpMyAdmin 若走 TCP 连接,实际来源是 127.0.0.1,不是 localhost。
- 登录 MariaDB 执行:
SELECT User, Host FROM mysql.user;,确认存在类似phpmyadmin@127.0.0.1的条目 - 若只有
phpmyadmin@localhost,需补授权:GRANT ALL ON *.* TO 'phpmyadmin'@'127.0.0.1' IDENTIFIED BY 'yourpass'; FLUSH PRIVILEGES; - 避免用
'%'(尤其生产环境),MariaDB 10.4+ 默认禁用空密码 +%组合,会直接拒绝连接
留意 auth_plugin 类型不兼容(尤其是 MariaDB 10.4+ 默认用 unix_socket)
新版本 MariaDB 对本地 root 用户默认启用 unix_socket 插件认证,它绕过密码校验、只认系统用户,导致 phpMyAdmin 用密码连 root@localhost 必然失败。
- 查当前认证插件:
SELECT User, Host, plugin FROM mysql.user WHERE User='root'; - 若 plugin 是
unix_socket,要么改用系统用户(不现实),要么切回mysql_native_password:ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('xxx'); - phpMyAdmin 的
$cfg['Servers'][$i]['auth_type']设为'cookie'或'config'时,都依赖后端密码验证,不支持unix_socket
Apache/Nginx 日志和 MariaDB 错误日志要交叉比对
仅看 phpMyAdmin 页面报错(如 “Cannot log in to the MySQL server”)信息太模糊,真正线索藏在服务端日志里。
立即学习“PHP免费学习笔记(深入)”;
- phpMyAdmin 报错但无细节?打开
$cfg['Verbose'] = true;并检查 PHP 错误日志(error_log路径见phpinfo()) - MariaDB 拒绝连接时,通常会在
/var/log/mysql/error.log或journalctl -u mariadb里留下类似Access denied for user 'phpmyadmin'@'127.0.0.1' (using password: YES)的记录 - 如果日志里出现
Plugin 'unix_socket' is not loaded,说明 MariaDB 启动时没加载该插件,但用户表里又设了它——此时需重启 MariaDB 或重置用户认证方式
最常被忽略的是:MariaDB 的 skip-name-resolve 开启后,localhost 不再等价于 127.0.0.1,而 phpMyAdmin 配置里混用二者会导致权限错配;另外,Docker 环境中宿主机访问容器内 MariaDB 时,host 必须填容器 IP 或 host.docker.internal(非 localhost)。



















