核心问题是MariaDB服务端未加载认证插件或客户端驱动不兼容;需执行SHOW PLUGINS确认mysql_native_password状态为ACTIVE,缺失则配置plugin_load_add并重启服务,CI4中应设DBDriver=MySQLi、hostname=127.0.0.1,并用ALTER USER显式指定认证方式。

CodeIgniter4 连接 MariaDB 时出现 Authentication plugin 'xxx' cannot be loaded 错误,核心问题不在 CI4 本身,而在于 MariaDB 服务端认证插件未正确加载,或客户端驱动不兼容。MariaDB(尤其是 10.4+)默认可能启用 mysql_native_password 或 unix_socket 插件,但某些部署中插件被禁用、缺失,或 CI4 使用的 PHP mysqli 扩展无法调用对应接口。
确认 MariaDB 是否真正启用了所需插件
登录 MariaDB(用 root 或高权限账号)执行:
SHOW PLUGINS;- 重点检查
mysql_native_password和unix_socket(MariaDB 常用)两行的 Status 列是否为 ACTIVE - 若显示
DISABLED,说明插件未激活 —— 仅改用户密码类型(如ALTER USER ... IDENTIFIED VIA mysql_native_password)无效
检查插件文件是否存在并配置启用
运行 SELECT @@plugin_dir; 查看插件路径(如 /usr/lib/mysql/plugin/),然后确认对应文件存在:
- Linux 下应有
mysql_native_password.so(MariaDB 通常自带) - 若缺失,需重装
mariadb-server包或手动补全 - 在
/etc/my.cnf或/etc/mysql/mariadb.conf.d/50-server.cnf的[mysqld]段添加:plugin_load_add = mysql_native_password.so
或更稳妥地:default_authentication_plugin = mysql_native_password - 保存后必须重启 MariaDB:
sudo systemctl restart mariadb(FLUSH PRIVILEGES不起作用)
调整 CI4 数据库配置与 PHP 环境
确保 CI4 的 .env 中明确指定兼容驱动和连接方式:
- 使用
MySQLi驱动(非 PDO)更稳定:database.default.DBDriver = "MySQLi" - 避免用
localhost(可能触发 Unix socket 路径错误),改用:database.default.hostname = "127.0.0.1" - 确认 PHP 已启用
mysqli扩展:php -m | grep mysqli,且不是仅 CLI 启用而 Web 服务器(如 Apache/FPM)未加载 - MariaDB 用户需显式设为
mysql_native_password认证:ALTER USER 'your_user'@'%' IDENTIFIED VIA mysql_native_password USING PASSWORD('your_pass');
排除客户端兼容性陷阱
某些 MariaDB 客户端行为受 PHP 版本和编译选项影响:
- PHP 7.2–7.4 若未链接 OpenSSL,可能无法处理部分插件协商
- 共享主机(如 Namecheap)常锁死插件策略,此时只能联系支持方确认是否允许
mysql_native_password - 可临时写一个纯 PHP 测试脚本(不用 CI4),用
mysqli_connect("127.0.0.1",...)验证底层是否通 —— 若不通,问题一定在 MariaDB 或 PHP 层


















