cd /var/www/example.com
wp db export /var/backups/before-cleanup-$(date +%F).sql
gzip /var/backups/before-cleanup-*.sql
ขั้นตอนที่ 1: ดูว่าอะไรกินพื้นที่
wp db size --tables --human-readable
-- นับข้อมูลที่ลบได้แต่ละประเภท
SELECT post_type, post_status, COUNT(*) AS n
FROM wp_posts GROUP BY post_type, post_status ORDER BY n DESC;
SELECT comment_approved, COUNT(*) FROM wp_comments GROUP BY comment_approved;
SELECT COUNT(*) AS transients FROM wp_options WHERE option_name LIKE '\_transient\_%';
SELECT ROUND(SUM(LENGTH(option_value))/1024/1024,2) AS autoload_mb
FROM wp_options WHERE autoload='yes';
wp post delete $(wp post list --post_status=trash --format=ids) --force
wp post delete $(wp post list --post_status=auto-draft --format=ids) --force
# ตั้งให้ล้างถังขยะเองหลัง 15 วัน
wp config set EMPTY_TRASH_DAYS 15 --raw
ขั้นตอนที่ 4: ล้างความคิดเห็นสแปมและถูกปฏิเสธ
wp comment delete $(wp comment list --status=spam --format=ids) --force
wp comment delete $(wp comment list --status=trash --format=ids) --force
wp comment list --format=count
-- meta ของบทความที่ไม่มีอยู่แล้ว
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;
-- meta ของความคิดเห็นที่ถูกลบ
DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;
-- ความสัมพันธ์หมวดหมู่ที่กำพร้า
DELETE tr FROM wp_term_relationships tr
LEFT JOIN wp_posts p ON p.ID = tr.object_id
WHERE p.ID IS NULL;
-- meta ของผู้ใช้ที่ถูกลบ
DELETE um FROM wp_usermeta um
LEFT JOIN wp_users u ON u.ID = um.user_id
WHERE u.ID IS NULL;