gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 16:36:28 27 4
gpt4 key购买 nike

我的数据库在 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 documentation 中阅读相关内容)

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

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

对于新容器,请查看 Jon Ribeiro 的关于如何在 docker 中运行 cron 作业的文章 https://jonathas.com/scheduling-tasks-with-cron-on-docker/

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

或者,如果您想在主机上运行 cron,则必须向主机公开 mysql 容器端口,并连接到它。

请注意,Linux 主机上的 mysql 如果尝试连接到本地主机,将使用 unix 套接字,因此请使用 mysql --host=localhost --protocol=TCP正如 mysql 文档中所解释的 https://dev.mysql.com/doc/refman/5.5/en/connecting.html
来自 mysql 文档:

On Unix, the client connects using a Unix socket file. The --socket option or the MYSQL_UNIX_PORT environment variable may be used to specify the socket name.

To force a TCP/IP connection to be used instead, specify a --protocol option:
shell> mysql --host=localhost --protocol=TCP

关于mysql - 运行 cron 作业以在 docker mysql 容器中导入许多 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53578190/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com