簡體   English   中英

從.frm文件(沒有.myd和.myi,ibdada,my.ini)恢復MySQL InnoDB數據/結構

[英]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文件中恢復結構,請執行以下操作:

  1. 在數據庫測試中創建偽表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 
  2. 停止MySQL

  3. 將/var/lib/mysql/test/actor.frm替換為actor.frm文件:

     cp /path/to/my/actor.frm `mysql -NBe"select @@datadir"`/test 
  4. 使用innodb_force_recovery = 6啟動MySQL

     # cat /etc/my.cnf ... [mysqld] innodb_force_recovery=6 

    在Windows上,將[innodb_force_recovery = 6]放在[mysqld]組下的my.ini文件中。

  5. 啟動MySQL

  6. 閱讀表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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM