如何通过docker-compose实现CSV文件导入MySQL容器?
解决方案
在docker-compose的MySQL服务配置中新增command字段即可传入自定义启动参数,修改后的完整配置如下:
version: '3.7' services: db: image: mysql command: --secure-file-priv=/docker-entrypoint-initdb.d ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORD=root123 - MYSQL_DATABASE=test - MYSQL_USER=test - MYSQL_PASSWORD=test123 volumes: - './init.sql:/docker-entrypoint-initdb.d/init.sql' - './init_data:/docker-entrypoint-initdb.d/init_data'
注意事项
- 修改配置后如果之前已经启动过容器,需要先执行
docker-compose down -v清理旧容器和关联卷,再执行docker-compose up -d重启服务,否则初始化脚本不会重新执行,新增的启动配置也不会生效 - 本地
./init_data目录对应容器内的绝对路径为/docker-entrypoint-initdb.d/init_data/,在init.sql中编写LOAD DATA语句时需使用容器内的绝对路径,参考示例:
LOAD DATA INFILE '/docker-entrypoint-initdb.d/init_data/你的数据文件.csv' INTO TABLE 目标表名 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; -- CSV第一行是表头时保留该行,否则删除
- 确保本地CSV文件和
init_data目录有足够的读权限,必要时可执行chmod -R a+r ./init_data赋予全局读权限
内容的提问来源于stack exchange,提问作者JPcode
相关产品推荐
相关产品推荐

