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

zour9fqk  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(364)

我的数据库在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

0sgqnhkj

0sgqnhkj1#

在一个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,那么它将使用unixsocket,所以请使用 mysql --host=localhost --protocol=TCP 如mysql文档中所述https://dev.mysql.com/doc/refman/5.5/en/connecting.html
来自mysql文档:
在unix上,客户机使用unix套接字文件进行连接。可以使用--socket选项或mysql\u unix\u port环境变量来指定套接字名称。
要强制使用tcp/ip连接,请指定--protocol选项:
外壳> mysql --host=localhost --protocol=TCP

相关问题