Khi quản trị VPS chạy MySQL/MariaDB, đặc biệt với các website WordPress, nhiều người bất ngờ phát hiện thư mục /var/lib/mysql ngày càng phình to, dù đã xoá rất nhiều bài viết hay bảng dữ liệu. Nguyên nhân phổ biến nhất nằm ở một file ít được chú ý: ibdata1.

Bài viết này sẽ giúp bạn hiểu rõ ibdata1 là gì, khi nào cần kiểm tra, dấu hiệu nguy hiểm và cách phòng tránh.


ibdata1 là gì?

ibdata1 là file tablespace hệ thống của InnoDB (engine mặc định của MySQL/MariaDB). File này dùng để lưu:

  • Metadata của InnoDB
  • Undo log
  • Một phần dữ liệu bảng InnoDB (tuỳ cấu hình)
  • Index dùng chung

📌 Quan trọng:
ibdata1 chỉ tăng kích thước, gần như không bao giờ tự giảm, kể cả khi bạn xoá dữ liệu trong database.


Vì sao ibdata1 hay “phình” trên WordPress?

WordPress có đặc thù:

  • Rất nhiều bảng InnoDB
  • Plugin tạo log, cache, transient
  • Cron chạy liên tục
  • Xoá bài, xoá log thường xuyên

➡️ Khi dữ liệu bị xoá, MySQL chỉ đánh dấu trống bên trong ibdata1, không trả lại dung lượng cho hệ điều hành.

Kết quả là:

  • Database “nhẹ” đi
  • Nhưng disk không hề giảm

Khi nào cần kiểm tra ibdata1?

Bạn nên kiểm tra ibdata1 trong các trường hợp sau:

1. VPS sắp hết dung lượng

Khi df -h cho thấy ổ đĩa gần full nhưng bạn không rõ nguyên nhân, ibdata1 là một trong những thứ cần kiểm tra đầu tiên.

ls -lh /var/lib/mysql/ibdata1

2. Đã xoá nhiều dữ liệu nhưng disk không giảm

Ví dụ:

  • Xoá hàng chục nghìn bài viết
  • Xoá bảng log, bảng cache
  • Dọn database WordPress

Nhưng:

du -sh /var/lib/mysql

vẫn không giảm → ibdata1 rất có thể đã phình


3. Website chạy lâu năm (≥ 6 tháng – 1 năm)

Đặc biệt với:

  • Site tin tức
  • Site crawl dữ liệu
  • Có bot, cron, scheduler

➡️ Nên kiểm tra định kỳ mỗi 1–2 tháng.


4. MySQL chậm dần dù RAM và CPU vẫn ổn

File ibdata1 quá lớn có thể khiến:

  • Seek disk chậm
  • Query đơn giản nhưng latency cao

Bao nhiêu là bình thường? Bao nhiêu là nguy hiểm?

Kích thước ibdata1Đánh giá
< 200MBBình thường
200MB – 1GBBắt đầu theo dõi
1 – 2GBCó dấu hiệu tích tụ
> 5GBNguy hiểm
> 10GBNên xử lý

👉 Ví dụ thực tế:

/var/lib/mysql/ibdata1 = 76MB

Hoàn toàn an toàn, chưa cần can thiệp.


Có được xoá ibdata1 không?

TUYỆT ĐỐI KHÔNG

Xoá ibdata1 trực tiếp sẽ khiến:

  • MySQL không khởi động
  • Toàn bộ database InnoDB hỏng

Muốn giảm kích thước ibdata1 bắt buộc phải:

  1. Dump toàn bộ database
  2. Dừng MySQL
  3. Rebuild lại InnoDB
  4. Import dữ liệu lại

➡️ Chỉ nên làm khi thật sự cần thiết.


Cách phòng tránh ibdata1 phình to

Với WordPress:

  • Tránh plugin ghi log vô hạn
  • Dọn định kỳ:
    • wp_actionscheduler_logs
    • transient
    • bảng cache
  • Không lưu crawler log vào database
  • Cron xoá dữ liệu cũ thay vì để tích tụ lâu ngày

Với hệ thống crawl / bot:

  • Log ra file, không ghi DB
  • Dùng bảng MyISAM cho log (nếu phù hợp)
  • Tách database log riêng

Kết luận

  • ibdata1 là thành phần bắt buộc và quan trọng của InnoDB
  • File này không nguy hiểm nếu được kiểm soát
  • Chỉ cần:
    • Theo dõi định kỳ
    • Tránh tạo dữ liệu rác
    • Không xoá bừa

👉 Nếu ibdata1 của bạn đang < 200MB: cứ yên tâm chạy.