使用Docker创建MySQL数据库时用户user1访问权限被拒如何解决
解决MySQL Docker容器用户权限问题
问题分析
错误提示 Access denied for user 'user1'@'%' to database 'my_test_database',但执行的SQL语句是 USE Testtable1,核心问题有两种可能:
- 应用代码错误指定了数据库名(用了
Testtable1而非配置的my_test_database) - 本地挂载的
./database目录存在旧MySQL数据,导致新用户权限未正确初始化
解决方案
1. 修正应用数据库连接配置
检查你的应用(比如SQLAlchemy)连接字符串,确保数据库名称是my_test_database。示例SQLAlchemy连接URL:
engine = create_engine('mysql+pymysql://user1:user1@localhost:3306/my_test_database')
2. 清理旧数据卷重新初始化
如果确认应用配置正确,可通过清理本地挂载的数据目录重置MySQL:
- 停止并删除容器:
docker-compose down - 删除本地数据目录:
rm -rf ./database - 重启容器:
此操作会重新创建docker-compose up -dmy_test_database及拥有该库完整权限的user1用户。
3. 手动为user1添加权限(保留现有数据)
若无法删除现有数据,可进入容器手动授权:
- 进入MySQL容器:
docker-compose exec db mysql -u root -proot - 执行授权SQL:
执行后退出容器,GRANT ALL PRIVILEGES ON my_test_database.* TO 'user1'@'%'; FLUSH PRIVILEGES;user1即可正常访问my_test_database。
内容的提问来源于stack exchange,提问作者nekovolta
相关产品推荐
相关产品推荐

