Tôi vô tình làm rơi tất cả các bàn. Tôi có thể khôi phục lại không? Tôi không có bản sao lưu.
Tôi vô tình làm rơi tất cả các bàn. Tôi có thể khôi phục lại không? Tôi không có bản sao lưu.
Câu trả lời:
Nếu bạn thực sự không có bản sao lưu thì tôi chắc chắn 99% bạn đã hết may mắn.
Nếu bạn có bất kỳ hình thức sao lưu nào, tuy nhiên đã cũ, thì bạn có bật đăng nhập nhị phân thông qua tùy chọn log-bin vào tệp cấu hình MySQL (my.ini) không? Nếu vậy họ có thể phục hồi kể từ lần sao lưu cuối cùng.
Cách xấu để bắt đầu một tuần anh chàng, xin lỗi.
Câu hỏi khá cũ, nhưng không có câu trả lời tích cực nào, vì vậy tôi sẽ thêm một câu hỏi.
Sau khi MySQL bỏ bảng, dữ liệu vẫn còn trên phương tiện một lúc. Vì vậy, bạn có thể lấy các bản ghi và xây dựng lại một bảng. Sau này tôi sẽ viết blog về nó, nhưng bây giờ hãy phác thảo nhanh.
Bạn sẽ cần phải có cấu trúc của bảng của mình (câu lệnh CREATE TABLE).
Nếu innodb_file_per_table BẬT thì bảng bị rơi nằm trên phân vùng đĩa. Dừng MySQL và gắn lại nó dưới dạng ASAP chỉ đọc. Nếu MySQL nằm trên một phân vùng gốc (đó không phải là ý tưởng tốt btw) thì hãy lấy một hình ảnh hoặc lấy đĩa ra và cắm vào một máy chủ khác. Dừng tất cả viết bằng những từ khác.
Nếu innodb_file_per_table TẮT thì chỉ cần dừng MySQL.
Sau đó tải xuống và biên dịch công cụ bỏ thả cho InnoDB từ https://github.com/twindb/undrop-for-innodb/ . Kiểm tra bài đăng " Biên dịch bộ công cụ phục hồi TwinDB " để biết chi tiết.
Sau đó phân tích phân vùng đĩa hoặc ibdata1 (tùy thuộc vào cài đặt innodb_file_per_table) với stream_parser:
./stream_parser -f /path/to/diskimage_or_ibdata1
Sau đó khôi phục từ điển InnoDB để biết trong đó index_id đã bỏ bảng.
Sau đó lấy cấu trúc bảng và tìm nạp các bản ghi
./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page
Nó sẽ xuất các bản ghi ra thiết bị xuất chuẩn và lệnh LOAD DATA để thiết bị xuất chuẩn.
Đây là những gì tôi đã làm. Trong thư mục mysql (đối với Ubuntu, đây là / var / lib / mysql, đối với Mac sử dụng Homebrew, đây là / usr / local / var / mysql), tôi đã tìm thấy một số tệp. Đầu tiên tôi sao chép thư mục myapp_development / chứa lược đồ cụ thể vào thư mục mysql cục bộ của tôi. Sau đó, tôi sao lưu ibdata1 cục bộ của mình và sao chép ibdata1 của máy chủ vào thư mục mysql. Giết chết mysqld. ( ps aux
để tìm ra PID, sau đó kill PID
). Khởi động lại mysql, nó bắt đầu trong chế độ phục hồi sự cố. Sau đó kích hoạt máy khách mysql cục bộ của tôi và tạo ra một bãi chứa đầy đủ các bảng tôi cần.
Và, 15.000 hàng đại diện cho nhiều tuần làm việc nhập siêu dữ liệu mà chúng tôi nghĩ đã biến mất vĩnh viễn, được lưu !!
Hy vọng điều này sẽ giúp được ai đó.
Rất ít bạn có thể làm điều không may, ngoài việc lấy đi một bài học rất giá trị về sự cần thiết của một kế hoạch dự phòng tốt.
Tùy thuộc vào loại bảng, bạn có thể tìm thấy một chuyên gia có thể ghép dữ liệu lại với nhau từ những gì nó để lại trên đĩa nhưng phân tích pháp y như vậy sẽ rất rất tốn kém (vì nó đòi hỏi các kỹ năng tương đối không phổ biến) và không được đảm bảo để thực sự hữu ích.
Nếu đây là bảng MyISAM, bạn chỉ cần hủy bỏ các tệp bảng trong / var / log / mysql hoặc bất cứ thư mục dữ liệu nào của bạn. Bạn có thể sử dụng tiện ích ext3grep cho điều đó chẳng hạn.
Bạn không thể "hoàn tác" a DROP TABLE
.
Bạn có thể xem và xem liệu MySQL có bật ghi nhật ký nhị phân hay không , có thể bạn có thể trích xuất một số dữ liệu từ đó.
Ngoài ra, bạn có thể quên MySQL và đang ở cùng một loại vấn đề "Tôi vô tình xóa một số tệp khỏi hệ thống tệp của mình". Có một số công cụ hiện có cố gắng khôi phục các tập tin, và cũng có những công ty làm điều đó trên cơ sở chuyên nghiệp.
Nếu bạn đã bật ghi nhật ký nhị phân thì bạn có thể tạo lại bảng trước nếu bạn có lược đồ. Hãy chắc chắn rằng bạn tạo lược đồ trong khi bạn tắt binlog. Hoặc bạn chỉ có thể bỏ qua cho phiên. Sau đó, bạn có thể phát lại các binlog cho đến khi câu lệnh cuối cùng được thả bảng.
Nếu không thì bạn có thể khôi phục bằng cách sử dụng một bản sao lưu dự phòng nếu bạn có bất kỳ. Nếu bạn có tệp csv thì bạn có thể tải phương thức lưu trữ dữ liệu để khôi phục dữ liệu. Nếu bạn đang khôi phục từ mysqldump thì bạn có thể xem xét khôi phục một bảng duy nhất từ tệp kết xuất thay vì khôi phục cơ sở dữ liệu đầy đủ. Nếu kích thước dữ liệu quá lớn thì bạn có thể xem xét tắt khóa trước khi tải, điều này sẽ làm tăng đáng kể quá trình khôi phục.
Trong tương lai, bạn có thể muốn có một nô lệ bị trì hoãn khoảng 10-24 giờ sau. Bạn có thể tạo nô lệ bị trì hoãn bằng cách sử dụng bộ công cụ percona (pt-Slave-delay)