[英]Recover MySQL InnoDB data/structure from .frm (no .myd and .myi, ibdada, my.ini) files
我試圖從復制自innodb定義表的文件夾中恢復舊的innodb數據庫。 當前沒有二進制日志文件和my.ini文件。 我手頭沒有ibdata日志文件。 我只需要能夠重新讀取表信息,以便可以重新制作那些丟失的表。
我還將失去外鍵關系。
我如何恢復此類表的結構,這些表的數據進入該不可用的日志文件?
當我嘗試訪問此類表時,一些有用的錯誤消息是:
1. Can't find file: 'college_users' (errno: 2 - No such file or directory)
2. Table 'college.college_batches' doesn't exist
有一個名為dbsake
的程序,它有一個名為frmdump
的命令。
解碼MySQL .frm文件並輸出CREATE VIEW或CREATE TABLE語句。
該命令不需要MySQL服務器,並根據類似於MySQL服務器的規則解釋.frm文件。
有關此命令如何工作的更多信息,請參見.frm格式的說明。
例:
$ dbsake frmdump --type-codes /var/lib/mysql/mysql/plugin.frm
--
-- Table structure for table `plugin`
-- Created with MySQL Version 5.5.35
--
CREATE TABLE `plugin` (
`name` varchar(64) NOT NULL DEFAULT '' /* MYSQL_TYPE_VARCHAR */,
`dl` varchar(128) NOT NULL DEFAULT '' /* MYSQL_TYPE_VARCHAR */,
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL plugins';
更多詳細信息: https : //dbsake.readthedocs.io/en/latest/commands/frmdump.html
更新:從那時起,我啟動了在線工具以從.frm文件中恢復結構。 https://recovery.twindb.com/
要從actor.frm文件中恢復結構,請執行以下操作:
在數據庫測試中創建偽表actor(請注意5.6假表中的字段數與原始表必須匹配):
mysql> use test Database changed mysql> create table actor(id int); Query OK, 0 rows affected (0.01 sec)
對於5.6,create語句將是create table actor(id1 int, id2 int, id3 int, id4 int);
。 您如何知道表中的實際字段號。 檢查錯誤日志中的以下行:
2014-06-20 03:09:20 3741 [Warning] InnoDB: table test/actor contains 1 user defined columns in InnoDB, but 4 columns in MySQL. Please check INFORMATION_SCHEMA.INNODB_SYS_COLUMNS and http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how to resolve it
停止MySQL
將/var/lib/mysql/test/actor.frm替換為actor.frm文件:
cp /path/to/my/actor.frm `mysql -NBe"select @@datadir"`/test
使用innodb_force_recovery = 6啟動MySQL
# cat /etc/my.cnf ... [mysqld] innodb_force_recovery=6
在Windows上,將[innodb_force_recovery = 6]放在[mysqld]組下的my.ini文件中。
啟動MySQL
閱讀表actor的結構:
mysql> show create table actor\\G *************************** 1. row *************************** Table: actor Create Table: CREATE TABLE `actor` ( `actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `first_name` varchar(45) NOT NULL, `last_name` varchar(45) NOT NULL, `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`actor_id`), KEY `idx_actor_last_name` (`last_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.