Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tệp khóa không chính xác cho bảng '/tmp/#sql_3c51_0.MYI' cố gắng sửa chữa nó

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 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ểm TMPDIR 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ụng tmpdir 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận hàng từ bảng mysql sang mảng php

  2. nhóm theo lần xuất hiện đầu tiên và lần cuối cùng

  3. Làm thế nào để sử dụng mysql JOIN mà không có điều kiện ON?

  4. Lỗi câu lệnh chuẩn bị sẵn mysql:MySQLSyntaxErrorException

  5. Ví dụ QUARTER () - MySQL