【问题标题】:automate csv import in mysql db in linux environment在 linux 环境中自动导入 mysql db 中的 csv
【发布时间】:2016-04-19 05:06:52
【问题描述】:

有没有办法在 mysql db 中自动将 .csv 导入 SQL 表?我知道如何手动执行此操作,但有一种情况是每晚从 PeopleSoft 导出 .csv,我们希望将其自动导入到 Linux 环境中的 SQL 表中。请给我一个示例脚本来做到这一点.. 如果有办法,谁能指出我的方向(我不是 SQL 专家)!!

【问题讨论】:

    标签: mysql linux shell


    【解决方案1】:

    您可以尝试创建存储过程, 将加载 csv 查询写入 SP。 创建事件以调用 SP。 我希望这有帮助。

     CREATE EVENT IF NOT EXISTS `load_csv_event`
        ON SCHEDULE EVERY 23 DAY_HOUR
        DO CALL my_sp_load_csv();
    

    另外,您可以直接创建一个事件并将加载查询写入其中。

    【讨论】:

    • 感谢您的回复...但是我们无法在 mysql sp 中调用负载查询...您能告诉我任何替代方法吗...如果您有任何转储代码...
    • hi priyanshu ..如何直接创建一个事件并将加载查询写入其中...请告诉任何方法来做到这一点..
    • 运行 Windows 任务调度程序。使用 Load 查询创建 .bat 文件并使用调度程序运行我还没有完成,但应该可以。尝试新事物没有坏处。
    • 感谢您的建议 priyanshu...但我在 unix 环境中工作..不在 windows 上
    【解决方案2】:

    您可以创建一个 crontab 作业,例如:

    * * * * * /path/to/load_script.sh
    

    load_script.sh 可能是这样的(别忘了让它可执行):

    #!/bin/bash
    IMPORTED_FILE_PATH=/path/to/your/imported/file.csv
    TABLENAME=target_table_name
    DATABASE=db_name
    TMP_FILENAME=/tmp/${TABLENAME}.cvs
    # do nothing if imported file does not exist
    [ -f "$IMPORTED_FILE_PATH" ] || exit 0
    # if temporary file exists, then it means previous import job is running. Also do nothing
    [ -f "$TMP_FILENAME" ] && exit 0
    # Move it to tmp and rename to target table name
    mv "$IMPORTED_FILE_PATH" "$TMP_FILENAME"
    mysqlimport --user=mysqlusername --password=mysqlpassword --host=mysqlhost --local $DATABASE $TMP_FILENAME
    rm -f "$TMP_FILENAME"
    

    这只是一个例子(未经测试)。您应该添加错误处理、日志记录等。 另请查看mysqlimport的手册

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      相关资源
      最近更新 更多