Làm cách nào để khôi phục một bảng cụ thể trong mysql?

Chơi với dữ liệu trong cơ sở dữ liệu đôi khi rất phức tạp nhưng khi bạn bắt tay vào việc thì đó chỉ là một vài dòng trên dòng lệnh. Cách đây một thời gian, chúng tôi đã chuyển từ Piwik PRO sang Matomo và tất nhiên chúng tôi muốn di chuyển nhật ký. Chúng tôi không thể chỉ sử dụng kết xuất cơ sở dữ liệu MySQL/MariaDB đầy đủ và đi kèm với nó dưới dạng tên bảng và lược đồ thì khác [Piwik PRO 3. 1. 1. -> Matomo 3. 5. 1]. Nói tóm lại, chúng tôi cần xuất một vài bảng và đổi tên chúng để khớp với phiên bản mới tương tự như đã thảo luận trong Stack Overflow

Có một plugin VisitExport dành cho Piwik/Matomo cho phép bạn xuất và nhập các bảng nhật ký bằng các tệp PHP và JSON nhưng có vẻ như đó không phải là cách tiếp cận khả dụng cho trường hợp sử dụng của chúng tôi với các bảng có kích thước 500 MB hoặc hơn

Giải pháp thiết thực hơn là chỉ cần tạo một kết xuất các bảng mà chúng tôi muốn khôi phục riêng

Câu hỏi. Làm cách nào để khôi phục một bảng cụ thể từ tệp kết xuất dự phòng chứa tất cả các cơ sở dữ liệu và bảng?

Đôi khi bạn có thể cần khôi phục các bảng cụ thể, nhưng bản sao lưu khả dụng duy nhất chứa tất cả cơ sở dữ liệu. Khôi phục mọi thứ từ bản sao lưu có thể không phải là một tùy chọn. Thay vào đó, bạn sẽ cần khả năng chỉ khôi phục các cơ sở dữ liệu hoặc bảng cụ thể. Các thủ tục sau đây có thể được sử dụng để lọc bản sao lưu một cách hiệu quả khi nó được áp dụng

1. Bước đầu tiên là tạo một tài khoản người dùng mới, đặc biệt để khôi phục bản sao lưu. Điều này có thể được thực hiện với câu lệnh CREATE USER như vậy

CREATE USER 'restorative_user'@'localhost'
IDENTIFIED BY 'its_password';

Trong ví dụ này, chúng tôi đã tạo một người dùng có tên là restorative_user. Ở đây, tên nào cũng được. Bạn sẽ thay thế its_password bằng bất kỳ mật khẩu nào bạn muốn sử dụng

2. Khi điều này được thực hiện, chúng tôi cần cung cấp cho tài khoản người dùng mới này các đặc quyền CHỌN trên tất cả các cơ sở dữ liệu và bảng. Điều này có thể được thực hiện với câu lệnh GRANT như thế này

GRANT SELECT ON *.*
TO 'restorative_user'@'localhost';

3. Tiếp theo, bạn sẽ cần cấp cho người dùng mới TẤT CẢ CÁC ĐẶC QUYỀN cho các cơ sở dữ liệu và bảng cần được khôi phục. Một lần nữa, điều này có thể được thực hiện với câu lệnh GRANT như hình bên dưới

GRANT ALL ON db1.table1
TO 'restorative_user'@'localhost';

GRANT ALL ON db2.*
TO 'restorative_user'@'localhost';

Trong ví dụ này, chúng tôi đã cấp đầy đủ đặc quyền cho người dùng restorative_user chỉ đối với bảng, bảng1 trong cơ sở dữ liệu, db1. Trong câu lệnh thứ hai ở đây, chúng ta đã cấp đầy đủ đặc quyền cho tất cả các bảng trong cơ sở dữ liệu db2. Nếu cơ sở dữ liệu db2 đầy đủ là tất cả những gì cần khôi phục [không có bảng cụ thể nào], thì chúng ta có thể sử dụng tùy chọn –one-database để lọc các câu lệnh mà không cần tạo tài khoản người dùng restorative_user

4. Bây giờ chúng tôi đã sẵn sàng khôi phục bản sao lưu bằng tài khoản người dùng mới. Chúng tôi sẽ làm điều này từ dòng lệnh như hình dưới đây

mysql -u restorative_user -pits_password --force < /path/backup.sql

Thực hiện các thao tác trên sẽ khiến toàn bộ bản sao lưu được phát lại. Tuy nhiên, chỉ những cơ sở dữ liệu và bảng mà người phục hồi có đặc quyền mới được khôi phục. Tùy chọn --force khiến bản sao lưu tiếp tục được khôi phục, ngay cả sau khi xảy ra lỗi. Trong trường hợp này, có thể xảy ra lỗi ủy quyền vì các câu lệnh dự phòng được lọc theo các đặc quyền được cấp cho người dùng

Đặc quyền CHỌN trên tất cả các cơ sở dữ liệu là rất quan trọng, vì nếu không, câu lệnh USE thay đổi cơ sở dữ liệu trong bản sao lưu do mysqldump tạo cho tất cả các cơ sở dữ liệu sẽ không thành công, nhưng các câu lệnh DROP và CREATE liên tiếp có thể thành công. Điều này có thể dẫn đến các bảng từ cơ sở dữ liệu này được khôi phục sang cơ sở dữ liệu khác. Hoặc tệ hơn, nếu tên bảng từ hai cơ sở dữ liệu giống hệt nhau, một trong các bảng có thể bị ghi đè bằng định nghĩa bảng và dữ liệu từ bảng kia

Chúng tôi có thể khôi phục một bảng trong SQL Server không?

Bạn có thể sử dụng lệnh STOPAT để khôi phục bảng từ bản sao lưu cơ sở dữ liệu SQL . Bây giờ, để chỉ khôi phục một bảng từ tệp sao lưu SQL Server, bạn cần sao chép dữ liệu từ bản sao lưu sang cơ sở dữ liệu đích.

Chúng tôi có thể khôi phục bảng bị mất trong MySQL không?

Mỗi lần chỉ có thể khôi phục một bàn bị rơi . Có một số hạn chế đối với loại dữ liệu có thể phục hồi từ bảng bị hủy. Không thể phục hồi. Không thể sử dụng tùy chọn DROPPED TABLE RECOVERY cho bảng tạm thời.

Làm cách nào tôi có thể khôi phục dữ liệu từ một bảng?

Để chỉ khôi phục các bảng/hàng cụ thể, cần thực hiện các bước sau. Khởi động ApexSQL Recover và chọn tùy chọn trích xuất Từ bản sao lưu cơ sở dữ liệu. Nhấp vào nút Thêm và chọn một bản sao lưu cơ sở dữ liệu và tất cả các bản sao lưu nhật ký giao dịch trước thời điểm xảy ra những thay đổi không mong muốn

Chủ Đề