mysql異常恢復工具_[MySQL異常恢復]mysql ibd文件恢復

在mysql中由于某種原因保存有ibd文件,但是表已經被刪除或者frm文件損壞亦或者ibdata文件損壞/丟失等。本文模擬在這種情況下,通過mysql自身技術即可完成ibd文件恢復.

測試環境mysql版本

mysql> select version();

+-----------+

| version() |

+-----------+

| 5.6.25 |

+-----------+

1 row in set (0.00 sec)

mysql主要參數

mysql> show variables like 'innodb_file_per_table';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| innodb_file_per_table | ON |

+-----------------------+-------+

1 row in set (0.00 sec)

mysql> show variables like 'innodb_force_recovery';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| innodb_force_recovery | 0 |

+-----------------------+-------+

1 row in set (0.00 sec)

innodb_file_per_table這個參數為on才能夠實現每個表存儲單獨的ibd文件.innodb_force_recovery參數默認范圍0

測試表情況

mysql> use xifenfei;

Database changed

mysql> show tables;

+-----------------------------+

| Tables_in_xifenfei |

+-----------------------------+

| user_login |

+-----------------------------+

1 rows in set (0.00 sec)

mysql> select count(*) from user_login;

+----------+

| count(*) |

+----------+

| 48 |

+----------+

1 row in set (0.02 sec)

mysql> desc user_login;

+------------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+--------------+------+-----+---------+-------+

| ID | varchar(255) | NO | PRI | NULL | |

| ACCOUNT | varchar(255) | YES | | NULL | |

| LifeCycle | int(11) | YES | | NULL | |

| Name | varchar(255) | YES | | NULL | |

| Password | varchar(255) | YES | | NULL | |

| Role | varchar(255) | YES | | NULL | |

| UTime | varchar(255) | YES | | NULL | |

| UserID | varchar(255) | YES | | NULL | |

| UserName | varchar(255) | YES | | NULL | |

| UserStatus | int(11) | YES | | NULL | |

+------------+--------------+------+-----+---------+-------+

10 rows in set (0.05 sec)

mysql> select * from user_login limit 1;

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

| ID | ACCOUNT | LifeCycle | Name | Password

| Role | UTime | UserID

| UserName | UserStatus |

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

| 010d6c85a76c44cba80d07cbd8590bb2 | hyh | 0 | 胡元會 | 698d51a19

d8a121ce581499d7b701668 | |6| | 2016-08-30 06:04:32 | 0fe3bc4dd9654687a4b85065e

d5cfee8 | NULL | 1 |

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

1 row in set (0.00 sec)

mysql> show create table user_login \G;

*************************** 1. row *************

Table: user_login

