使用defaults-extra-file登录Docker部署的MySQL出现1045访问拒绝问题
问题核心原因
- 最主要的原因是MySQL配置文件的段名错误:
[mysqld]是MySQL服务端进程读取的配置段,而你使用的mysql客户端命令只会读取[client]段下的账号、密码配置。你把user、password配置写到了[mysqld]段下,客户端读取不到对应配置,就会默认使用root用户无密码尝试登录,触发报错。 - 次要可能原因:容器内
/etc/mysql_pass.cnf文件权限过高,MySQL客户端出于安全考虑会忽略权限大于600的配置文件,导致配置不生效。
解决方案
- 修改容器内
/etc/mysql_pass.cnf的配置段,将[mysqld]改为[client],修改后内容如下:
[client] user=user1 password=pass2
- 调整配置文件权限,确保MySQL客户端可以正常读取:
docker exec DOCKER_NAME chmod 600 /etc/mysql_pass.cnf
- 手动执行测试命令验证配置是否生效,确认返回的登录用户为
user1:
docker exec DOCKER_NAME mysql --defaults-extra-file=/etc/mysql_pass.cnf -e "SELECT USER();"
- 调整你脚本中的命令参数,避免变量解析异常,修改后参考如下:
mysqlDate=$(docker exec DOCKER_NAME mysql --defaults-extra-file=/etc/mysql_pass.cnf -D "$db" -se "SQL_QUERY;")
- 可选排查:如果上述操作后仍然报错,先直接指定账号密码登录验证账号本身有效性,排除账号密码错误、权限不足的问题:
docker exec DOCKER_NAME mysql -uuser1 -ppass2 -e "SELECT USER();"
内容的提问来源于stack exchange,提问作者junior
相关产品推荐
相关产品推荐

