Dar*_*zer 5 mysql init docker docker-compose
我/docker-entrypoint-initdb.d从这个答案中发现了目录,还阅读了“如何使用这个图像”MySQL 文档的“初始化一个新实例”部分。但是当我docker-compose up在包含以下docker-compose.yml文件的目录中运行时,我的数据库没有初始化。
services:
# Use root/root as MySQL user/password credentials
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_DATABASE: db
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d/:ro
adminer:
image: adminer
restart: always
ports:
- 8080:8080
Run Code Online (Sandbox Code Playgroud)
我确认该./mysql/init目录包含一个名为init.sql. 我确认在清空./mysql/data目录并运行后docker-compose up,db创建了一个数据库。但是没有填充数据库,除非我在 Adminer 中手动执行脚本。(我单击“导入”,然后选择文件并按“执行”按钮。)
运行后docker-compose up,我在控制台输出中查找消息,这些消息表明尝试运行init.sql但找不到任何内容。
更新: MySQL 版本为 8.0.19。
魔鬼藏在细节里……
您的环境root变量中有双重定义。root用户默认创建,密码来自MYSQL_ROOT_PASSWORD. 然后,您要求创建第二个“普通”用户...使用完全相同的名称和密码(即使用MYSQL_USER和MYSQL_PASSWORD)
如果你仔细查看你的启动日志,你会看到一个错误
db_1 | ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'root'@'%'
Run Code Online (Sandbox Code Playgroud)
这实际上会停止进一步处理您的 init 文件,docker-entrypoint-initdb.d并继续进行其余的映像启动过程(即在临时服务器上初始化后重新启动 mysql)。
只需拖放MYSQL_USER,并MYSQL_PASSWORD在您的ENV瓦尔,或设置得比不同的用户root,你会立即看到处理您的init文件(不要忘记再次清空你的数据目录)。
| 归档时间: |
|
| 查看次数: |
6215 次 |
| 最近记录: |