Khôi phục các bảng MySQL khi chỉ .frm tập tin và ibd có sẵn

Làm thế nào để giải quyết “MySQL Error #1146 -Bàn không tồn tại” gây ra bằng cách di chuyển các tập tin .IDB (InnoDB) trực tiếp giữa các thư mục (Tablespace).

logo_mysql

Vấn đề

Nhiều người trong số những vấn đề mà chúng tôi có những vấn đề chúng tôi tạo ra. Tôi đã chỉ cần thiết lập một trang web bằng cách sử dụng WordPress và suy nghĩ: Làm thế nào về nhìn thấy cách làm việc này trong PHP 7? Ok, như tôi WampServer sử dụng PHP 5.6, Vì vậy, tôi đã đến “Vui vẻ” ý tưởng để nâng cấp các WampServer 2.5 (Apache-2.4.9, MySQL-5.6.17, PHP 5.5.12) cho WampServer 3.0.6 (Apache 2.4.23, MySQL 5.7.14, 5.6.25 PHP và Php 7.0.10).

Tất nhiên, bắt đầu bởi backup, nhưng tôi trượt tuyệt vời được chọn không xuất SQL từ các trang web, Thay vào đó, chỉ cần thực hiện một bản sao của tập tin MySQL (MySQL/dữ liệu) và ứng dụng (www/trang web). Tôi đã tự tin nó sẽ làm việc, giống như những lần khác.

Sau khi cài đặt mới WampServer với PHP 7, Đặt các tập tin sao lưu và quay lại ứng dụng, chỉ khi tôi đã đi kiểm tra bằng trình duyệt, không hiển thị các trang web, Nhưng màn hình cài đặt WordPress như thể nó là một trang web mới. Đóng băng! Mở PHPMyAdmin và kiểm tra xem cơ sở dữ liệu là Ok và tôi thấy rằng, Mặc dù được liệt kê trong cơ sở dữ liệu, Khi bạn nhấp vào trên đầu bảng để xem dữ liệu các thông báo lỗi sau đây:

  MySQL Lỗi #1146 -Bảng <TABLE_NAME> doesn ' t tồn tại

Tôi đã tìm kiếm và tôi chỉ tìm thấy rằng bạn chỉ có thể sao chép hoặc di chuyển các tập tin trực tiếp vào một thư mục MySQL MySQL nếu file MyISAM loại, những người có phần mở rộng tệp frm. MYD. MYI. Tôi không biết chuyện gì xảy ra, nhưng cơ sở dữ liệu của tôi xuất hiện như InnoDB (.frm và idb). Thật không may, chỉ sau khi thực tế MySQL cảnh báo tài liệu:

  Bạn không thể di chuyển tự do .IBD tập tin giữa các cơ sở dữ liệu thư mục như bạn có thể với MyISAM Bàn tập tin. 
  Định nghĩa bảng lưu trữ trong tablespace InnoDB chia sẻ bao gồm tên cơ sở dữ liệu. 
  Giao dịch ID và đăng nhập số thứ tự lưu trữ trong các tập tin tablespace cũng khác nhau giữa các cơ sở dữ liệu.

Giải pháp

Cheguei một ver algumas soluções simples, Mas vou descrever aqui một única que realmente funcionou para mim, apesar de parecer bem mais complexa, encontrada đăng bài “Khôi phục các bảng(s) trong cơ sở dữ liệu MySQL khi frm hoặc ibd tệp có sẵn chỉ“.

Antes, porém, một título de conhecimento, Vale lembrar que em relação ao tipo InnoDB, MySQL cấu trúc bảo vệ của bạn trong các tập tin và dữ liệu trong ibd .frm.. Đủ lý thuyết, Hãy cắt theo đuổi!

Bước 1: Tái tạo cấu trúc của các tập tin .frm

Như đã nói, frm chứa cấu trúc bảng của bạn. Lần đầu tiên chúng ta cần phải lấy các cấu trúc này để sau đó đưa các dữ liệu. Bạn có thể làm điều này trong 3 phương pháp khác nhau được mô tả dưới đây, nhưng trước khi, Hãy để tôi cho bạn biết một cái gì đó về các “MySQL Tiện ích”.

MySQL Tiện ích | mysqlfrm

Nếu bạn không có ý định sử dụng phương pháp đầu tiên được đề xuất (Trực tuyến) Vì vậy, bạn cần sử dụng công cụ “mysqlfrm” cung cấp bởi các “MySQL Tiện ích“.

Công cụ này sẽ trích xuất các cấu trúc dữ liệu và tạo bảng tạo kịch bản SQL. Đối với điều này, Tải về “MySQL Tiện ích” (một cái gì đó như mysql-Tiện ích-1.6.4-winx64.msi) và cài đặt nó.

Mở giao diện điều khiển (Chỉ huy / Của các) và sử dụng lệnh CD để di chuyển thư mục cài đặt mặc định (một cái gì đó như C:\C:Program FilesMySQLMySQL Tiện ích 1.6\). Lưu ý rằng trong thư mục này có tập tin thực thi mysqlfrm.exe.

  ĐĨA CD "C:\C:Program FilesMySQLMySQL Utilities 1.6"

