Có hai điều bạn muốn xem xét
QUY TRÌNH SAU
Thực sự không có thay thế cho việc khôi phục. Đây chỉ là một phát lại của một mysqldump. Nếu bạn cần làm PITR , bạn có thể cần chạy mysqlbinlog với các binlog hiện hành và phát các sự kiện đến ngày và thời gian cần thiết.
Bạn nên thực hiện việc này định kỳ trong trường hợp đĩa có vị trí mysqldump bị hỏng hoặc nếu mysqldump chứa một chuỗi các ký tự trong BLOB khiến cho không thể khôi phục.
TÍCH HỢP SAU
Bạn sẽ có thể bắt đầu mysqld mà không gặp vấn đề gì. Khi bạn đã chạy mysqld, bạn cần kiểm tra khả năng sử dụng của từng bảng. Bạn có thể làm điều đó bằng cách chạy truy vấn này:
SELECT CONCAT('CHECK TABLE ',dbtb,';') FROM
(SELECT CONCAT(table_schema,'.',table_name) dbtb FROM
information_schema.tables WHERE table_schema NOT IN
('information_schema','performance_schema','mysql')) A;
Điều này sẽ tạo lệnh CHECK TABLE cho mọi bảng MyISAM, InnoDB, ARCHIVE và CSV để kiểm tra tính toàn vẹn của chúng. Bạn có thể xuất tập lệnh này thành tập lệnh và thực thi tập lệnh. Lệnh CHECK TABLE cũng có thể cho phép bạn kiểm tra tất cả các bảng dưới dạng một lệnh. Bạn có thể thay đổi truy vấn để thu thập tên bảng dưới dạng danh sách và dấu phụ được phân tách bằng dấu phẩy:
SELECT CONCAT('CHECK TABLE ',dbtblist,';') FROM
(SELECT GROUP_CONCAT(table_schema,'.',table_name) dbtblist FROM
information_schema.tables WHERE table_schema NOT IN
('information_schema','performance_schema','mysql')) A;
CẢNH BÁO: Các GROUP_CONCAT()
chức năng có một giới hạn mặc định là 1024 ký tự. Nếu bạn có số lượng bảng khiêm tốn, bạn sẽ không liệt kê tất cả các bảng và bảng cuối cùng được liệt kê sẽ bị cắt, gây ra lỗi. Bạn có thể mở đầu lệnh của bạn SET SESSION group_concat_max_len = 10000;
để tăng thời gian hoàn trả.
Đây là một mẫu từ MySQL 5.6.16 (Windows) trên máy tính xách tay của tôi:
mysql> SELECT CONCAT('CHECK TABLE ',dbtblist,';') FROM
-> (SELECT GROUP_CONCAT(table_schema,'.',table_name) dbtblist FROM
-> information_schema.tables WHERE table_schema NOT IN
-> ('information_schema','performance_schema','mysql')) A;
+----------------------------------------------------------------------------+
| CONCAT('CHECK TABLE ',dbtblist,';') |
+----------------------------------------------------------------------------+
| CHECK TABLE ayman.articles,ayman.topics,test.nuoji,test.prod,test.prodcat; |
+----------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql>
Sau đó, lưu trữ đầu ra đó vào một biến và thực hiện từ dòng lệnh. Lưu ý rằng chúng tôi đã tạm thời tăng group_concat_max_len
trước khi chạy lệnh.
MYSQL_USER=root
MYSQL_PASS=rootpass
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SET SESSION group_concat_max_len = 1048576;"
SQL="${SQL} SELECT CONCAT('CHECK TABLE ',dbtblist,';') FROM"
SQL="${SQL} (SELECT GROUP_CONCAT(table_schema,'.',table_name) dbtblist FROM"
SQL="${SQL} information_schema.tables WHERE table_schema NOT IN"
SQL="${SQL} ('information_schema','performance_schema','mysql')) A"
mysql ${MYSQL_CONN} -ANe"${SQL}" | mysql ${MYSQL_CONN}
Hãy thử một lần !!!
SET SESSION group_concat_max_len = 10000;
trước lệnh.