如何在docker-compose.yml中为MySQL配置拥有全部权限的DBA账号
问题原因
官方mysql/mysql-server镜像没有预置MYSQL_DBA_USER、MYSQL_DBA_PASSWORD这类自定义环境变量,直接添加不会被识别,所以配置不生效。
正确操作方法(推荐自动化初始化方案)
这种方案可以在容器首次启动时自动完成DBA账号创建,不需要手动操作。
- 步骤1:在
docker-compose.yml同级目录创建init_sql文件夹,在文件夹内新建create_dba.sql文件,写入以下SQL内容:
-- 创建允许任意主机登录的DBA账号 CREATE USER 'abc'@'%' IDENTIFIED BY '123'; -- 授予全部权限且允许该账号给其他账号授权,符合DBA权限要求 GRANT ALL PRIVILEGES ON *.* TO 'abc'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
- 步骤2:修改
docker-compose.yml的mysql-server配置,新增初始化脚本挂载配置,修改后的完整配置如下:
services: mysql-server: container_name: mysql ports: # 原配置映射8080端口无意义,如需对外暴露MySQL服务可改为 "3306:3306" - "3306:3306" environment: MYSQL_ROOT_PASSWORD: 12345 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress_user MYSQL_PASSWORD: secret # 新增挂载配置,初始化脚本会在数据库首次启动时自动执行 volumes: - ./init_sql:/docker-entrypoint-initdb.d # 可选:挂载数据卷持久化数据库数据,避免容器删除后数据丢失 - mysql_data:/var/lib/mysql image: mysql/mysql-server wordpress: image: wordpress:latest container_name: wordpress ports: - "20080:80" environment: WORDPRESS_DB_HOST: mysql-server:3306 WORDPRESS_DB_USER: wordpress_user WORDPRESS_DB_PASSWORD: secret depends_on: - mysql-server # 可选:声明持久化数据卷 volumes: mysql_data:
- 步骤3:如果之前已经启动过MySQL容器,需要先删除旧容器和关联的数据卷(注意:该操作会清空已有数据库数据,有重要数据请先备份),执行命令:
docker compose down -v
之后重新启动服务即可生效:
docker compose up -d
临时手动创建方案
如果不想修改配置,也可以在容器启动后手动执行SQL创建账号:
- 直接进入MySQL容器的命令行:
docker exec -it mysql mysql -uroot -p12345
- 在MySQL终端执行之前给出的创建账号的SQL语句即可。
内容的提问来源于stack exchange,提问作者kakaka
相关产品推荐
相关产品推荐