Chọn chỉ là một trong những phương pháp dưới đây để trích xuất các cấu trúc bảng của bạn chứa trong tập tin .frm:

1º Phương pháp | Trực tuyến

1. Đi đến trang web HTTPS://Recovery.twindb.com/;
2. Nhấp vào trình đơn “Khôi phục cấu trúc” và sau đó trong “frm file từ.“;
3. Nhấp vào nút “Trình duyệt…” và chọn tệp frm; và
4. Nhấp vào nút “Tải lên” và kịch bản sáng tạo bảng sẽ được hiển thị trên màn hình.

Nó có thể gửi nhiều file frm từng tạo ra một kịch bản duy nhất với tất cả các bảng. Chỉ cần để cho phép bạn tạo một zip với tất cả các .frm của nó trước khi “Trình duyệt/Upload”.

2º Phương pháp | Bằng cách sử dụng –chẩn đoán

/* Ví dụ chung chung */
   mysqlfrm-chẩn đoán "<đường dẫn, nguồn>/mytable.frm" > "<destination/Path/recovered_mytable.SQL>"
 
/* Ví dụ trong thực tế với các bảng wp_posts.frm của WordPress */
   mysqlfrm --chẩn đoán "C:\wampbinmysqlmysql5.6.17datameubancowp_posts.frm" > "C:\recovered_wp_posts.SQL"

3º Phương pháp | Bằng cách sử dụng –Máy chủ

/* Ví dụ chung chung */
  máy chủ mysqlfrm=gốc:mypassword@localhost-port=3311 "<đường dẫn, nguồn>/mytable.frm" > "<đường dẫn đích />/recovered_mytable.SQL"
 
/* Ví dụ trong thực tế với các bảng wp_posts.frm của WordPress */
  mysqlfrm --Máy chủ=gốc@localhost --Port=3307 ""(C):\wampbinMySQL\MySQL5.6.17\datameubancowp_posts.frm" > "(C):\recovered_wp_posts.SQL"

Không sử dụng cổng MySQL! Chọn bất kỳ khác có sẵn. Lưu ý rằng các lệnh chuyển hướng đầu ra vào một tập tin .SQL được lưu ở đường dẫn đã chỉ định (trong trường hợp, (C):).

Bước 2: Tái tạo bảng trong cơ sở dữ liệu của bạn

