• ベストアンサー

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以外での実装方法があれば、そちらも併せてご教授ください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

-e オプションを使ったらどうでしょう? 例) ---------------------------------------------------------------- mysql --local-infile=1 --host=ホスト名 -u ユーザ名 --password=パスワード -e "use DB名; LOAD DATA LOCAL INFILE 'ファイル名(フルパス)' INTO TABLE テーブル名 FIELDS TERMINATED BY ',';" --------------------------------------------------------------------

参考URL:
http://dev.mysql.com/doc/refman/5.1/ja/mysql-command-options.html
king_spice
質問者

お礼

回答ありがとうございます。 試してみましたが、こちらも同じく更新されませんでした・・・

その他の回答 (1)

noname#246547
noname#246547
回答No.1

mysqlimport、mysqlに -s オプション付けてもだめでしょうか? つまり、標準出力を抑制してみてください

king_spice
質問者

お礼

回答ありがとうございます。 うーん・・・ 変化無しですね。

関連するQ&A