MySQL 8.0 安装后无法被 CMS 连接?检查 default_authentication_plugin
很多 CMS(如 WordPress、Drupal、Joomla)仍依赖
mysql_native_password认证方式,而 MySQL 8.0 默认启用
caching_sha2_password,导致连接时抛出
Client does not support authentication protocol错误。 编辑
my.cnf(Linux)或
my.ini(Windows),在
[mysqld]段落末尾添加:
default_authentication_plugin = mysql_native_password重启 MySQL 服务:
sudo systemctl restart mysql(Linux)或服务管理器中重启(Windows) 对已存在的 CMS 用户重置认证方式:
ALTER USER 'cms_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
CMS 安装时提示 mysqli extension is not loaded
?确认 PHP 与 MySQL 扩展匹配
PHP 8.x 默认不再捆绑
mysqli扩展,且部分一键环境(如 XAMPP、WAMP)可能未启用它,CMS 就会卡在数据库配置页。 运行
php -m | grep mysqli(Linux/macOS)或查看
phpinfo()输出,确认
mysqli已启用 若缺失,编辑
php.ini,取消注释:
extension=mysqli(注意不是
mysql,该扩展已废弃) 确保
mysqli.default_socket指向正确的 socket 路径(如
/var/run/mysqld/mysqld.sock),否则本地连接可能超时
WordPress / Drupal 等 CMS 初始化失败:检查 lower_case_table_names
设置
在 Linux 上安装 MySQL 后若未显式设置
lower_case_table_names=1,CMS 安装过程可能因表名大小写敏感而创建失败(尤其当 CMS 模块含混合大小写表名时)。 该参数必须在 MySQL 初始化前设置,运行中不可修改;若已初始化,需导出数据 → 重装 MySQL 并在
my.cnf中加入:
lower_case_table_names = 1Windows 和 macOS 默认为 1,Linux 默认为 0;CMS 核心和主流插件/模块均假设此值为 1 不设此项可能导致后续模块启用时报
Table 'wp_XXX' doesn't exist,即使
SHOW TABLES可见对应表
Docker 环境下 CMS 连接 MySQL 失败:别只改 host
,还要处理网络与权限
用
docker-compose启动 CMS + MySQL 时,常见错误是 CMS 容器内填了
localhost当 host——这实际指向容器自身,而非 MySQL 容器。 host 必须填 MySQL 服务名(如
db),且两个容器需在同一个自定义网络中(
docker-compose.yml中定义
networks) MySQL 容器启动后,需手动进容器执行:
CREATE USER 'cms_user'@'%' IDENTIFIED BY 'pass'; GRANT ALL ON cms_db.* TO 'cms_user'@'%'; FLUSH PRIVILEGES;(
@'%'允许跨容器访问) 避免使用
mysql:latest镜像——它可能拉取 MySQL 9.0 测试版,CMS 尚未兼容;明确指定
mysql:8.0
CMS 数据库环境真正卡点不在安装步骤本身,而在 MySQL 底层行为与 CMS 假设之间的隐性错位:认证方式、大小写策略、socket 路径、容器网络语义——这些地方一旦默认值不匹配,错误往往不直接报在数据库连接字段,而是延迟到模块加载或表操作时才暴露。
