Khôi phục WordPress bằng WP-CLI là kỹ năng bắt buộc khi website gặp lỗi sau cập nhật plugin, bị mất dữ liệu một phần, hoặc cần dựng lại môi trường staging nhanh để điều tra sự cố. Trong môi trường production, thao tác restore không chỉ là “import file SQL” mà còn phải có quy trình kiểm tra, giảm downtime, xác minh dữ liệu và chuẩn bị phương án rollback nếu lần khôi phục đầu tiên chưa đạt.
Bài viết này hướng dẫn một quy trình thực chiến để sao lưu và khôi phục WordPress bằng WP-CLI trên máy chủ Linux. Anh có thể áp dụng cho VPS, cloud instance, hoặc lab nội bộ trước khi triển khai trên hệ thống thật.
Khôi phục WordPress bằng WP-CLI là gì?
WP-CLI là công cụ dòng lệnh chính thức cho WordPress, cho phép quản trị core, plugin, theme, user, database và cache mà không cần thao tác qua wp-admin. Khi website lỗi nặng, trang quản trị có thể không vào được; lúc đó WP-CLI thường là cách nhanh và sạch nhất để kiểm tra và phục hồi.
Với khôi phục WordPress bằng WP-CLI, ta thường xử lý ba phần chính:
- Database: bài viết, option, user, cấu hình plugin, WooCommerce order nếu có.
- File hệ thống: source WordPress, plugin, theme, thư mục upload.
- Cấu hình vận hành: quyền file, cache, permalink, domain, cron và kiểm tra sau restore.
Bối cảnh production/lab nên chuẩn bị
Ví dụ trong bài dùng một site WordPress chạy trên Ubuntu, Nginx hoặc Apache, PHP-FPM và MariaDB/MySQL. Đường dẫn website giả định là:
/var/www/sysadminskills.com/public_html
Database giả định:
DB_NAME=wp_sysadminskills
DB_USER=wp_user
Trong thực tế, anh không nên copy nguyên thông tin này. Hãy đọc thông tin thật từ file wp-config.php:
cd /var/www/sysadminskills.com/public_html
grep "DB_NAME\|DB_USER\|DB_HOST" wp-config.php
Output mẫu:
define( 'DB_NAME', 'wp_sysadminskills' );
define( 'DB_USER', 'wp_user' );
define( 'DB_HOST', 'localhost' );
Checklist trước khi khôi phục WordPress
Trước khi restore, hãy chốt rõ mục tiêu. Khôi phục sai thời điểm hoặc sai bản backup có thể làm mất dữ liệu mới hơn.
1. Xác định loại sự cố
- Website trắng trang sau khi cập nhật plugin/theme.
- Database bị lỗi hoặc mất bảng.
- Bị malware chỉnh file PHP.
- Cần rollback về trạng thái trước khi deploy.
- Cần dựng staging giống production để test.
2. Đưa site vào maintenance nếu cần
Nếu đang restore production, nên bật maintenance mode để tránh user ghi dữ liệu trong lúc restore:
cd /var/www/sysadminskills.com/public_html
wp maintenance-mode activate
Kiểm tra trạng thái:
wp maintenance-mode status
Output mẫu:
Maintenance mode is active.
3. Tạo bản backup hiện trạng trước khi đụng vào
Dù site đang lỗi, vẫn nên lưu lại hiện trạng để có đường quay lại khi cần điều tra forensic hoặc so sánh dữ liệu:
mkdir -p /root/backup-before-restore/$(date +%F)
cd /var/www/sysadminskills.com/public_html
wp db export /root/backup-before-restore/$(date +%F)/before-restore.sql
tar -czf /root/backup-before-restore/$(date +%F)/wp-files-before-restore.tar.gz .
Giải thích:
wp db exportxuất database hiện tại qua WP-CLI.tar -czfnén toàn bộ file hiện tại để lưu vết.- Thư mục theo ngày giúp dễ truy vết khi có nhiều lần xử lý.
Tạo backup chuẩn bằng WP-CLI trước khi có sự cố
Một quy trình restore tốt bắt đầu từ backup tốt. Nếu chỉ backup database mà bỏ thư mục wp-content/uploads, website có thể còn bài viết nhưng mất ảnh. Nếu chỉ backup file mà bỏ database, bài viết và cấu hình biến mất.
Backup database
cd /var/www/sysadminskills.com/public_html
mkdir -p /backup/wordpress/$(date +%F)
wp db export /backup/wordpress/$(date +%F)/database.sql
Output mẫu:
Success: Exported to '/backup/wordpress/2026-05-07/database.sql'.
Backup thư mục upload, plugin và theme
tar -czf /backup/wordpress/$(date +%F)/wp-content.tar.gz wp-content
Nếu site lớn, anh có thể dùng rsync để backup incremental sang máy khác:
rsync -aH --delete /var/www/sysadminskills.com/public_html/wp-content/ backup-server:/data/wp-content/
Tài liệu chính thức wp db export là nguồn nên tham khảo khi cần thêm tham số như --add-drop-table hoặc --tables.
Quy trình khôi phục WordPress bằng WP-CLI
Phần này là quy trình restore cơ bản nhưng đủ an toàn cho phần lớn website nội dung, blog kỹ thuật hoặc landing page doanh nghiệp.
Bước 1: Kiểm tra bản backup
Không restore file backup khi chưa kiểm tra dung lượng và khả năng đọc.
ls -lh /backup/wordpress/2026-05-07/
gzip -t /backup/wordpress/2026-05-07/wp-content.tar.gz
head -n 20 /backup/wordpress/2026-05-07/database.sql
Output mẫu:
-rw-r--r-- 1 root root 85M database.sql
-rw-r--r-- 1 root root 1.8G wp-content.tar.gz
Nếu gzip -t không trả lỗi, file nén có thể đọc được. Nếu database.sql chỉ vài KB trong khi site có nhiều bài, cần nghi ngờ backup lỗi.
Bước 2: Restore database
Di chuyển vào thư mục WordPress rồi import database:
cd /var/www/sysadminskills.com/public_html
wp db import /backup/wordpress/2026-05-07/database.sql
Output mẫu:
Success: Imported from '/backup/wordpress/2026-05-07/database.sql'.
Nếu restore sang staging hoặc domain mới, cần đổi URL:
wp search-replace 'https://sysadminskills.com' 'https://staging.sysadminskills.com' --skip-columns=guid --precise --all-tables
Giải thích:
--skip-columns=guidtránh đổi GUID bài viết không cần thiết.--precisexử lý dữ liệu serialized an toàn hơn.--all-tableshữu ích khi plugin tạo bảng riêng.
Bước 3: Restore wp-content
Thông thường không nên ghi đè toàn bộ document root nếu không cần. Hãy restore phần wp-content trước:
cd /var/www/sysadminskills.com/public_html
mv wp-content wp-content.broken.$(date +%F-%H%M)
tar -xzf /backup/wordpress/2026-05-07/wp-content.tar.gz
Nếu backup được tạo từ đúng thư mục WordPress, sau khi giải nén anh sẽ có lại wp-content gồm uploads, themes và plugins.
Bước 4: Sửa quyền file
Sai quyền file là lỗi rất hay gặp sau restore, nhất là khi chạy lệnh bằng root.
chown -R www-data:www-data /var/www/sysadminskills.com/public_html
find /var/www/sysadminskills.com/public_html -type d -exec chmod 755 {} \;
find /var/www/sysadminskills.com/public_html -type f -exec chmod 644 {} \;
Với CentOS/AlmaLinux dùng Apache, user có thể là apache thay vì www-data. Kiểm tra bằng:
ps aux | egrep 'nginx|apache|php-fpm' | head
Kiểm tra sau khi restore
Restore xong chưa có nghĩa là website đã ổn. Cần kiểm tra cả backend, frontend và dữ liệu quan trọng.
Kiểm tra core, plugin và theme
cd /var/www/sysadminskills.com/public_html
wp core version
wp plugin list
wp theme list
Output mẫu:
+----------------------+----------+-----------+---------+
| name | status | update | version |
+----------------------+----------+-----------+---------+
| wordpress-seo | active | none | 27.5 |
| litespeed-cache | active | none | 7.x |
+----------------------+----------+-----------+---------+
Kiểm tra URL và permalink
wp option get home
wp option get siteurl
wp rewrite flush
wp rewrite flush giúp tái tạo permalink rules, đặc biệt sau khi restore sang môi trường khác hoặc đổi cấu hình web server.
Xóa cache
Nếu dùng LiteSpeed Cache hoặc plugin cache khác, nên purge cache sau restore:
wp cache flush
Một số plugin có lệnh riêng. Với LiteSpeed Cache, có thể cần purge từ giao diện plugin hoặc endpoint của plugin nếu đã cấu hình.
Lỗi thường gặp khi khôi phục WordPress bằng WP-CLI
Lỗi “Error establishing a database connection”
Nguyên nhân thường là sai thông tin database trong wp-config.php, MySQL chưa chạy, hoặc user database thiếu quyền.
systemctl status mysql
wp config get DB_NAME
wp config get DB_USER
wp db check
Nếu wp db check báo lỗi quyền, cần kiểm tra grant trong MySQL:
mysql -e "SHOW GRANTS FOR 'wp_user'@'localhost';"
Lỗi trắng trang sau restore
Hãy tắt plugin để xác định nguyên nhân:
wp plugin deactivate --all
wp plugin activate wordpress-seo litespeed-cache
Nếu site sống lại sau khi deactivate toàn bộ plugin, kích hoạt lại từng plugin và theo dõi log:
tail -f /var/log/nginx/error.log
tail -f /var/log/php*-fpm.log
Ảnh bị mất hoặc trả 404
Kiểm tra thư mục uploads:
ls -lah wp-content/uploads
find wp-content/uploads -maxdepth 2 -type f | head
Nếu dữ liệu ảnh chưa được restore, bài viết vẫn còn trong database nhưng media file không tồn tại trên disk.
Checklist nghiệm thu sau restore
- Trang chủ mở được HTTP 200.
- wp-admin đăng nhập được.
- Bài viết mới nhất, category và media hiển thị đúng.
- Không còn lỗi nghiêm trọng trong web server/PHP log.
- Plugin quan trọng active đúng phiên bản.
- Permalink hoạt động, không lỗi 404 hàng loạt.
- Cache đã được xóa sau restore.
- Maintenance mode đã tắt.
- Có ghi chú thời điểm restore, bản backup đã dùng và người thực hiện.
Lab thực hành: dựng staging từ backup production
Để luyện tập an toàn, anh có thể dựng một staging site từ backup production:
- Tạo virtual host
staging.example.com. - Copy source WordPress sang thư mục staging.
- Tạo database staging riêng.
- Import database bằng
wp db import. - Chạy
wp search-replaceđổi domain production sang staging. - Chặn index staging bằng password hoặc cấu hình
noindex. - Kiểm tra bài viết, media, plugin và log lỗi.
Lệnh tham khảo:
cd /var/www/staging.example.com/public_html
wp db import /backup/wordpress/2026-05-07/database.sql
wp search-replace 'https://example.com' 'https://staging.example.com' --skip-columns=guid --precise --all-tables
wp option update blog_public 0
wp rewrite flush
Kết luận
Khôi phục WordPress bằng WP-CLI giúp SysAdmin xử lý sự cố nhanh, có kiểm soát và dễ lặp lại hơn so với thao tác thủ công trong phpMyAdmin hoặc wp-admin. Điểm quan trọng nhất là luôn backup hiện trạng trước khi restore, kiểm tra bản backup, restore database và file theo thứ tự rõ ràng, sau đó nghiệm thu bằng checklist.
Nếu vận hành WordPress nghiêm túc, anh nên định kỳ diễn tập restore trên staging. Backup chỉ thật sự có giá trị khi đã từng khôi phục thành công.
