mysqlimport 在作為 cron 作業運行但不是互動式運行時出現錯誤(Ubuntu 14.02)

mysqlimport 在作為 cron 作業運行但不是互動式運行時出現錯誤(Ubuntu 14.02)

我有一個 bash 腳本,它會下載 CSV 檔案並將其匯入到本機 MySQL 中。資料庫是Ubuntu 14.04上的MySQL 5.6,我使用以下語句(bash)來載入資料:

 mysqlimport --ignore-lines=1 --lines-terminated-by='\n' --fields-terminated-by=',' --verbose --local --user=xx --password=xxxxxxxx mydb /var/www/mysite/data/daily_info.csv

問題是,當我使用相同使用者從命令列啟動腳本時,它從下載到匯入階段都運作良好。我新增了一個 crontab 條目來使用命令運行腳本

crontab -u theuser -e

使用者'用戶'與從命令列正確啟動腳本相同。 'daily_info' 也是新增資料的表格的名稱mysql導入命令。

我希望 crontab 任務運行為'用戶'允許存取所有資料夾和文件,就像互動式 shell 一樣,但這似乎不正確。預定的作業給了我這個錯誤訊息

mysqlimport: Error: 1290, The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, when using table: daily_info

我發現了許多與此相關的問題安全檔案權限問題,但答案與這種情況不太相符,我懷疑我的腳本(mysqlimport)中的命令正在使用不同的用戶運行,但我無法診斷它。

任何幫助,將不勝感激。謝謝。

答案1

我沒有找到解釋,但找到了我自己問題的(部分)解決方案。我希望其他人可以為加強這一點做出貢獻。當從命令列運行時,腳本運行正常,當從 crontab 啟動它時,它會應用在安全檔案權限mysql 變數。所以我修改了我的cnf文件在下面新增一行[mysqld]組如下圖所示:

[mysqld]
...other settings here...
secure-file-priv=/mypath/datafolder/

之後,您必須重新啟動 mysql 並使用下列查詢檢查變更是否生效:

mysql> show variables like 'secure-file-priv';
+------------------+------------------------+
| Variable_name    | Value                  |
+------------------+------------------------+
| secure_file_priv | /mypath/datafolder/    |
+------------------+------------------------+
1 row in set (0.01 sec)

請注意,當資料庫載入時.cnf文件中的“-”字元轉換為“_”(底線)。

相關內容