- ベストアンサー
cronを使って、CSVファイルのデータをMYSQLへ定期的に投入したい
cronを使って、CSVファイルのデータをMYSQLへ定期的に投入したいのですが、 色々試行錯誤してみてもうまくいきません。 (試しにmkdirを実行し、cronが動作していることは確認済みです) 以下が試行錯誤の内容です。 【1】 MYSQLIMPORT文を使用。 mysqlimport --host=ホスト名 -u ユーザ名 --password=パスワード --local --replace DB名 "ファイル名(フルパス)" SSHからの実行で動作確認をした文をそのままcronに登録しましたが、データは投入されず。 【2】 LOAD DATA INFILE文を使用 mysql --local-infile=1 --host=ホスト名 -u ユーザ名 --password=パスワード <<eof use DB名; LOAD DATA LOCAL INFILE 'ファイル名(フルパス)' INTO TABLE テーブル名 FIELDS TERMINATED BY ','; 命令はShellにまとめて書き、呼び出しました。 同様にSSHでは動作したものの、cronでは動作せず。 【3】 まずはDBを更新できるかどうかの確認を行うため、MYSQL接続とINSERT文をShellに書き出しました。 mysql --host=ホスト名 -u ユーザ名 --password=パスワード <<eof use DB名; INSERT INTO テーブル名 VALUES (1,1,1,1,1); SSHで動作確認したShellをcronで実行させたが、更新されず。 【4】 PHPスクリプトの実行 PHPを使って更新出来ないかテスト。 こちらもSSHでは動作したものの、cronとなると動作せず。 単純なINSERT文すら実行出来ないことから、cronではレコードを更新できないのでは?と思い始めております。 なにか設定が必要だったり、見落としている点があれば、ご教授ください。 サーバーはさくらサーバーで、MYSQLのバージョンは4です。 cron以外での実装方法があれば、そちらも併せてご教授ください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
-e オプションを使ったらどうでしょう? 例) ---------------------------------------------------------------- mysql --local-infile=1 --host=ホスト名 -u ユーザ名 --password=パスワード -e "use DB名; LOAD DATA LOCAL INFILE 'ファイル名(フルパス)' INTO TABLE テーブル名 FIELDS TERMINATED BY ',';" --------------------------------------------------------------------
その他の回答 (1)
mysqlimport、mysqlに -s オプション付けてもだめでしょうか? つまり、標準出力を抑制してみてください
お礼
回答ありがとうございます。 うーん・・・ 変化無しですね。
お礼
回答ありがとうございます。 試してみましたが、こちらも同じく更新されませんでした・・・