Vấn đề là do thiếu dung lượng đĩa trong thư mục / tmp. Ổ đĩa / tmp được sử dụng trong các truy vấn yêu cầu tạo bảng tạm thời. Các bảng tạm thời này ở định dạng MyISAM ngay cả khi truy vấn chỉ sử dụng các bảng có InnoDB.
Dưới đây là một số giải pháp:
- tối ưu hóa truy vấn để nó sẽ không tạo các bảng tạm thời (viết lại truy vấn, chia nó thành nhiều truy vấn hoặc thêm chỉ mục thích hợp, phân tích kế hoạch thực thi với pt-query-digest
và
EXPLAIN <query>
) Xem điều này Bài viết Percona về bảng tạm thời . - tối ưu hóa MySQL để nó sẽ không tạo các bảng tạm thời (sort_buffer_size, join_buffer_size). Xem: https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
- thu nhỏ bảng. Nếu có thể, hãy xóa các hàng không cần thiết
- sử dụng
SELECT table1.col1, table2,col1 ...
thay vìselect *
chỉ sử dụng các cột bạn cần trong truy vấn, để tạo các bảng tạm thời nhỏ hơn - sử dụng các loại dữ liệu chiếm ít dung lượng hơn
- thêm nhiều dung lượng đĩa hơn trên ổ đĩa nơi chứa thư mục / tmp
- thay đổi người dùng thư mục tạm thời bằng mysql bằng cách đặt
TMPDIR
biến môi trường trước khi khởi động mysqld. ĐiểmTMPDIR
vào một thư mục trên ổ đĩa có nhiều dung lượng trống hơn. Bạn cũng có thể sử dụngtmpdir
tùy chọn trong/etc/my.cnf
hoặc--tmpdir
trong dòng lệnh của dịch vụ mysqld. Xem: B.5.3.5 Nơi MySQL lưu trữ các tệp tạm thời