NỘI DUNG
Nguyên nhân
Lỗi này xảy ra do bảng global_priv trong cơ sở dữ liệu hệ thống mysql của MariaDB bị hỏng. Đây là bảng lưu trữ thông tin quyền truy cập (privileges) của các user trong MariaDB. Khi bảng này bị hỏng, MariaDB sẽ không thể khởi động được.
Thông báo lỗi
Dưới đây là thông báo lỗi thường gặp:
2024-12-23 14:30:09 0 [ERROR] mysqld: Table './mysql/global_priv' is marked as crashed and last (automatic?) repair failed
2024-12-23 14:30:09 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table './mysql/global_priv' is marked as crashed and last (automatic?) repair failed
2024-12-23 14:30:09 0 [ERROR] Aborting
Cách khắc phục
Dưới đây là các bước khắc phục lỗi một cách chi tiết:
Bước 1: Kết nối vào server qua SSH
Sử dụng công cụ SSH như PuTTY (Windows) hoặc terminal (Linux/macOS) để kết nối vào máy chủ.
Bước 2: Cấu hình MariaDB để bỏ qua kiểm tra quyền
Thêm tùy chọn skip-grant-tables vào file cấu hình MariaDB. Mục đích sẽ bỏ qua các table lỗi khi khởi động.
- CentOS/RHEL:
Mở file /etc/my.cnf:
vi /etc/my.cnf
- Debian/Ubuntu:
Mở file /etc/mysql/my.cnf:
vi /etc/mysql/my.cnf
Thêm dòng sau vào phần [mysqld]:
[mysqld]
skip-grant-tables
Bước 3: Khởi động lại MariaDB
Khởi động lại dịch vụ MariaDB:
systemctl restart mariadb
Lưu ý: Việc khởi động này mục đích để có thể truy cập vào MariaDB để sửa table trên
Bước 4: Đăng nhập vào MariaDB
Khi tùy chọn skip-grant-tables được kích hoạt, bạn có thể đăng nhập vào MariaDB mà không cần mật khẩu:
mysql
Bước 5: Sửa lỗi bảng bị hỏng
Sau khi đăng nhập thành công, chuyển sang cơ sở dữ liệu hệ thống mysql:
USE mysql;
Chạy lệnh sửa bảng global_priv:
REPAIR TABLE global_priv;
Kết quả sẽ hiển thị như sau nếu sửa lỗi thành công:
+-------------------+--------+----------+----------------------------------------+
| Table | Op | Msg_type | Msg_text |
+-------------------+--------+----------+----------------------------------------+
| mysql.global_priv | repair | warning | Number of rows changed from 195 to 102 |
| mysql.global_priv | repair | status | OK |
+-------------------+--------+----------+----------------------------------------+
2 rows in set (0.009 sec)
Bước 6: Xóa cấu hình skip-grant-tables
Quay lại Bước 2. Bạn mở file my.cnf
và xoá đi đoạn skip-grant-tables
đã thêm và khởi động lại dịch vụ
Bước 7: Khởi động lại MariaDB
Khởi động lại dịch vụ MariaDB để áp dụng thay đổi:
systemctl restart mariadb
Sau khi khởi động xong, dịch vụ đã hoạt động trở lại.
Lưu ý:
Dữ liệu là tài sản quan trọng nhất. Bạn nên thường xuyên sao lưu để tránh những rủi ro không đáng có nhé.