Đọc tập tin frm mysql

tôi muốn đọc. frm và. ibd trong mysql để hiểu cách công cụ cơ sở dữ liệu mysql lưu trữ dữ liệu trong tệp. Các tệp đó có định dạng nào, vì khi tôi mở các tệp đó, nó hiển thị các ký tự không phải con người có thể đọc được

Do một vài lý do nào đó, hệ thống của bạn bị quá tải, hết tài nguyên v. v dẫn tới MySQL bị sập, cụ thể trong bài viết này là MySQL sử dụng Engine InnoDB mặc định bị sập, dẫn tới các tệp lưu tablespace của hệ thống InnoDB cùng với một số dữ liệu đang chờ xử lý trong cơ sở dữ liệu bị hỏng, bạn không thể

Thông báo lỗi thường gặp khi khởi động MySQL trong trường hợp trên

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.

[ERROR] InnoDB: Corrupted page [page id: space=0, page number=0] of datafile '.\ibdata1' could not be found in the doublewrite buffer.

[ERROR] InnoDB: Plugin initialization aborted with error Data structure corruption.

[ERROR] Plugin 'InnoDB' init function returned error. 

[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

[ERROR] Failed to initialize plugins. 

[ERROR] Aborting

 

Đọc tập tin frm mysql

Bài viết sau sẽ hướng dẫn bạn cách xử lý và lấy lại dữ liệu trong trường hợp trên

Hướng dẫn

Sao lưu dữ liệu MySQL

Tiến hành sao chép dữ liệu MySQL vào thư mục /tmp

  • Cụ thể trong bài viết này sử dụng Centos 7 64bit, MySQL được cài đặt tại /var/lib/mysql

________số 8_______

Bắt đầu lại MySQL

  • Để bắt đầu lại mysql đã được, cần phải xóa các tệp chứa tablespace bị hỏng trước khi bắt đầu. Hệ thống sẽ tự động tạo lại các tệp này nếu nhận thấy trong thư mục cài đặt chưa có
  • Tiến hành truy cập vào thư mục cài đặt mysqlcài đặt tại /var/lib/mysql

cd /var/lib/mysql

Đọc tập tin frm mysql

  • Các tệp cần xóa trong trường hợp này là ibdata1, ib_logfile0, ib_logfile1, ib_logfile101
  • Actions to change this file name

Đọc tập tin frm mysql

 

  • Bắt đầu lại mysql

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.0

Đọc tập tin frm mysql

  • Đến bước này bạn đã có thể truy cập và sử dụng MySQL, tuy nhiên các Cơ sở dữ liệu cũ sẽ không thể truy xuất dữ liệu từ các bảng cũ

Đọc tập tin frm mysql

 

Cài đặt và sử dụng mysqlfrm để lấy lại bảng cấu trúc từ tệp frm

Cài đặt mysqlfrm

Thông thường đối với các bảng sử dụng InnoDB Engine, các bảng cấu trúc sẽ được lưu trong các tệp frm, dữ liệu được lưu trong các tệp idb. mysqlfrm sẽ tiến hành tạo ra giả lập 1 phiên bản MySQL mới và trích xuất câu lệnh SQL được sử dụng để tạo ra bảng này

Ví dụ trong trường hợp này, cần khôi phục các bảng trong cơ sở dữ liệu DB1. Các tệp frm và idb đã được lưu trong thư mục “/var/lib/mysql/DB1”

Đọc tập tin frm mysql

  • Tiến hành cài đặt mysqlfrm. mysqlfrm được cung cấp trong gói tiện ích mysql, bạn có thể cài đặt thông tin qua công cụ yum của Centos

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.1

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.2

  • Khi cài đặt xong câu lệnh mysqlfrm sẽ được thêm vào hệ thống

Đọc tập tin frm mysql

  • Trong một số trường hợp, khi cài đặt xong không sử dụng được mysqlfrm do bị lỗi như sau
Traceback (most recent call last):
  File "/bin/mysqlfrm", line 27, in 
    from mysql.utilities.common.tools import (check_python_version,
ImportError: No module named utilities.common.tools
  • Bạn có thể sử dụng câu lệnh sau để khắc phục lỗi này (viết trong 1 dòng)

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.3

Use mysqlfrm

  • Tiến hành chmod -R 777 thư mục mysql đã sao lưu tại /tmp

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.4

  • Tiến hành sử dụng mysqlfrm trên dữ liệu của cơ sở dữ liệu DB1 đã được sao lưu trong thư mục /tmp. Ví dụ để trích xuất câu lệnh SQL dùng để tạo bảng Trình phát của cơ sở dữ liệu 1, ta sử dụng câu lệnh sau (viết 1 dòng)

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.5

Đọc tập tin frm mysql

  • Hệ thống sẽ xuất ra cho bạn 1 đoạn truy vấn được sử dụng để tạo bảng Player trên. Trong ví dụ này là

TẠO BẢNG `Người chơi` (
`ID` int(10) chưa ký NOT NULL,
`PlayerName` varchar(32) ĐẶC ĐIỂM SET utf8 COLLATE utf8_bin NOT NULL,
`Tài khoản` varchar(80) NOT NULL,
`SaveTime` datetime DEFAULT NULL,
đốm màu `BaseInfo` KHÔNG NULL,
đốm màu `AsyncData`,
`BinData` mediumblob,
`Cấm` bigint(20) MẶC ĐỊNH '0',
`BanReason` varchar(128) DEFAULT NULL,
`Plat` int(11) MẶC ĐỊNH '0',
KHÓA CHÍNH (`ID`),
KEY `Tên người chơi` (`Tên người chơi`),
KEY `Tài khoản` (`Tài khoản`),
KEY `SaveTime` (`SaveTime`)
) ENGINE=InnoDB CHARSET MẶC ĐỊNH=utf8

Tạo lại bảng từ truy vấn được trích xuất

  • Tạo 1 Cơ sở dữ liệu mới dùng để khôi phục dữ liệu

TẠO CƠ SỞ DỮ LIỆU db_restore;

Đọc tập tin frm mysql

  • Tạo lại bảng sử dụng truy vấn được trích xuất từ ​​bước trước
  • Lưu ý. Cuối câu truy vấn mysql có dấu “;“

Đọc tập tin frm mysql

  • Thao tác xóa tablespace dược tạo ra cùng với bảng

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.6

Đọc tập tin frm mysql

  • Sao chép tệp idb của bảng này từ thư mục đã sao lưu vào thư mục của cơ sở dữ liệu cần khôi phục và phân quyền lại tệp này

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.7

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.8

[ERROR] InnoDB: Header page consists of zero bytes in datafile: .\ibdata1, Space ID:0, Flags: 0. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.htmlfor how to resolve the issue.9

Đọc tập tin frm mysql

  • Quay lại mysql, tiến trình import back tablespace of table được tạo trong bước trước

[ERROR] InnoDB: Corrupted page [page id: space=0, page number=0] of datafile '.\ibdata1' could not be found in the doublewrite buffer.0

Đọc tập tin frm mysql

  • Như vậy dữ liệu đã được phục hồi

Đọc tập tin frm mysql

  • Bạn tiếp tục thực hiện lại thao tác trên bảng khi hết bảng cần khôi phục

Như vậy sau bài viết này, bạn đã có thể thực hiện thao tác Khôi phục lại dữ liệu từ dababase MySQL sử dụng Engine InnoDB sau khi bị lỗi và làm hỏng các tệp chứa dữ liệu hoạt động của InnoDB