CSV ファイルをダウンロードしてローカルの MySQL にインポートする bash スクリプトがあります。データベースは 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タスクは次のように実行されると予想されます'ユーザー'すべてのフォルダとファイルへのアクセスを許可し、対話型シェルと同じようにしかし、これは正しくないようです。スケジュールされたジョブでこのエラーメッセージが表示されます
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ファイル内の '-' 文字は '_' (アンダースコア) に変換されます。