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)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ý.