2

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


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 ディレクトリへの書き込み権限があります。また、Web を検索したところ、問題はファイルの先頭にシャープ記号 (「#」など) が付けられている可能性があるとのことでした。

/tmp ディレクトリに移動してファイルを作成しようとしたところ、場合によってはファイルを作成できないことに気付きました。したがって、実際にポンド記号が問題を引き起こしているのかどうか疑問に思っています。その場合、MySQL または Rails を使用して問題を解決する方法は次のとおりです。

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

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

2 番目と 3 番目のコマンド (引用符なし) は失敗しています。4 行目と 5 行目 (引用符付き) が機能しています。ポンド記号が引用符で囲まれていないか、バックスラッシュでエスケープされていないことが原因である可能性があります。繰り返しになりますが、それが原因だとしても、MySQL や Rails にどのように対処すればよいかわかりません。

何か案は?

4

1 に答える 1

0

シェルでは、バックスラッシュまたは引用符でエスケープしない限り、# はコメントを導入するため、引用符が必要です。ポンド記号のプレフィックスが付いた #sql_123 ファイルは、mysql が所有する一時ファイルであり、正常です。ただし、それらを移動することはできません。それらが存在する場合は、バイナリ ファイルを使用してデータベースを移動することはできません。シャットダウンして移動する必要があります。または mysqldump を SQL に実行します。

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

そのため、シンボリック リンクを保持したい場合 (つまり、より大きなディスクへのリンク) は、mysql をシャットダウンし、リンクを作成してから mysql を起動して、シンボリック リンクに問題がないことを確認することをお勧めします。

于 2012-11-09T13:19:59.723 に答える