こんばんは、yoku0825といいます。
原因ぽいものは全くわからないのですが、
>---検証内容---> ・VS2012でのデバッグ時に、ステップ実行でも発生。
> ・File.Delete→INTO OUTFILEの間に、Sleepを5秒挟んだりしても発生する。
これは ファイルが存在している(?)にも拘わらずFile.ExistsがTRUEで抜けてくるのが問題だと思うので、スリープを挟むとしたらINTO OUTFILEとFile.Delete(File.Exists)の間がいいのでははないでしょうか?
1. ファイルの存在チェック2. 存在したら消す
3. SELECT .. INTO OUTFILE ..-- ここでブレーク --4. ファイルの存在チェック5. 存在したら消す6. SELECT .. INTO OUTFILE ..
ブレークした時に、OSから見てもファイルが存在するのにFile.ExistsがFALSEになるのであればオブジェクトを使いまわしていないか(File.DeleteしたあとのFileオブジェクトが何を返すのかとか)とか、OSから見てファイルがまだ存在しないのなら、mysqldのスタックなど見てみるといいのかもしれません。5.0も5.6もselect_export::prepareの割と早い段階でcreate_fileを呼んで(ファイルだ け先行して作成される)いるので、そこは変わらないような気がするのですが。。
yoku0825,
2014年12月12日 14:22 志澤 敦 <atsushi.shizawa@seikodo.co.jp>:志澤と申します。
初めて投稿させて頂きます。
MySQLWindowsのケースは少ないかとも思いますが、
お心あたり御座いましたら、ご頂けると幸いです。
---環境---
OS :Windows2012 Std(Memory24GB)
DB :MySQL 5.6.21
Coccector :Net 6.9.5
FrameWork :.NET FrameWork 4.5
IDE :VS2012 Pro
---事象---
・同一ファイルパスにおいて、INTO OUTFILE →File.Deleteを高速に行うと、
IF(File.Exists==TRUE){File.Delete}が機能せず、
SQL発行時にMySqlExceptionが発生。
・エラー内容は、「1086:already exists」
・その際、OS上にもファイルは残っており、通常のファイルとして読み書きが出 来る状態。
---検証内容---
・VS2012でのデバッグ時に、ステップ実行でも発生。
・File.Delete→INTO OUTFILEの間に、Sleepを5秒挟んだりしても発生する。
・Win2008R2でも同様に発生。
・CentOSでも同様に発生。
・MySQL5.5でも同様に発生。
--例外事象--
・MySQL5.0では発生しない。
以上となります。
DBというより、ConnectorやOS由来な気もしておりますが、
何か情報御座いましたら、ご助言の程を何卒お願い致します。