web-dev-qa-db-ja.com

MySQL / Writingファイルエラー(Errcode 28)

Webアプリケーションの1つで次のエラーが発生しました-

Query3 failed: Error writing file '/tmp/MY1fnqpm' (Errcode: 28) ... INSERT MailList... (removed the rest of the query for security reasons)

任意のアイデア-これは私のサーバー上のハードディスクスペースの問題ですか?

78
Zabs

perrorコマンド を使用します。

$ perror 28
OS error code  28:  No space left on device

システムでエラーコードが異なる場合を除き、ファイルシステムはいっぱいです。

110
Arnaud Le Blanc

同様の問題が発生しましたが、問題はMySQLが必要に応じて/ tmpディレクトリを使用したことです(デフォルトの構成です)。また、/ tmpは独自のパーティションに配置されており、大きなMySQLリクエストに対してスペースが少なすぎました。

詳細については、この回答をご覧ください: https://stackoverflow.com/a/3716778/994302

20
XSeryoga

私は同じ問題を抱えていましたが、ディスク容量は大丈夫でした(40%のみ満杯です)。問題はiノードで、小さなファイルが多すぎて、iノードがいっぱいでした。

Iノードのステータスはdf -iで確認できます

15
Turshija

このエラーは、MySQLに必要な一時ファイルを作成するのに十分なスペースがないことを意味します。

最初に試すことができるのは、/tmp/パーティションのサイズを拡張することです。 LVMの場合は、lvextendコマンドを確認してください。

パーティション/tmp/のサイズを大きくできない場合は、MySQL構成で作業できます。my.cnf(通常は/etc/mysql/my.cnf)ファイルを編集しこの行の場合:

tmpdir = /tmp/

必要に応じて変更します(例/var/tmp/)。必ずスペースを確保し、新しいディレクトリのmysqlユーザーに書き込み権限を割り当ててください。

お役に立てれば!

9
SlayerX

次のコードを実行します。

du -sh/var/log/mysql

おそらくmysqlバイナリログがメモリをいっぱいにした可能性があります。その場合は、古いログの削除に従ってサーバーを再起動します。 my.cnfにも追加します。

expire_logs_days = 3

4
Alex

これと同じエラーが発生しましたが、問題は単に仮想マシンのスペースが十分ではなかったことです。いくつかの不要なファイルを削除し、再び機能し始めました。

私のメモリ/ディスクスペースの割り当ては次のように見えました

df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   37G   37G  127M 100% /
...
1
Samuel Frost

Xamppユーザーの場合:私の経験では、問題は「mysql」フォルダーにある「0」という名前のファイルが原因でした。サイズはとてつもなく大きかった(約256 GBに爆発した)。その除去は問題を修正しました。

0
Sandro Rosa

今日。私は同じ問題を抱えています...私の解決策:

1)inodeを確認:df -i私が見た:

root@vm22433:/etc/mysql# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 124696 304 124392 1% /dev
tmpfs 127514 452 127062 1% /run
/dev/vda1 1969920 1969920 0 100% /
tmpfs 127514 1 127513 1% /dev/shm
tmpfs 127514 3 127511 1% /run/lock
tmpfs 127514 15 127499 1% /sys/fs/cgroup
tmpfs 127514 12 127502 1% /run/user/1002

2)どのフォルダが最大数のinodを使用しているかを調べ始めました:

 for i in /*; do echo $i; find $i |wc -l; done

すぐに/ home/tomnolane/tmpフォルダーに見つかりました。これには膨大な数のファイルが含まれていました。

3)/ home/tomnolane/tmpフォルダーPROFITを削除しました。

4)チェック済み:

Filesystem      Inodes  IUsed   IFree IUse% Mounted on
udev            124696    304  124392    1% /dev
tmpfs           127514    454  127060    1% /run
/dev/vda1      1969920 450857 1519063   23% /
tmpfs           127514      1  127513    1% /dev/shm
tmpfs           127514      3  127511    1% /run/lock
tmpfs           127514     15  127499    1% /sys/fs/cgroup
tmpfs           127514     12  127502    1% /run/user/1002

大丈夫です。

5)restart mysql service-大丈夫!!!!

このエラーは、パーティションに十分なスペースがない場合に発生します。通常、MYSQLはLinuxサーバーで/ tmpを使用します。これは、ルックアップが大量のデータを返していたり​​、大量のデータをふるいにかけて大きな一時ファイルを作成したりしたために、一部のクエリで発生する可能性があります。

/etc/mysql/my.cnfを編集します

tmpdir =/your/new/dir

例えば

tmpdir =/var/tmp

通常は独自のパーティションにある/ tmpよりも多くのスペースを割り当ててください。

0

もう一方が機能しない場合は、次の行を使用して試すこともできます。

du -sh/var/lib/mysql/database_Name

また、ホストに確認して、データベースの許容サイズを確認することもできます。

0
Wyatt