繁体   English   中英

运行cron作业以在docker mysql容器中导入许多csv文件

[英]Run a cron job to import many csv files in docker mysql container

我的数据库在docker容器中运行,我想每小时将csv文件中的数据加载到数据库中

在容器内部手动运行此脚本非常完美,但是我无法在mysql容器内启动ron作业。

#!/usr/bin/env bash

cd /import/logs/301
for f in *.csv
do
        mysql -e "LOAD DATA LOCAL INFILE '"$f"' IGNORE INTO TABLE 301 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 2 LINES (@date,@time,R3,R2,R1) SET MeasuringTime = timestamp(str_to_date(@date,'%Y/%m/%d'), @time)" -u USER --password=PASSWORD DATABASE
done

cd /import/logs/302
for f in *.csv
do
        mysql -e "LOAD DATA LOCAL INFILE '"$f"' IGNORE INTO TABLE 302 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 2 LINES (@date,@time,R3,R2,R1) SET MeasuringTime = timestamp(str_to_date(@date,'%Y/%m/%d'), @time)" -u USER --password=PASSWORD DATABASE
done

我更喜欢在主机上运行cron,但是如何?

还是我应该带一个额外的导入容器,您将如何构建docker-compose.yml

在单个docker容器中运行多个进程通常是一个坏习惯。
(如果您真的有兴趣,可以在docker文档中阅读)

选项1-用于cron作业的专用容器

最好的选择是创建另一个容器来完成这项工作(当然,您必须在它们之间进行链接,并确保在新的Docker容器上安装了mysql等)

对于新容器,请查看乔恩·里贝罗(Jon Ribeiro)关于如何在docker内部运行cron作业的文章https://jonathas.com/scheduling-tasks-with-cron-on-docker/

选项2-在主机上运行cron作业

另外,如果要在主机上运行cron,则必须将mysql容器端口公开给主机,然后连接到主机。

请注意,如果Linux主机上的mysql尝试连接到localhost,它将使用unix套接字,因此请使用mysql --host=localhost --protocol=TCP如mysql文档https://dev.mysql.com/doc/中所述refman / 5.5 / EN / connecting.html
从mysql文档:

在Unix上,客户端使用Unix套接字文件进行连接。 --socket选项或MYSQL_UNIX_PORT环境变量可用于指定套接字名称。

要强制使用TCP / IP连接,请指定--protocol选项:
外壳> mysql --host=localhost --protocol=TCP

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM