MySQL / Lỗi tệp ghi (Mã lỗi 28)


82

Tôi gặp lỗi sau với một trong các ứng dụng web của chúng tôi -

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

Bất kỳ ý tưởng - đây có phải là một số vấn đề về dung lượng đĩa cứng trên máy chủ của tôi không?


3
Có đủ dung lượng đĩa trống không?
NDM

4
Giải phóng một số dung lượng trên thiết bị của bạn.
Ashwin A

1
Tôi đã gặp lỗi này hôm nay trên một thiết bị chỉ được sử dụng 11%. Mình đã khởi động lại máy thì sau đó vẫn ổn nhưng có vẻ như lỗi này có thể xảy ra ngay cả khi còn dung lượng.
Elkvis

Như đã chỉ ra ở trên Mã lỗi 28 có nghĩa là không có đủ dung lượng đĩa. Xin lưu ý rằng đó là thông báo lỗi máy chủ, không phải máy khách. Vì vậy, hãy đảm bảo rằng bạn đang kiểm tra trên đúng máy chủ.
Sergey Sinkovskiy

Câu trả lời:


117

Sử dụng perrorlệnh :

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

Trừ khi các mã lỗi khác nhau trên hệ thống của bạn, hệ thống tệp của bạn đã đầy.


7
"hệ thống tệp của bạn đã đầy". Về phía nào? db server hay db client?
Marinos An

nó nằm trên db_server. bạn có thể sử dụng while true; do df -h /tmp; sleep 3; donetrong khi chạy tập lệnh để xem có bao nhiêu dung lượng được sử dụng bởi các bảng tạm thời.
vinicius.olifer

20

Chúng tôi đã gặp sự cố tương tự và vấn đề là thư mục / tmp được sử dụng MySQL cho nhu cầu của nó (đó là cấu hình mặc định). Và / tmp nằm trên phân vùng riêng của nó, có quá ít dung lượng cho các yêu cầu MySQL lớn.

Để biết thêm chi tiết, hãy xem câu trả lời này: https://stackoverflow.com/a/3716778/994302


17

Tôi đã gặp vấn đề tương tự nhưng không gian đĩa vẫn ổn (chỉ đầy 40%). Vấn đề là các inodes, tôi có quá nhiều tệp nhỏ và các inodes của tôi đã đầy.

Bạn có thể kiểm tra trạng thái inode bằng df -i


10

Lỗi có nghĩa là bạn không có đủ dung lượng để tạo các tệp tạm thời theo yêu cầu của MySQL.

Điều đầu tiên bạn có thể thử là mở rộng kích thước /tmp/phân vùng của mình . Nếu bạn đang ở dưới LVM, hãy kiểm tra lvextendlệnh.

Nếu bạn không thể tăng kích thước phân vùng của mình, /tmp/bạn có thể làm việc trong cấu hình MySQL, hãy chỉnh sửamy.cnf/etc/mysql/my.cnf tệp (thường là trên ) và tìm dòng này:

tmpdir = /tmp/

Thay đổi nó cho bất cứ điều gì bạn muốn (ví dụ /var/tmp/). Chỉ cần đảm bảo có không gian và chỉ định quyền ghi cho người dùng mysql trong thư mục mới.

Hi vọng điêu nay co ich!


4

Chạy mã sau:

du -sh / var / log / mysql

Có lẽ nhật ký nhị phân mysql đã lấp đầy bộ nhớ, Nếu vậy, hãy làm theo việc xóa các nhật ký cũ và khởi động lại máy chủ. Cũng thêm vào my.cnf:

expire_logs_days = 3


du: không thể truy cập `/ var / log / mysql ': Không có tệp hoặc thư mục nào như vậy
Người dùng

nên đượcdu -sh /var/log/mysql.log
Nikita 웃

1

Tôi đã gặp lỗi tương tự và vấn đề chỉ đơn giản là không đủ dung lượng trên máy ảo của tôi. Tôi đã xóa một số tệp không cần thiết và nó bắt đầu hoạt động trở lại.

phân bổ bộ nhớ / không gian đĩa của tôi trông giống như thế này

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

0

Bạn cũng có thể thử sử dụng dòng này nếu dòng kia không hoạt động:

du -sh / var / lib / mysql / database_Name

Bạn cũng có thể muốn kiểm tra với máy chủ của mình và xem họ cho phép cơ sở dữ liệu của bạn lớn đến mức nào.


0

Đối với người dùng xampp: theo kinh nghiệm của tôi, sự cố do một tệp, có tên là '0' và nằm trong thư mục 'mysql' gây ra. Kích thước quá lớn (quả mìn phát nổ khoảng 256 Gb). Việc loại bỏ nó đã khắc phục sự cố.


0

Lỗi này xảy ra khi bạn không có đủ dung lượng trong phân vùng. Thông thường MYSQL sử dụng / tmp trên các máy chủ linux. Điều này có thể xảy ra với một số truy vấn vì tra cứu trả về nhiều dữ liệu hoặc thậm chí có thể chỉ sàng lọc qua nhiều dữ liệu tạo ra các tệp tạm thời lớn.

Chỉnh sửa /etc/mysql/my.cnf của bạn

tmpdir = / your / new / dir

ví dụ

tmpdir = / var / tmp

Nên được cấp phát với nhiều không gian hơn / tmp thường nằm trong phân vùng riêng của nó.


0

Hôm nay. Tôi có cùng một vấn đề ... giải pháp của tôi:

1) kiểm tra inode: df -i Tôi thấy:

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) Tôi bắt đầu xem những thư mục nào sử dụng số lượng id tối đa:

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

chẳng bao lâu tôi đã tìm thấy trong thư mục / home / tomnolane / tmp, chứa một số lượng lớn các tệp.

3) Tôi đã xóa thư mục / home / tomnolane / tmp LỢI NHUẬN.

4) đã kiểm tra:

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

được rồi.

5) restart mysql service- không sao đâu !!!!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.