Trong cơ sở dữ liệu mới, tạo ra một bảng với kịch bản được tạo ra trong bước 1. Tôi cá nhân được cài đặt một phiên bản sạch của WampServer và sử dụng PHPMyAdmin (http://localhost/phpmyadmin /) để tạo cơ sở dữ liệu và nhập khẩu các kịch bản SQL đã tạo ở bước 1 (recovered_wp_posts.SQL). Kịch bản này sẽ tạo ra 2 các tập tin trong thư mục của bạn cơ sở dữ liệu MySQL:

  SUA_TABELA.frm SUA_TABELA.IDB

Trong trường hợp của tôi, Những tập tin được tạo ra trong (C):\wamp64binmysqlmysql5.7.14data<chỗ ngồi của tôi>. TRÌNH DUYỆT IE, Tìm kiếm các cài đặt MySQL của bạn và lưu ý rằng trong các thư mục Ngày Sẽ có cơ sở dữ liệu của bạn và hai tập tin được đề cập.

Bước 3: Loại bỏ các tập tin .IDB mới

Để loại bỏ các tập tin .IDB mới, chạy các lệnh SQL sau đây:

/* Ví dụ chung chung */
  Thay đổi bảng mytable HUỶ TABLESPACE;
 
/* Ví dụ trong thực tế với bàn wp_posts của WordPress */
  ALTER TABLE wp_posts HUỶ TABLESPACE;

Lệnh này loại bỏ sự liên kết giữa các bảng và tablespace (Trong trường hợp thể chất được lưu trữ các tập tin cơ sở dữ liệu), và loại bỏ các tập tin .IDB.

Bước 4: Sao chép các tập tin cũ .IDB

File .IDB gốc (trong đó chứa dữ liệu) cần phải được sao chép đến vị trí đã bị xóa trong bước .IDB 3. Sử dụng Ctrl + C và Ctrl + V hoặc giết chính mình bằng cách sử dụng dòng lệnh.

Bước 5: Kích hoạt lại bảng

Liên kết bị hỏng trong bước 3 cần phải được phục hồi với lệnh sau đây:

/* Ví dụ chung chung */
  Thay đổi bảng mytable nhập TABLESPACE;
 
/* Ví dụ trong thực tế với bàn wp_posts của WordPress */
  ALTER TABLE wp_posts nhập TABLESPACE;

Đừng lo lắng nếu bạn nhận được một số cảnh báo, porém, Nó có thể là sự cố chung xuất hiện lỗi sau:

  #1808 - Lược đồ mismatch (Bàn có ROW_TYPE_DYNAMIC hàng định dạng, .IBD file có định dạng hàng ROW_TYPE_COMPACT.)

Trong trường hợp này, Điều này xảy ra do khác với mysql 5.7.14 (MỚI) tạo ra một mặc định bảng so với Mysql-5.6.17 (CŨ), Nếu không có ROW_FORMAT = nhỏ gọn.

Vì vậy, Nếu bạn đang sử dụng MySQL > = mysql 5.7.14, Tất cả bạn cần làm là thêm ROW_FORMAT = nhỏ gọn trong định nghĩa của bảng sáng tạo.

  TẠO bảng 'wp_posts' (. . .) ĐỘNG CƠ=InnoDB ROW_FORMAT=Nhỏ gọn

Các lỗi khác

Chỉ cần để ghi lại, trước khi có được sự thành công trong trích xuất dữ liệu từ. frm, Tôi đã có một số lỗi:

  # Nguồn trên localhost: ... kết nối.
  # Bắt đầu từ hệ phục vụ spawned trên cổng 3304 ... LỖI cố gắng để ngăn chặn thất bại trong việc tạo ra máy chủ.  Quá trình id = 6648.
  LỖI: Đẻ trứng hoạt động hệ phục vụ đã thất bại. Lỗi máy chủ nhân bản: Không thể liên lạc với mới Ví dụ. Id quá trình = 6648.. Để chẩn đoán, chạy các tiện ích lại và sử dụng Các --verbosity tùy chọn để xem các thư của bạn từ các máy chủ spawned và sửa chữa bất kỳ lỗi trình bày sau đó chạy các tiện ích một lần nữa.
  THÀNH CÔNG: Quá trình với PID 6648 (trẻ em trình PID 7264) đã kết thúc.
Traceback (Đặt cuộc gọi cuối):
  Tập tin "G:\adebuildsb_0-19921351-1470074463.97Python-2.7.6-Windows-x86-64bitlibsite-packagescx_FreezeinitscriptsConsole.py", dòng 27,<Mô-đun>
  Tập tin "scripts\mysqlfrm.py", dòng 422,<Mô-đun>
  Tập tin ".\mysql\utilities\command\read_frm.py", dòng 439, trong read_frm_files
  Tập tin ".\mysql\utilities\command\read_frm.py", dòng 166, trong _spawn_server
  Tập tin ".\mysql\utilities\command\serverclone.py", dòng 180, trong clone_server
  Tập tin ".\mysql\utilities\common\tools.py", dòng 273, trong get_mysqld_version IOError: [Errno 13] Từ chối cho phép: 'version_check'

Trong trường hợp cụ thể của WordPress, bạn cần phải loại bỏ các kịch bản tạo SQL tạo ra dưới. frm, Tất cả mục mặc định ‘0000-00-00 00:00:00’, Nếu không, sẽ bắt các lỗi:

  #1067 - Giá trị mặc định (mặc định) không hợp lệ cho 'comment_date'

Đó là nó!

Phông chữ

http://www.voxteneo.com/restoring-tables-mysql-database-frm-ibd-files-available/

https://medium.com/@alexquick/transporting-mysql-tablespaces-from-5-6-to-5-7-517c01345fbb#.72zermd8b

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

https://lanmenezesbr.wordpress.com/2014/10/21/mysql-erro-1146-table-doesnt-exist/

http://stackoverflow.com/questions/7759170/mysql-table-doesnt-exist-but-it-does-or-it-should

Tổng lượt truy cập: 14813

10 Bình luận trên “Khôi phục các bảng MySQL khi chỉ .frm tập tin và ibd có sẵn

  1. Rodrigo cho biết:

    Làm gì khi bạn thấy thông báo lỗi sau đây: #1815 – Lỗi nội bộ. Không thể đặt lại LSNs trong bảng “chỗ ngồi của tôi”.”myTable”: Dữ liệu cấu trúc tham nhũng.
    Tôi có thể chạy các chèn dữ liệu theo cách thủ công? Làm thế nào để làm điều này?
    Kể từ khi đã cảm ơn bạn.

  2. Cristian U cho biết:

    Hi Taylor,

    Làm thế nào bạn đã giải quyết lỗi này:
    LỖI: Đẻ trứng hoạt động hệ phục vụ đã thất bại. Lỗi máy chủ nhân bản: Không thể liên lạc với trường hợp mới. Quá trình id = 6648.. Để chẩn đoán, chạy các tiện ích một lần nữa và sử dụng các –verbosity tùy chọn để xem các thư của bạn từ các máy chủ spawned và sửa chữa bất kỳ lỗi trình bày sau đó chạy các tiện ích một lần nữa.
    THÀNH CÔNG: Quá trình với PID 6648 (trẻ em trình PID 7264) đã kết thúc.

    Tôi tiếp tục nhận được tin nhắn tương tự và tôi don´t biết làm thế nào để giải quyết nó.

    Cảm ơn

Để lại câu trả lời

Các địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *