Làm thế nào để hoàn tác Bảng DROP?


11

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:


12

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.


2
Có lẽ bởi vì bạn thiếu kinh nghiệm, tất cả chúng ta đều đã làm điều này, đôi khi vẫn làm (tự nhốt mình khỏi VCenter của chính tôi cách đây một tuần) - tất cả vấn đề là bạn học được từ đó nên bạn ít học có khả năng lặp lại.
Chopper3

Tôi có thể làm gì bây giờ?? Tôi không thể chỉ ngồi và chờ đợi !!!!

8
Nói với người quản lý của bạn
Chopper3

4
Nó không khắc phục được vấn đề, nhưng có lẽ một trong những nhà phát triển của bạn có một bản sao không quá xa so với bản sao tốt cuối cùng?
Tom O'Connor

3
Tom nêu lên một điểm rất hay: nếu các nhà phát triển của bạn có thói quen thường xuyên chụp ảnh dữ liệu trực tiếp cho mục đích thử nghiệm / phát triển thì bạn có thể gặp may và một trong số họ có một bản sao chưa được phát hiện gần đây để hạ cấp tình huống của bạn từ " hoàn thành thảm họa "chỉ" sự bất tiện lớn ".
David Spillett

7

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.


bạn đã cứu mạng tôi
Buddhi741

2

Đâ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 đó.


Đó là một nỗ lực tốt đẹp nhưng tôi chắc chắn sẽ không đặt quá nhiều hy vọng vào việc đây là một kỹ thuật đáng tin cậy. Tuy nhiên, +1 cho một số suy nghĩ sáng tạo.
John Gardeniers

Vâng, bạn đã đúng. Nó đã kết thúc chỉ hoạt động vì chúng tôi đã vô tình xóa tất cả các quyền từ người dùng mysql, vì vậy cơ sở dữ liệu hiển thị trống đối với người dùng đó.
Công tước

2

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.


Có lựa chọn nào khác?

1
Như FractalizeR gợi ý, nếu các bảng là các bảng MyISAM đơn giản thì bạn thể phục hồi các tệp được liên kết với chúng. Nếu bạn đang cố gắng thì bạn cần phải tắt máy chủ ngay bây giờ vì hệ thống hoạt động càng lâu thì càng có nhiều không gian được sử dụng bởi các tệp sẽ không thể phục hồi (hoặc làm cho các tệp không bị xóa có nội dung bị hỏng ). Làm thế nào để phục hồi phụ thuộc vào hệ thống tập tin được sử dụng. ntfsundelete.com là liên kết tìm kiếm hữu ích đầu tiên trong một tìm kiếm Google để phục hồi trên NTFS.
David Spillett

0

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.


ext3grep dành cho hệ thống tập tin ext3. Nếu bạn đang sử dụng Windows thì có khả năng bạn không sử dụng hệ thống tệp ext3 (rất có thể bạn đang sử dụng NTFS, mặc dù đó có thể là FAT32). Nếu bạn định thử khôi phục các tệp đã xóa, bạn cần tắt máy chủ càng sớm càng tốt, bất kể các dịch vụ khác đang chạy trên đó là gì, vì máy chủ càng hoạt động lâu thì càng có nhiều khả năng không phục hồi bạn cả
David Spillett

Nếu bạn có bản sao bóng được bật trên ổ lưu trữ các bảng MyISAM, bạn sẽ có cơ hội lấy lại chúng theo cách đó.
Catherine MacInnes

Để khôi phục tập tin cơ sở dữ liệu đã xóa, bạn có thể tìm kiếm google cho "ntfs undelete". Tôi không biết thư mục dữ liệu nằm ở đâu trên PC của bạn. Bạn cần kiểm tra my.ini của bạn để biết hoặc tìm kiếm các tệp có phần mở rộng MYD chẳng hạn.
Vladislav Rastrusny

0

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.


-1

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)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.