1. Kiểm tra dung lượng database hiện tại
Trước khi bắt đầu, bạn nên kiểm tra dung lượng các bảng trong MySQL bằng phpMyAdmin hoặc dòng lệnh:
SELECT table_name AS "Table",
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)"
FROM information_schema.TABLES
WHERE table_schema = "ten_csdldb"
ORDER BY (data_length + index_length) DESC;
Thay ten_csdldb bằng tên database của bạn.
2. Xóa revision cũ và bản nháp tự động
WordPress mặc định lưu rất nhiều bản revision cho mỗi bài viết. Để xóa chúng, bạn có thể dùng câu lệnh SQL sau:
DELETE FROM wp_posts WHERE post_type = 'revision';
Tiếp theo, xóa các bản nháp tự động không cần thiết:
DELETE FROM wp_posts WHERE post_status = 'auto-draft';
3. Dọn dẹp comment spam và chưa duyệt
Comment spam hoặc chờ kiểm duyệt quá lâu có thể chiếm nhiều dung lượng, đặc biệt với các site lớn. Bạn có thể xóa bằng lệnh sau:
DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_comments WHERE comment_approved = '0';
4. Xóa dữ liệu từ plugin đã xóa
Sau khi gỡ plugin, đôi khi các bảng dữ liệu hoặc options của nó vẫn còn tồn tại. Bạn nên kiểm tra bảng wp_options:
SELECT option_name, autoload FROM wp_options WHERE autoload = 'yes';
Nếu thấy các dòng lạ từ plugin không còn dùng, bạn có thể xóa bằng:
DELETE FROM wp_options WHERE option_name = 'ten_option';
5. Dọn transient hết hạn
Transient là các giá trị tạm thời lưu trong bảng wp_options. Sau một thời gian, chúng có thể bị “rác hóa” nếu không xóa.
DELETE FROM wp_options WHERE option_name LIKE '%_transient_%';
Lưu ý: lệnh trên sẽ xóa toàn bộ transient, kể cả chưa hết hạn – nên tránh dùng nếu bạn đang dùng plugin cache phụ thuộc vào transient.
6. Tối ưu bảng MySQL
Sau khi xóa dữ liệu, dung lượng vẫn có thể không giảm ngay vì không gian chưa được giải phóng. Bạn cần tối ưu lại các bảng:
OPTIMIZE TABLE wp_posts;
OPTIMIZE TABLE wp_postmeta;
OPTIMIZE TABLE wp_comments;
OPTIMIZE TABLE wp_commentmeta;
OPTIMIZE TABLE wp_options;
Bạn cũng có thể dùng lệnh tối ưu toàn bộ:
mysqlcheck -o ten_csdldb -u root -p
7. Giảm autoload trong wp_options
Trường autoload trong wp_options nếu bị lạm dụng có thể gây chậm TTFB, đặc biệt nếu vượt quá 1MB. Bạn nên kiểm tra các option tự động load bằng:
SELECT option_name, length(option_value) AS size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY size DESC
LIMIT 20;
Xóa hoặc đặt autoload = 'no' cho các option không cần thiết.
8. Lập kế hoạch dọn định kỳ (nếu không dùng plugin)
Bạn có thể đưa các câu lệnh SQL vào file shell script rồi dùng cron để chạy định kỳ (ví dụ mỗi tháng 1 lần). Tạo file cleanup-db.sh:
#!/bin/bash
mysql -u root -p'matkhau' -e "USE ten_csdldb;
DELETE FROM wp_posts WHERE post_type = 'revision';
DELETE FROM wp_posts WHERE post_status = 'auto-draft';
DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_options WHERE option_name LIKE '%_transient_%';
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_comments, wp_commentmeta, wp_options;"
Thêm vào cron:
crontab -e
0 3 1 * * /root/cleanup-db.sh
9. Tổng kết
Việc tối ưu database WordPress thủ công không chỉ giúp giảm kích thước MySQL mà còn cải thiện tốc độ xử lý và giảm TTFB đáng kể. Dù hơi tốn công hơn so với việc dùng plugin, nhưng thao tác thủ công sẽ giúp bạn kiểm soát chính xác những gì đang được xóa và giữ lại. Nên kết hợp với backup định kỳ để đảm bảo an toàn dữ liệu.
Bình luận