MySQL /書き込みファイルエラー(エラーコード28)


82

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

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

何かアイデア-これは私のサーバーのハードディスク容量の問題ですか?


3
十分なディスク容量がありますか?
NDM 2011

4
デバイスの空き容量を増やします。
Ashwin A

1
今日、このエラーが11%しか使用されていないデバイスでポップアップ表示されました。マシンを再起動して、その後は問題ありませんでしたが、空き容量があってもこのエラーが発生する可能性があります。
エルクビス2014

上で指摘したように、エラーコード28は、ディスク容量が不足していることを意味します。これはサーバーのエラーメッセージであり、クライアントではないことに注意してください。したがって、適切なサーバーをチェックしていることを確認してください。
Sergey Sinkovskiy 2016

回答:


117

次のperrorコマンドを使用します:

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

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


7
「ファイルシステムがいっぱいです」。どちら側?データベースサーバーまたはデータベースクライアント?
マリノス

それはdb_serverにあります。while true; do df -h /tmp; sleep 3; doneスクリプトの実行中に使用して、一時テーブルによって使用されているスペースの量を確認できます。
vinicius.olifer

20

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

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


17

同じ問題が発生しましたが、ディスク容量は問題ありませんでした(40%しか使用されていません)。問題はiノードでした。小さなファイルが多すぎて、iノードがいっぱいでした。

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


10

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

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

/tmp/MySQL構成で作業できるパーティションのサイズを増やすことができない場合はmy.cnf(通常は/etc/mysql/my.cnf)ファイルを編集して次の行を探します。

tmpdir = /tmp/

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

お役に立てれば!


4

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

du -sh / var / log / mysql

おそらくmysqlバイナリログがメモリをいっぱいにしました。そうであれば、古いログの削除に従ってサーバーを再起動してください。my.cnfも追加します。

expire_logs_days = 3


du: `/ var / log / mysql 'にアクセスできません:そのようなファイルまたはディレクトリはありません
ユーザー

あるべきdu -sh /var/log/mysql.log
ニキータ웃

1

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

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

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

0

他の行が機能しない場合は、この行を使用してみることもできます。

du -sh / var / lib / mysql / database_Name

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


0

xamppユーザーの場合:私の経験では、問題の原因は「0」という名前の「mysql」フォルダーにあるファイルです。サイズは大きすぎました(私のものは約256Gbに爆発しました)。その削除は問題を修正しました。


0

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

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

tmpdir = / your / new / dir

例えば

tmpdir = / var / tmp

通常は独自のパーティションにある/ tmpよりも多くのスペースを割り当てる必要があります。


0

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

1)iノードを確認します: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-大丈夫です!!!!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.