2012-04-20 15 views
2

更新:私の会社のシステム管理者が/ tmpディレクトリを削除し、マウントされたドライブ(例:ln -s/mnt/somewhere/tmp)へのシンボリックリンクを作成しました。 MySQLは明らかにこのシンボリックリンクが嫌いでした。ローカルファイルシステム上の実際の/ tmpディレクトリが作成された後は は問題が去っていきました。Railsの移行時にMySQLの一時ファイルを書き込めません


私は、MySQLが一時ファイルを作成しようとするプロセス(rake db:migrate)を実行しています。 ただし、次のエラーが表示されている:

Mysql::Error: Can't create/write to file '/tmp/#sql_196_0.MYI' (Errcode: 13): 
SHOW FIELDS FROM `user_rules` 

にErrcode 13は明らかに、ファイルのアクセス許可の問題です。 プロセスを実行しているユーザーには、/ tmpディレクトリへの書き込み権限があります。 ウェブを検索したところ、問題はファイルにシャープ記号(たとえば「#」)が付いている可能性があることに言及しました。

私は/ tmpディレクトリに行き、ファイルを作成しようとしました。特定のケースで私は、ファイルを作成することはできません確かにシャープ記号が問題を引き起こしていると、それであれば、どのように問題を修正するためにMySQLやRailsのを使用することができるのであれば、私は思ったんだけど:。。

cd /tmp 
echo "Hello" > #sql_123 
touch #sql_123 

echo "Hello" > "#sql_123" 
touch "#sql_123" 

(引用符なし)2番目と3番目のコマンドは、(引用符で)4番目と5番目の行が働いている。失敗している。そのため、おそらく障害があるため、シャープ記号が引用符であることや、バックスラッシュでエスケープしていないのである。しかし、再び、それは場合でも、原因、私はどのようにtを確認していないMySQLまたはRailsに対処する方法を教えてください。

アイデア?バックスラッシュや引用符でエスケープしない限り、#は、コメントを紹介しますので、あなたが引用符を必要とするシェルで

+0

更新:私の会社のシステム管理者が/ tmpディレクトリを削除し、マウントされたドライブ(例:ln -s/mnt/somewhere/tmp)へのシンボリックリンクを作成しました()。 MySQLは明らかにこのシンボリックリンクが嫌いでした。 ローカルファイルシステム上の実際の/ tmpディレクトリが作成されると、問題は解決されました。 – Chris

答えて

0

。これらの#sql_123ファイルの先頭にポンド記号が付いているのは、mysqlが所有する一時ファイルであり、通常のものです。しかし、それらを移動することはできません。存在する場合は、バイナリファイルを使用してデータベースを移動することはできません。シャットダウンして移動する必要があります。 SQLへのmysqldumpを実行します。 MySQLが実行中

は、今すぐあなたのシステム管理者のために、彼は/ tmpのを削除しましたか? Mysqlは/ tmp内のファイルを開き、ファイルハンドルを開いたままディレクトリから削除します。サーバーが稼動中または停止中にディスク容量の違いが表示されます。 MySQLはすべての一時ファイルを隠しファイルとして作成します。これにより、mysqldが終了すると一時ファイルが確実に削除されます。隠しファイルを使用することの短所は、一時ファイルディレクトリがあるファイルシステムをいっぱいにする大きな一時ファイルが表示されないことです。

シンボリックリンク(大容量ディスク)を使用したい場合は、mysqlをシャットダウンしてリンクを作成し、mysqlを起動してシンボリックリンクに問題がないことを確認してください。

関連する問題