Lỗi Gặp Phải
Bạn cố tải trang WordPress hoặc trang quản trị nhưng chỉ thấy trang trắng hoặc lỗi cơ sở dữ liệu như sau:
WordPress database error: Table 'wp_options' is marked as crashed and should be repaired
for query SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'
Không có gì tải được — trang chủ lẫn wp-admin đều không vào được. Đôi khi bạn thấy trang lỗi nghiêm trọng đầy đủ, đôi khi chỉ là màn hình trắng. Dù thế nào, WordPress cũng không đọc được cài đặt cốt lõi vì wp_options không thể truy cập.
Nguyên Nhân Xảy Ra
wp_options là xương sống của WordPress. Bảng này lưu trữ URL trang web, plugin đang kích hoạt, cài đặt giao diện, và tất cả các giá trị autoload. Trên một trang web thông thường, bảng này chứa 500–2.000+ hàng — và WordPress truy vấn toàn bộ mỗi khi có request.
Sự cố crash như này thường do các nguyên nhân sau:
- Máy chủ mất điện đột ngột hoặc bị khởi động lại cưỡng bức giữa chừng khi đang ghi dữ liệu
- Tiến trình
mysqldbị kill trong lúc đang ghi - Ổ đĩa đầy giữa quá trình ghi
- Bảng đang dùng MyISAM — engine không có khả năng phục hồi sau crash
MyISAM không có cơ chế phục hồi sau crash. Khi một thao tác ghi bị gián đoạn, file index mất đồng bộ với file dữ liệu. MySQL phát hiện sự không khớp này và đánh dấu bảng là crashed.
Bước 1: Kiểm Tra Các Bảng Bị Crash
Đừng chỉ giả định mỗi wp_options bị lỗi. Đăng nhập qua SSH và kiểm tra toàn bộ các bảng cốt lõi cùng lúc:
mysql -u your_db_user -p your_database_name
Sau đó chạy:
CHECK TABLE wp_options, wp_posts, wp_postmeta, wp_users, wp_usermeta, wp_terms, wp_term_relationships, wp_term_taxonomy, wp_commentmeta, wp_comments;
Xem cột Msg_text để tìm giá trị crashed. Ghi lại tất cả các bảng bị ảnh hưởng — bạn sẽ sửa chúng cùng một lúc.
Bước 2: Sửa Bảng Qua MySQL CLI (Nhanh Nhất)
Vẫn trong MySQL shell, chạy lệnh:
REPAIR TABLE wp_options;
Có nhiều bảng bị crash? Sửa chúng cùng lúc:
REPAIR TABLE wp_options, wp_posts, wp_postmeta;
Kết quả mong đợi:
+--------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------+--------+----------+----------+
| yourdb.wp_options | repair | status | OK |
+--------------------+--------+----------+----------+
OK nghĩa là sửa thành công. Thoát MySQL bằng \q và tải lại trang web.
Bước 3: Sửa Bằng mysqlcheck (Không Cần Đăng Nhập MySQL)
Muốn ở lại trong shell mà không vào chế độ tương tác của MySQL? Dùng mysqlcheck trực tiếp:
mysqlcheck -u your_db_user -p --repair your_database_name wp_options
Để quét và sửa toàn bộ cơ sở dữ liệu WordPress cùng lúc:
mysqlcheck -u your_db_user -p --auto-repair --check your_database_name
Lệnh này kiểm tra từng bảng, chỉ sửa những bảng bị lỗi và bỏ qua các bảng còn tốt. Không cần đoán mò.
Bước 4: Sửa Qua phpMyAdmin (Không Có SSH)
Không có SSH? phpMyAdmin xử lý được chuyện này:
- Mở phpMyAdmin từ bảng điều khiển hosting (cPanel → phpMyAdmin)
- Chọn cơ sở dữ liệu WordPress từ thanh bên trái
- Tìm
wp_optionstrong danh sách bảng — có thể hiện icon đỏ hoặc trạng thái "crashed" - Đánh dấu vào ô checkbox bên cạnh bảng đó
- Ở cuối trang, mở dropdown và chọn Repair table
- Nhấn Go
Thông báo xác nhận sẽ xuất hiện nếu sửa thành công.
Bước 5: Sửa Qua WP-CLI (Tốt Nhất Để Tự Động Hóa)
Người dùng WP-CLI có cách đơn giản và gọn nhất:
wp db repair --path=/var/www/html/your-wordpress-folder
Lệnh này chạy mysqlcheck --repair trên toàn bộ cơ sở dữ liệu WordPress. Lý tưởng cho cron job hoặc khi bạn quản lý nhiều trang trên cùng một máy chủ.
Kiểm tra sức khỏe cơ sở dữ liệu sau đó:
wp db check --path=/var/www/html/your-wordpress-folder
Xác Nhận Đã Sửa Xong
Chạy kiểm tra nhanh trên bảng vừa sửa:
mysql -u your_db_user -p your_database_name -e "CHECK TABLE wp_options;"
Bạn muốn thấy OK, không phải crashed:
+--------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------+-------+----------+----------+
| yourdb.wp_options | check | status | OK |
+--------------------+-------+----------+----------+
Tải lại trang WordPress và wp-admin. Mọi thứ trở lại bình thường? Vậy là xong.
Ngăn Chặn Tình Trạng Này Tái Diễn
Giải pháp triệt để là chuyển từ MyISAM sang InnoDB. InnoDB sử dụng transaction log, cho phép tự động rollback và phục hồi sau khi tắt máy đột ngột. Sự cố crash cụ thể này sẽ không còn xảy ra nữa.
Đầu tiên, kiểm tra engine mà các bảng đang dùng:
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_database_name';
Chuyển riêng bảng wp_options:
ALTER TABLE wp_options ENGINE = InnoDB;
Chuyển toàn bộ bảng MyISAM chỉ với một lệnh shell:
mysql -u your_db_user -p your_database_name -e \
"SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' ENGINE=InnoDB;') \
FROM information_schema.TABLES \
WHERE TABLE_SCHEMA = 'your_database_name' AND ENGINE = 'MyISAM';" \
| grep ALTER | mysql -u your_db_user -p your_database_name
MySQL 8.x và MariaDB 10.x mặc định dùng InnoDB cho các cài đặt mới. Các cơ sở dữ liệu được tạo trước năm 2015 — hoặc được migrate từ hosting shared cũ — thường vẫn chạy hoàn toàn trên MyISAM.
Sau khi chuyển đổi, chạy wp db check thêm một lần nữa để xác nhận mọi thứ đã sạch.

