如何在Docker部署环境中修改MySQL默认用户名与密码
根本原因
Docker部署的MySQL容器首次启动时,会使用初始配置的用户名、密码完成用户创建与权限写入,并将所有数据库数据持久化到本地卷中。后续你修改配置文件后,已经存在于卷中的MySQL用户信息不会同步更新,就会出现配置和实际存储的账号密码不匹配,触发1045访问拒绝错误。
方案1:无历史数据/可接受重置数据(操作最简单)
如果你的服务还没正式投入使用,没有需要保留的玩家数据,可以直接重置数据库卷解决:
- 执行命令停止容器并删除关联的数据库卷(会清空所有已有数据库数据,确认无需要保留的内容再操作):
docker compose down -v - 仅修改
~/.env文件中的以下两个参数即可,不要修改其他配置文件中的对应值,避免多配置冲突:DB_USER=自定义的新用户名DB_PASS=自定义的新密码
如果需要修改数据库root密码,也可以同步修改DB_ROOT_PASS参数
- 重新启动构建服务即可:
docker compose up -d --build
方案2:已有数据需保留
如果服务已经在运行,有需要保留的玩家数据,按以下步骤操作:
- 先停止除MySQL外的其他服务容器,避免操作过程中出现异常写入:
docker compose stop ac-worldserver ac-authserver ac-db-import - 进入MySQL容器,使用root账号登录(默认root密码为
password,如果之前改过就用你修改过的root密码):docker exec -it ac-mysql mysql -u root -p - 执行SQL语句更新账号密码,需要修改用户名就执行重命名语句,不需要可以跳过:
-- 仅修改密码用这个,替换占位符为你的实际值 ALTER USER '旧用户名'@'%' IDENTIFIED BY '新密码'; -- 需要修改用户名就加这行 RENAME USER '旧用户名'@'%' TO '新用户名'@'%'; -- 刷新权限使修改生效 FLUSH PRIVILEGES; - 退出MySQL容器后,修改
~/.env中的DB_USER、DB_PASS为你设置的新用户名、新密码,不要修改其他配置文件的对应参数 - 重启所有容器即可:
docker compose up -d
注意事项
AzerothCore的Docker部署逻辑会优先读取.env文件中的配置变量,其他配置文件会默认继承.env的配置值,不要随意修改其他文件里的数据库账号密码参数,避免出现多配置不一致的问题。
内容的提问来源于stack exchange,提问作者MagentaCyan
相关产品推荐
相关产品推荐

