• ベストアンサー

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

  • cronを使ってPHPからMysqlが実行できない

    皆様いつもお世話になります。 現在MAMP環境(PHP+Mysql)でWEBシステム開発の勉強をしています。 一部機能でcronを利用して定時実行したい処理があるのですが、 その処理内にあるDBからデータを取得するプログラムが動かず困っています。 【症状など】 ・mysql_connect()の時点で 「No such file or directory」 というエラーが返ってきます。 ・上記エラーに対して、mysql.sockの場所の指定をきちんとしてやると解決することがわかり以下のコマンドをターミナルから打ち込みましたが ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock 特にエラー内容などにも変化はなく状況は変わりません。 ・ちなみにcronから実行せず、ブラウザから直接リクエスト実行するときちんと動作します。 以上です。 全く解決する糸口が見つからず本当に困っています。 お詳しいかたどなたかご教授のほどよろしくお願いいたします! 開発環境: MacOSX 10.8 PHP 5.2 Mysql 5.5.25 google Chrome 29.0.1547.62

    • ベストアンサー
    • PHP
  • PHPでMysqlにCSVをインポートす文字化け

    お世話になります。 文字化けが解消できずに困っています。 PHPからローカルXAMPPのMYSQLにCSVでデータを上げたいのですが、日本語が文字化けして表示されます。秀丸テキストエディタで可能な限りのエンコードを試しましたが解決できず、サーバ側のエンコード設定も確認しましたがutf8_unicode_ciです。 Mysqlの管理画面のsqlから実行しても同様の結果です。 もう、色々やり過ぎてPHPが悪いのかMysqlサーバの設定なのかCSVの問題なのかわからず途方に暮れています。 諸先輩方でお分かりになられる方がいらっしゃいましたら是非、お知恵を貸してもらえませんか。 PHPのソースです。 ------------------------------ $host = "localhost"; $mysql_user = "root"; $mysql_password = "password"; $db = "utsun_db"; $cn = mysql_connect($host,$mysql_user,$mysql_password); if(!$cn){ die("db connect Error"); } if(!(mysql_select_db("$db"))){ die("db select error"); } $file = '"c:/tablea.csv"'; $sql = "LOAD DATA LOCAL INFILE $file INTO TABLE tablea FIELDS TERMINATED BY ',';"; $query = mysql_query($sql); mysql_close($cn); ----------------------------- CSVの中身 N551 佐々木 37 N552 伊藤 41 N553 斉藤 31 N554 井上 43 N555 阿倍 31 ----------------------------- Mysqlの方ではこのように表示されています N552 伊藤 41 N553 斉藤 31 N554 井上 43 N555 阿倍 31 ほんとうに困っております宜しくお願いします。 環境 Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 phpMyAdmin バージョン情報: 3.5.2.2, 最終安定バージョン: 4.0.4.1

    • ベストアンサー
    • MySQL
  • csvファイルからMySQLにシェルで取り込みをしたい

    【環境】LINUX Ferora10 mysql 5.0 インターネット接続できないPC(データはUSBメモリで導入可能) bash/mysql初心者 教えてgooの参考ページ ​​http://oshiete1.goo.ne.jp/kotaeru.php3?q=2219411​​ mysql で db1 というデータベースに、tbl2というテーブルを作成しました。ここにcsvファイルから、データをインサートしたいのですが、うまくいきません。 これはうってみたコマンド #bash torikomi.sh エラーは syntax error near unexpected token '(' insert ~文 とかがでます。 下記にソースを貼るので間違いがあったら、教えていただけないでしょうか? #!/bin/bash set hensu='cat /home/******/data1'; for i in $hensu do set a='echo $i | awk -F, '{print $1}'' set b='echo $i | awk -F, '{print $2}'' set c='echo $i | awk -F, '{print $3}'' mysql --user=root --password=*******    use db1; insert into tbl2(aaa,bbb,ccc)values(a,"b","c"); exit done できれば、バックグラウンドでMySQLを起動して、いちいちログイン/ログアウトを繰り返さず、 インサート文を打てればいいのですが。

    • ベストアンサー
    • MySQL
  • csvからmySQLのデータベース作成

    カンマ区切りのcsvファイルを読み込んでMySQLのデータベースを作成したくて、下記のプログラムを作成しました。 しかし、正常に動作しません。どこに問題があるのでしょうか。 よろしくお願いします。 <?php $file = '"test.txt"'; //------------------------------------------------------------- //データベースアクセス //------------------------------------------------------------- $url = 'test-test.com'; // MySQL hostname $user = 'test_user'; // Your MySQL user name. $pass = 'password'; // Your MySQL password. $db = 'test_db'; // MySQLへ接続する $link = mysql_connect($url,$user,$pass); if ( $link == FALSE ) { error(__line__); } // データベースを選択する $sdb = mysql_select_db($db,$link); if ( $sdb == FALSE ) { error(__line__); } mysql_query("SET NAMES utf8"); //CSVデータの取り込み $sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE test fields terminated by"; $sql .= " LINES "; $sql .= " TERMINATED BY '\r\n' "; $sql .= " IGNORE 1 LINES"; $result = mysql_query($sql, $conn); if (!$result) { $message = 'Invalid query: ' . mysql_error() . "\n"; $message .= 'Whole query: ' . $sql; die($message); } //------------------------------------------------------------- // エラーメッセージ表示 //------------------------------------------------------------- function error($line) { echo "error code:" . $line; exit; } ?> ---------- .CSVファイル ---------- 日付,内容,備考 0901,value,etc 0902,value2,etc2

    • ベストアンサー
    • PHP
  • Mysqlコマンドラインからデータを取得する方法について

    mysqlに入らず、コマンドラインからデータを取得したいのですが。 shell>mysql アカウント パスワード DB名 < script > 出力ファイル名 上記のようにスクリプトを使用するのではなく、直接sql文を書いて取得するのはどのようにやるのでしょうか。 どなたたかご存知の方、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • CSVファイルをMYSQLにインポート

    先日からMYSQL+PHPの勉強をはじめました。 データベース構築の際、以前作成したCSVファイルをMYSQLのテーブルとして 利用したいと考えております。 そこで、MYSQLコマンドより、 LOAD DATA LOCAL INFILE 'ファイル名.csv' INTO TABLE テーブル名 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'; Query OK, 0 rows affected (0.04 sec) Records: 102 Deleted: 0 Skipped: 102 Warnings: 0 とCSVファイル自体が悪いのかSQL文に問題がるのかインポートがうまくいきません。。 ちなみにCSVは  0,2011/6/2 0:00,80.94,81.32,80.55,80.92 0,2011/5/25 0:00,81.94,82.17,81.8,81.95 0,2011/5/23 0:00,81.77,82.04,81.32,81.99 環境はphpdevで一括でインストールした phpadmin: バージョン2.3.2 MYSQL: MySQL4 apache: 1.3.27 初心者で基本的な質問かもしれないですがどうかご教授お願いします。

    • ベストアンサー
    • MySQL
  • PHPからMySQL CSVファイルのアップロード

    こんにちわ。 現在、XAMPP(1.6)にて開発をおこなっています。 MySQL Ver 5.0.51 PHP 5.2.5 Web上からcsvファイルを参照して、作成してあるDB(フィールド数32)へアップロードを おこないたいのですが、タイムアウトエラーになってしまいます。 アップするCSVファイルが54M(8万行)ほどあるため、php.ini「uplaod_max_file_size」 増やしてみたり、タイムアウト時間を長くしてみても、INSERTではタイムアウトになって しまいます。 そのため、LOADで読込もうとしたのですが以下のようなエラーになってしまいます。 PHP初めてで'や"の使い方が間違っているのかも知れませんが、どこが間違っているのか 教えていただけますでしょうか? ↓エラー文 Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\dmti.php on line 24 ↓実行文(24行目前後)$polはテーブル名 mysql_query("set names sjis"); $sql ="load data infile '$fl' into tabale $pol fields terminated by ',' enclosed by '"' lines terminated by '\r\n';" $ret = mysql_query($sql, $db); if($ret){ print mysql_num_rows($db)."件の登録を完了しました。.<br><br>"; $body = "<br><br> <input type='button' value='次へ' onclick='window.location=\"news.php\"'> <input type='button' value='ホームへ戻る' onclick='window.location=\"index.htm\"'>"; }else{ print "登録に失敗しました。"; $body .= "<br><br> <input type='button' value='戻る' onclick='history.back()'> <input type='button' value='ホームへ戻る' onclick='window.location=\"index.htm\"'>"; } 以上、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • csvファイルをMySQLにインポートしたい

    phpでcsvファイルをフォルダにアップロードし、これをMySQLにインポートするプログラムを作成しています。 以下のソースを実行したところエラーが発生しました。 -----food.csv---------------------------------------------------------------------- "No","name","price" "1","うどん","100" "2","ぱすた","500" "3","カレー","300" ---------------------------------------------------------------------------------- -----BaseDAO.php------------------------------------------------------------------ <?php class BaseDAO{ function connect(){ try { $dsn = "mysql:host=localhost;dbname=food"; $option = array( // エラーモードを例外スローに設定 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // local ファイルからload可能にする PDO::MYSQL_ATTR_LOCAL_INFILE => true ); $user = 'username'; $password = 'password'; $pdo = new PDO($dsn, $user, $password, $option); $pdo->exec("SET NAMES utf8"); return $pdo; //var_dump($pdo); } catch (PDOException $ex) { print($ex->getMessage()); die("データベース接続に失敗しました"); } return null; } function disconnect($dao){ $dao = null; } } ?> ---------------------------------------------------------------------------------- ------uploadcsv.php----------------------------------------------------------------- <?php require_once 'BaseDAO.php'; //csvファイルのアップロード if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { //「files」という名前のフォルダを同じ階層に設置。ここにCSVファイルをアップロード if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) { chmod("files/" . $_FILES["upfile"]["name"], 0644); //fileパス $file = "files/" .$_FILES["upfile"]["name"]; $sql_src = <<<SQL LOAD DATA LOCAL INFILE %s INTO TABLE `%s` CHARACTER SET sjis fields terminated by ',' enclosed by '"' lines terminated by '\\r\\n' IGNORE 1 LINES SQL; $table= 'food'; //テーブル名 $inport=new BaseDAO(); //インスタンス作成 $pdo=$inport->connect(); //pdoクラスに接続 $sql = sprintf($sql_src , $pdo->quote($file), $table); //sql文の実行 $stmt = $pdo->query($sql); echo "インポートが完了しました!"; //失敗したとき } else { echo "ファイルをアップロードできません。"; } } else { echo "ファイルが選択されていません。"; } ?> -----index.html--------------------------------------------------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>sample</title> </head> <body> <form action="uploadcsv.php" method="POST" enctype="multipart/form-data"> ファイル:<br> <input type="file" name="upfile" size="30"><br> <br> <input type="submit" value="アップロード"> </form> </body> </html> ---------------------------------------------------------------------------------- --------foodテーブルを作成するSQL文------------------------------------------------ CREATE TABLE IF NOT EXISTS `food` ( `No` int(11) NOT NULL, `name` varchar(50) NOT NULL, `price` varchar(50) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ---------------------------------------------------------------------------------- 実行したところ以下のエラーが発生しました。 Warning: PDO::query() [pdo.query]: LOAD DATA LOCAL INFILE forbidden in C:\xampp\htdocs\food\uploadcsv.php on line 30 <当方のPC環境> phpMyAdmin:3.3.9 PHP: 5.3.5 Apache 2.2.17 MySQL 5.5.8 XAMPP version 1.7.4 フォルダ(files)にcsvファイルがアップロードされているところまでは確認できましたが、MySQLにインポートされていないようです。 BaseDAO.php内の「PDO::MYSQL_ATTR_LOCAL_INFILE => true」が効いていないように思えます。 初歩的な質問で凝縮ですが、原因を教えていただきたく存じます。

    • ベストアンサー
    • PHP
  • MYSQLへのデータサイズの大きなデータの挿入

    C APIを用いて、MYSQLにテキストファイルの中身を格納したいと考えています。 以下のプログラムのように一度ファイルの中身をchar型配列に書き出し、配列の中身をクエリにコピーというようにすると、ファイルの大きさに合わせて、非常に大きな配列を確保しなければならないと思います。 int main(void){ MYSQL mysql; char query[1000]; char buf[1000]; FILE *fp; fp = fopen("test.txt", "r"); mysql_init(&mysql); if(!mysql_real_connect(&mysql,ホスト名,ユーザ名,パスワード,DB名,0,NULL,0)){ //エラー処理 } fread(buf, sizeof(char), sizeof(buf), fp ); sprintf(query, "insert into DB名 values(buf)); mysql_real_query(&mysql, query, strlen(query)); } これではメモリの無駄遣いなので、他の方法として、 1.データを分割して複数回に分けて挿入する 2.テキストファイルから直接読み込む を考えました。 しかし 1.は方法が分からず、 2.はリダイレクトを使えばできると思ったのですが、リダイレクトでは  テキストファイルにSQLコマンドも記入しておく必要があると思うの で、今回の方法には合いません。 MYSQLのフィールドにC言語から大きいデータを書き込むよい方法があれば教えてください。さらには、読み出し方まで教えていただけると助かります。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQLの実データはどのフォールダーにありますか?

    現在MySQLのDUMPはphpMyadminを利用して、xport&importを実行しております。 質問は実際に存在するMySQLデータは MySQL/DB名/ テーブル名.frm テーブル名.MYD テーブル名.MYI でしょうか。これをDUMPしているということでしょうか。 また、EXPORTをせずに上記の3種類のファイルをコピーしても同様な結果が得られるのでしょうか。 ご教授をお願いいたします。

    • ベストアンサー
    • MySQL