Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Khôi phục cấu trúc bảng từ các tệp frm và ibd

Tôi chỉ khôi phục bảng từ .frm.idb tệp.

Nhận truy vấn SQL để tạo bảng

Nếu bạn đã biết lược đồ các bảng của mình, bạn có thể bỏ qua bước này.

  1. Trước tiên, hãy cài đặt MySQL Utilities .Sau đó, bạn có thể sử dụng mysqlfrm lệnh trong dấu nhắc lệnh (cmd).

  2. Thứ hai, lấy các truy vấn SQL từ .frm các tệp sử dụng mysqlfrm lệnh:

    mysqlfrm --diagnostic <path>/example_table.frm
    

Sau đó, bạn có thể nhận được truy vấn SQL để tạo bảng có cấu trúc giống như thế này:

CREATE TABLE `example_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(150) NOT NULL,
  `photo_url` varchar(150) NOT NULL,
  `password` varchar(600) NOT NULL,
  `active` smallint(6) NOT NULL,
  `plan` int(11) NOT NULL,
PRIMARY KEY `PRIMARY` (`id`)
) ENGINE=InnoDB;

Tạo bảng

Tạo (các) bảng bằng cách sử dụng truy vấn SQL ở trên.

Nếu dữ liệu cũ vẫn tồn tại, trước tiên bạn có thể phải loại bỏ cơ sở dữ liệu và bảng tương ứng. Đảm bảo rằng bạn có bản sao lưu các tệp dữ liệu.

Khôi phục dữ liệu

Chạy truy vấn này để xóa dữ liệu bảng mới:

ALTER TABLE example_table DISCARD TABLESPACE;

Thao tác này sẽ xóa các kết nối giữa .frm mới và (mới, trống) .idb tập tin. Ngoài ra, hãy xóa .idb tệp trong thư mục.

Sau đó, đặt .idb cũ tập tin vào thư mục mới, ví dụ:

cp backup/example_table.ibd <path>/example_table.idb

Đảm bảo rằng .ibd các tệp có thể được đọc bởi mysql người dùng, ví dụ:bằng cách chạy chown -R mysql:mysql *.ibd trong thư mục.

Chạy truy vấn này để nhập dữ liệu cũ:

ALTER TABLE example_table IMPORT TABLESPACE;

Thao tác này nhập dữ liệu từ .idb và sẽ khôi phục dữ liệu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng ORDER BY và GROUP BY cùng nhau

  2. Chỉ trả lại hàng nếu giá trị không tồn tại

  3. Cách thay đổi kích thước cột trong MySQL

  4. Bạn có thể sử dụng bí danh trong mệnh đề WHERE trong mysql không?

  5. Làm cách nào để truyền DATETIME thành DATE trong mysql?