容器化部署WordPress无法连接MariaDB 报1045错误如何排查
问题排查步骤
按优先级从高到低逐一验证,每一步验证通过再走下一项:
- 第一步:先排除配置传递错误,不要信任编排文件、宿主机上存的配置值,直接进WordPress容器内部核对实际生效的配置:
- 打开WordPress根目录下的
wp-config.php,逐字核对DB_USER、DB_PASSWORD、DB_HOST、DB_PORT四个参数的值,注意检查有没有多余的空格、换行,密码里如果包含$、#、引号、反斜杠这类特殊字符,要确认没有被yaml、docker命令行、shell脚本转义截断。 - 在WordPress容器内安装mysql客户端,直接用
wp-config.php里写的明文参数手动连接数据库,跳过WordPress的逻辑验证:
如果这一步连接失败,问题和WordPress无关,就是账号密码/网络/数据库监听的问题。# 替换尖括号里的内容为wp-config.php中读取到的实际值 mysql -h <DB_HOST值> -P <DB_PORT值,默认3306> -u <DB_USER值> -p<DB_PASSWORD值>
- 打开WordPress根目录下的
- 第二步:修复MariaDB的用户授权匹配问题
你在MariaDB容器内本地能登录成功,不代表远程TCP连接能正常授权:本地不带-h参数执行mysql命令时,默认走Unix Socket连接,匹配localhost的本地访问规则;跨容器访问走TCP协议,会按IP段匹配用户表的Host规则,两者完全独立。- 进MariaDB容器执行以下命令,检查用户实际授权和认证信息:
MariaDB的用户匹配规则是Host配置越具体优先级越高,如果存在-- 查看mywpuser的授权 SHOW GRANTS FOR 'mywpuser'@'%'; -- 查看所有用户的Host、认证串,排查有没有优先级更高的匹配条目 SELECT user, host, authentication_string FROM mysql.user;mywpuser@192.168.64.%、甚至空用户名的匿名用户@192.168.64.3这类条目,会优先于你配置的mywpuser@%条目生效,直接导致密码校验失败。 - 确认授权异常后,直接重新配置用户并刷新权限:
-- 替换密码为你实际要使用的明文密码 ALTER USER 'mywpuser'@'%' IDENTIFIED BY '你的数据库密码'; -- 给用户分配WordPress需要的库权限,替换wordpress为你实际的库名 GRANT ALL PRIVILEGES ON wordpress.* TO 'mywpuser'@'%'; FLUSH PRIVILEGES;
- 进MariaDB容器执行以下命令,检查用户实际授权和认证信息:
- 第三步:验证端口连通性和数据库监听配置
ping通只能证明ICMP协议可达,不代表数据库服务端口能正常访问:- 在WordPress容器内用端口扫描工具验证3306端口连通性:
# 替换为数据库容器的实际IP nc -zv 192.168.64.x 3306 - 进MariaDB容器检查数据库配置的监听地址,确认
bind-address参数值为0.0.0.0,如果配置为127.0.0.1会拒绝所有跨容器的TCP连接请求。
- 在WordPress容器内用端口扫描工具验证3306端口连通性:
- 第四步:排查特殊编码问题
如果密码包含非ASCII字符、全角符号,要确认wp-config.php文件的编码和数据库存储的密码编码一致,避免因为编码不一致导致密码哈希校验失败。
内容的提问来源于stack exchange,提问作者FernSeher
相关产品推荐
相关产品推荐

