MySQL không trực tiếp phụ thuộc vào inode, nhưng gián tiếp thì có.
Mình giải thích dễ hiểu thế này:
1. Inode là gì
- Inode là số lượng mục ghi thông tin file/directory trong hệ thống file (ext4, xfs, v.v.).
- Mỗi file, mỗi thư mục, và mỗi table của MySQL (ở dạng file) đều chiếm ít nhất 1 inode.
- VPS thường giới hạn inode (đặc biệt trên hosting hoặc VPS SSD nhỏ).
2. MySQL liên quan đến inode ra sao
- MySQL lưu mỗi bảng (table) và mỗi chỉ số (index) thành file vật lý (nếu dùng
MyISAM
) hoặc thành nhiều file .ibd
(nếu dùng InnoDB
).
- Ví dụ:
/var/lib/mysql/db_name/wp_posts.frm /var/lib/mysql/db_name/wp_posts.ibd /var/lib/mysql/db_name/wp_posts.MYI /var/lib/mysql/db_name/wp_posts.MYD
- Mỗi file này = 1 inode.
- Nếu bạn có rất nhiều bảng, hoặc MySQL dùng tmp table trên disk liên tục (do query lớn, sort, group), nó cũng tạo file tạm → cũng tiêu tốn inode.
3. Khi inode ảnh hưởng MySQL
- Nếu inode bị full:
- MySQL không thể tạo file mới (dù còn dung lượng ổ đĩa).
- Query cần tạo bảng tạm (
Using temporary
) sẽ bị lỗi.
- Lỗi thường thấy:
ERROR 1021 (HY000): Disk full (/tmp); waiting for someone to free space...
hoặc Can't create/write to file '/tmp/#sql...'
- Nếu VPS inode limit nhỏ, MySQL chạy query phức tạp + nhiều cache tmp trên disk → có thể chết bất ngờ.
4. Giảm rủi ro inode full
- Dọn /tmp và thư mục log MySQL (
/var/lib/mysql/ib_logfile*
cũ).
- Giảm số bảng không dùng (xóa plugin tạo nhiều bảng rác).
- Chuyển tmpdir của MySQL sang RAM (tmpfs):
[mysqld] tmpdir = /dev/shm
→ vừa nhanh, vừa không tốn inode ổ cứng.
- Giữ table trong InnoDB dạng file-per-table để dễ quản lý.