Create Table: CREATE TABLE `user_login` (

`ID` varchar(255) NOT NULL,

`ACCOUNT` varchar(255) DEFAULT NULL,

`LifeCycle` int(11) DEFAULT NULL,

`Name` varchar(255) DEFAULT NULL,

`Password` varchar(255) DEFAULT NULL,

`Role` varchar(255) DEFAULT NULL,

`UTime` varchar(255) DEFAULT NULL,

`UserID` varchar(255) DEFAULT NULL,

`UserName` varchar(255) DEFAULT NULL,

`UserStatus` int(11) DEFAULT NULL,

PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

mysql> show variables like 'datadir';

+---------------+-----------------------------------------------+

| Variable_name | Value |

+---------------+-----------------------------------------------+

| datadir | D:\xifenfei\mysql-5.6.25-winx64\data\ |

+---------------+-----------------------------------------------+

1 row in set (0.00 sec)

備份ibd文件

C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

驅動器 D 中的卷沒有標簽。

卷的序列號是 4215-1F18

D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄

2016-12-02 20:07 98,304 user_login.ibd

1 個文件 98,304 字節

0 個目錄 78,789,591,040 可用字節

C:\Users\XIFENFEI>cp D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd d:/

C:\Users\XIFENFEI>dir d:\user_login.ibd

驅動器 D 中的卷沒有標簽。

卷的序列號是 4215-1F18

d:\ 的目錄

2016-12-25 23:15 98,304 user_login.ibd

1 個文件 98,304 字節

0 個目錄 78,789,591,040 可用字節

模擬刪除表(ibd文件也被刪除)

mysql> drop table xifenfei.user_login;

Query OK, 0 rows affected (0.03 sec)

C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

驅動器 D 中的卷沒有標簽。

卷的序列號是 4215-1F18

D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄

找不到文件

創建新表

mysql> CREATE TABLE `user_login` (

-> `ID` varchar(255) NOT NULL,

-> `ACCOUNT` varchar(255) DEFAULT NULL,

-> `LifeCycle` int(11) DEFAULT NULL,

-> `Name` varchar(255) DEFAULT NULL,

-> `Password` varchar(255) DEFAULT NULL,

-> `Role` varchar(255) DEFAULT NULL,

-> `UTime` varchar(255) DEFAULT NULL,

-> `UserID` varchar(255) DEFAULT NULL,

-> `UserName` varchar(255) DEFAULT NULL,

-> `UserStatus` int(11) DEFAULT NULL,

-> PRIMARY KEY (`ID`)

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.03 sec)

C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

驅動器 D 中的卷沒有標簽。

卷的序列號是 4215-1F18

D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄

2016-12-25 23:19 98,304 user_login.ibd

1 個文件 98,304 字節

0 個目錄 78,789,591,040 可用字節

mysql> select count(*) from xifenfei.user_login;

+----------+

| count(*) |

+----------+

| 0 |

+----------+

1 row in set (0.00 sec)

停掉mysql,替換user_login.ibd

C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

驅動器 D 中的卷沒有標簽。

卷的序列號是 4215-1F18

D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄

2016-12-25 23:22 98,304 user_login.ibd

1 個文件 98,304 字節

0 個目錄 78,787,141,632 可用字節

C:\Users\XIFENFEI>cp d:\user_login.ibd D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

C:\Users\XIFENFEI>dir D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei\user_login.ibd

驅動器 D 中的卷沒有標簽。

卷的序列號是 4215-1F18

D:\xifenfei\mysql-5.6.25-winx64\data\xifenfei 的目錄

2016-12-02 20:07 98,304 user_login.ibd

1 個文件 98,304 字節

0 個目錄 78,787,141,632 可用字節

啟動mysql 服務,查詢數據庫

mysql> select count(*) from xifenfei.user_login;

ERROR 2013 (HY000): Lost connection to MySQL server during query

mysql> exit

Bye

C:\Users\XIFENFEI>mysql -uroot

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

mysql 日志報錯

2016-12-25 23:31:07 11632 [Note] MySQL: ready for connections.

Version: '5.6.25' socket: '' port: 3306 MySQL Community Server (GPL)

InnoDB: Error: tablespace id is 56 in the data dictionary

InnoDB: but in file .\xifenfei\user_login.ibd it is 47!

2016-12-25 23:31:31 2eb8 InnoDB: Assertion failure in thread 11960 in file fil0fil.cc line 796

InnoDB: We intentionally generate a memory trap.

InnoDB: Submit a detailed bug report to http://bugs.mysql.com.

InnoDB: If you get repeated assertion failures or crashes, even

InnoDB: immediately after the mysqld startup, there may be

很明顯由于替換的ibd文件和現在數據庫記錄的ibd文件的page的字典信息不匹配,因為數據庫無法正常查詢該數據,而且mysql為了安全直接把實例給crash了.

恢復操作

mysql> show variables like 'innodb_force_recovery';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| innodb_force_recovery | 1 |

+-----------------------+-------+

1 row in set (0.00 sec)

mysql> alter table xifenfei.user_login discard tablespace;

Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> alter table xifenfei.user_login import tablespace;

Query OK, 0 rows affected, 1 warning (0.06 sec)

mysql> select count(*) from xifenfei.user_login;

+----------+

| count(*) |

+----------+

| 48 |

+----------+

1 row in set (0.00 sec)

mysql> select * from xifenfei.user_login limit 1;

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

| ID | ACCOUNT | LifeCycle | Name | Password

| Role | UTime | UserID

| UserName | UserStatus |

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

| 010d6c85a76c44cba80d07cbd8590bb2 | hyh | 0 | 胡元會 | 698d51a19

d8a121ce581499d7b701668 | |6| | 2016-08-30 06:04:32 | 0fe3bc4dd9654687a4b85065e

d5cfee8 | NULL | 1 |

+----------------------------------+---------+-----------+-----------+----------

------------------------+------+---------------------+--------------------------

--------+----------+------------+

1 row in set (0.00 sec)

通過mysql自帶的discard tablespace和import tablespace操作后,表數據已經可以完成查詢了.

mysql日志

2016-12-25 23:34:08 10464 [ERROR] InnoDB: Failed to find tablespace for table '"xifenfei"."user_login"' in the cache. Attempting to load the tablespace with space id 56.

2016-12-25 23:34:08 10464 [ERROR] InnoDB: In file '.\xifenfei\user_login.ibd', tablespace id and flags are 47 and 0, but in the InnoDB data dictionary they are 56 and 0. Have you moved InnoDB .ibd files around without using the commands DISCARD TABLESPACE and IMPORT TABLESPACE? Please refer to http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting-datadict.html for how to resolve the issue.

2016-12-25 23:34:08 10464 [ERROR] InnoDB: Could not find a valid tablespace file for 'xifenfei/user_login'. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting-datadict.html for how to resolve the issue.

2016-12-25 23:34:08 30e8 InnoDB: cannot calculate statistics for table "xifenfei"."user_login" because the .ibd file is missing. For help, please refer to http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html

2016-12-25 23:34:08 10464 [ERROR] InnoDB: Cannot delete tablespace 56 because it is not found in the tablespace memory cache.

2016-12-25 23:34:08 10464 [Warning] InnoDB: Cannot delete tablespace 56 in DISCARD TABLESPACE. Tablespace not found

2016-12-25 23:34:41 10464 [Note] InnoDB: Sync to disk

2016-12-25 23:34:41 10464 [Note] InnoDB: Sync to disk - done!

2016-12-25 23:34:41 10464 [Note] InnoDB: Phase I - Update all pages

2016-12-25 23:34:41 10464 [Note] InnoDB: Sync to disk

2016-12-25 23:34:41 10464 [Note] InnoDB: Sync to disk - done!

2016-12-25 23:34:41 10464 [Warning] InnoDB: Tablespace 'xifenfei/user_login' exists in the cache with id 47 != 56

2016-12-25 23:34:41 10464 [Warning] InnoDB: Freeing existing tablespace 'xifenfei/user_login' entry from the cache with id 56

2016-12-25 23:34:41 10464 [Note] InnoDB: Phase III - Flush changes to disk

2016-12-25 23:34:41 10464 [Note] InnoDB: Phase IV - Flush complete

mysql日志依舊報了page字典信息不匹配.但是數據已經可以訪問,通過mysqldump導出重新創建表即可.如果由于ibd損壞使用該方法無法恢復,請參考:MySQL drop database恢復(恢復方法同樣適用MySQL drop table,delete,truncate table)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533380.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ddl是什么意思網絡語_DDL(數據定義語言)

DDL,是對數據庫內部的對象進行創建,刪除,修改等的操作語言。它和DML語言最大的區別是DML只是對表內部數據的操作,而不涉及到表的定義,結構的修改,更不會涉及到其它對象。1.連接數據庫:注:1.mysql代表客戶端…

jsp mysql優點_asp、php、asp.net、jsp的介紹和各自的優缺點

現在主流的網站開發語言無外乎asp、php、asp.net、jsp等。主流網站開發語言之ASP:ASP是微軟(Microsoft)所開發的一種后臺,它的語法和Visual BASIC類似,可以像SSI(Server Side Include)那樣把后臺腳本代碼內嵌到HTML頁面中。雖然ASP簡單易用,但…

測試網絡的帶寬指令_單機千萬級MQTT服務器測試報告

目標:測試創建1000萬客戶端連接到Coolpy7 MQTT服務器端,服務器操作系統 Linux(任意一款發行版服務器版本)。分別在兩臺硬件一樣的服務器,其中一臺用于服務器端運行,另一臺用于創建千萬客戶端連接客戶端機器。在硬件一致的情況下請…

python郵箱爆破_Python在線爆破郵箱賬號密碼測試代碼(親測可用)

dic 字典格式如下(mail.txt) :usernamegmail.com:passwordusernamegmail.com:passwordusernamegmail.com:password以此類推,切記保存成utf-8編碼格式。放置在當前腳本目錄,也可自己定義修改。支持ssl https /imap協議。# version 3.4.0# codingUTF-8# ti…

查看redis aof內存_Redis持久化問題定位與優化技巧

今天主要分享繼Redis持久化方式RDB、AOF之后的一些常用的Redis問題定位于優化方式。這里主要CPU、內存、磁盤在三個維度去分析問題!Fork操作當Redis做RDB或AOF重寫時,一個必不可少的操作就是執行fork操作創建子進程,對于大多數操作系統來說fo…

mysql新增陣列df_DF學Mysql(三)——索引操作

概要:數據庫對象索引其實與書的目錄非常相似,主要是為了提高從表中檢索數據的速度。由于數據存儲在數據庫表中,所以索引是創建在數據庫表對象上的,由表中的一個字段或多個字段生成的鍵組成,這些鍵存儲在數據結構(B-樹或…

python本地瀏覽器注入js_PyQt5內嵌瀏覽器注入JavaScript腳本實現自動化操作的代碼實例...

概要應同學邀請,演示如何使用 PyQt5 內嵌瀏覽器瀏覽網頁,并注入 Javascript 腳本實現自動化操作。下面測試的是一個廉價機票預訂網站(http://www.flyscoot.com/),關鍵點如下使用 QWebEngineView 加載網頁,并顯示進度。在默認配置(…

python裝好了怎么啟動車_【填空題】Python安裝好后,可以直接在CMD命令行下輸入( )命令, 可啟動交互式編程,提示窗口如下:...

傾斜巖層的產狀要素是用巖層層面的()。A.傾角B.走向C.范圍D.傾向E.表面積采用深層攪拌法進行地基加固處理,其適用條件為()。A.砂礫石松軟地基B.松散砂地基C.黏土軟弱地基根據《建筑工程建筑面積計算規則》,下列關于建筑物雨篷結構的建筑面積計算&#xf…

windows設置mysql使用率_Windows下配置Mysql

這里說的配置Mysql,是在安裝時進行的,請先查看:Windows平臺下安裝Mysql緊接上文,安裝完成后將配置選項打上對勾,按下“Finish”,出現下面的界面,這里有一個很好的功能,mysql配置向導…

mysql 云無憂ps教程_華為云數據庫MySQL一鍵開通讀寫分離,無憂應對企業業務高峰情景...

業務大促,訂單暴增,網站流量暴漲幾倍,數據庫服務器容量又要扛不住了,眼睜睜看著生意白白溜走,再苦逼也無法解決,“腫”么辦?別擔心,一鍵開通讀寫分離,而且只需一個連接地…

mysql實體監聽器_GitHub - langjiangit/spring-boot-starter-mysql-binlog: mysql的binlog監聽器

mysql binlog監聽器前置操作1.查看mysql是否開啟binlogshow variables like log_bin;2.查看是否使用row格式的binlogshow variables like binlog_format;3.如果以上都不是請修改mysql的配置文件添加或者修改如下內容#配置binlog存放路徑log-binE://mysql//binlog//mysql-bin#bi…

python 基因序列提取_科學網—簡單的Python腳本提取對應位置基因序列(fasta文件) - 王彬忠的博文...

最近,用Python腳本提取,在基因號已知,位置已知條件下,相對應位置的基因序列時發現,這樣很簡單但是很實用的腳本,在網上卻比較難找。而且,能被找到的腳本,相對于具有初級編程能力的人…

python不能安裝在中文_無法在Python上安裝表

我一直收到錯誤Command "python setup.py egg_info" failed with error code 1 in C:\Users\HP\AppData\Local\Temp\pip-install-sv33cp8y\tables\當嘗試使用^{pr2}$我試過了pip install --upgrade setuptools還有很多其他的東西,但還是不能讓它發揮作用。…

python是強定義語言嗎_python是強類型語言嗎

強弱是對類型而言的。強類型,你有一個值之后這個值是什么類型是確定,比如n1,n的類型是確定的(字符串),因此你不能在Python做n3 mn1運算。而弱類型就不是這樣的,值的類型可以在需要的時候再去確定,比如PHP里…

mysql給字段添加描述_用sql 語句給字段添加描述

用sql 語句給字段添加描述IF not exists(SELECT * FROM ::fn_listextendedproperty (NULL, user, dbo, table, strTableName, column, strColumnName))BEGINexec sp_addextendedpropertyMS_Description, strColumnDesc , user, dbo, table,strTableName, column, strColumnName…

深入java核心_Java核心(五)深入理解BIO、NIO、AIO

導讀:本文你將獲取到:同/異步 阻/非阻塞的性能區別;BIO、NIO、AIO 的區別;理解和實現 NIO 操作 Socket 時的多路復用;同時掌握 IO 最底層最核心的操作技巧。BIO、NIO、AIO 的區別是什么?同/異步、阻/非阻塞…

java反射 獲取參數類型_Java反射帶參構造創建對象時如何自動轉換參數類型

需求是這樣的:有一個類,類的路徑知道,例如是com.xx.xx.xx其中有不同類型的成員變量(個數未知),有對應的setter和getter方法,有一個無參構造和一個全參構造。現在需要用反射機制...需求是這樣的:有一個類&am…

java的樂趣_分享java帶來的快樂

2013年9月17日#2011年7月18日#function reportError(sMessage, sUrl, sLine) {var str "";str " 錯誤信息:" sMessage "\n";str " 錯誤地址:" sUrl "\n";str " 錯誤行數:" sLine "\n";str &…

java arraylist底層實現原理_ArrayList和LinkedList底層原理

ArrayList和LinkedList都是List的實現類,是在日常開發中經常被使用到的兩個集合,我們來結合源碼看下兩個集合的不同之處。先來看下ArrayList的源碼:// 默認的初始化大小private static final int DEFAULT_CAPACITY 10;ArrayList的底層數數組…

java ee jaas_java-ee – Tomcat-Jaas – 如何檢索主題?

i knew that and it works, but I need to retrieve subject to get also roleprincipal不幸的是,它在Java EE中的工作方式不同. JAAS主題只是一個“主要包”,其中哪些代表用戶/調用者主體和/或角色主體根本不是標準化的.每個其他容器在這里做不同的事情. Javadoc for Tomcat’…