- - PR -
「LOAD DATA INFILE」が失敗する要因は?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-06-08 14:30
皆さんこんにちわ。
「LOAD DATA INFILE」が失敗するので、原因を探しています。 自分でも以下の質問の仕方は酷いと思うのですが、エラーが拾えないので 的を絞った質問を書けませんでした。 そこで、皆さんが「OAD DATA INFILE」を使用された時に、はまった失敗が ありましたら、その内容と要因、対処方法を教えて頂ければ幸いです。 取り合えず、今の状況を簡単に説明させて頂きます。 【環境】 ・solaris8 & MySQL 【やりたい事】 ・同じDBが正副存在し、定期的に比較し、差分があれば解消します。 解消とは、両DBともに内容を同じにする事。足りない情報があれば 一方から、もう一方へデータを複写します。 【条件】 ・ODBC/JDBC/DBD/DBI等をインストールしてはいけない環境なので、 cronとshellで対処します。 【やっている事】 ・cronでshellを定期的に起動し、一定期間内に更新されたレコードを 両DBからSELECTし、Diffで差分を調査します。 ・差分があれば、その内容のみを「SELECT * INTO OUTFILE」でファイル に出力し、その内容をもう一方のDBに「LOAD DATA INFILE」で書き込み ます。(←これが失敗している) ・「LOAD DATA INFILE」の成否は、再度DBを比較することで確認しています。 【備考】 ・shellでは以下の様にSQLの書かれたテキストファイルを渡し、バッチ で処理しているのですが、エラーを拾えません。 シェルでなく、コマンドラインからバッチ処理を実行した場合にも、 処理結果は出力されませんでした。 (mysql user password db < spl-file >> errfile) >>& errfile ・shellからのバッチ処理に失敗した後に、時間を置いて、リトライする 処理にしているのですが、同じロジック・ファイルなのに成功する場合 もありますが殆どは失敗します。 ・何故か、mysqlにログインした状態で、shell実行時に出力された 「SELECT * INTO OUTFILE」のファイルを使用して、「LOAD DATA INFILE」 を行なうと成功します。 ・バッチのSQLの内容は以下になります。(別々のファイルに以下の 内容が記述されています) SELECT * INTO OUTFILE file FROM table WHERE ID = 'XXXXX' or ID = 'XXXXX' ....; LOAD DATA INFILE file IGNORE INTO TABLE table; |
1