Docker容器中MySQL导入多Schema后Django迁移遇1044权限错误
解决Django迁移时MySQL权限错误(1044, "Access denied...")
这个错误的核心原因很明确:你创建了pranay用户和core等数据库,但没有给pranay用户授予访问这些数据库的权限,而且MySQL的初始化脚本只会在容器首次创建(数据目录为空)时执行,所以即使后来补加授权,旧的容器数据也不会自动更新。
下面是具体的修复步骤:
1. 更新初始化SQL文件,添加权限授予
修改你的core.sql文件,在创建数据库的语句后添加权限授予命令:
CREATE DATABASE `core` ; CREATE DATABASE `murad` ; CREATE DATABASE `mysqltest` ; -- 给pranay用户授予三个数据库的全部操作权限 GRANT ALL PRIVILEGES ON core.* TO 'pranay'@'%'; GRANT ALL PRIVILEGES ON murad.* TO 'pranay'@'%'; GRANT ALL PRIVILEGES ON mysqltest.* TO 'pranay'@'%'; -- 刷新权限使设置立即生效 FLUSH PRIVILEGES;
2. 清理旧的MySQL数据卷(关键步骤)
因为你之前已经启动过容器,./mysql目录里已经保存了MySQL的旧数据,初始化脚本不会再次执行。所以需要先清理这些旧数据:
# 停止并移除所有运行中的容器 docker-compose down # 删除本地存储的MySQL数据目录 rm -rf ./mysql
3. 重新构建并启动服务
# 重新构建镜像并启动容器 docker-compose up --build
4. 再次执行迁移
等容器完全启动后,进入web容器执行迁移命令:
docker-compose exec web bash python manage.py migrate
这样pranay用户就拥有了访问core数据库的完整权限,迁移操作应该就能正常完成了。
内容的提问来源于stack exchange,提问作者pranay das
相关产品推荐
相关产品推荐

