通過.frm表結構和.ibd文件恢復數據


整個恢復過程其實可以總結為下面幾步:

(1):恢復表結構

(2):復制出來創建表的sql語句

(3):恢復表數據(在恢復表數據的時候,首先需要解除當前創建的表與默認生成的.ibd文件間的關系,接着將要恢復數據表的.ibd文件與當前創建的表聯系起來即可)

1.通過官網下載mysql-utilities-1.6.5.tar.gz(https://downloads.mysql.com/archives/utilities/)

#tar xzvf mysql-utilities-1.6.5.tar.gz 

#. cd mysql-utilities-1.6.5

#python setup.py install

[root@node01 soft]# cd /data/mysql/mysql3306/
[root@node01 mysql3306]# ll
total 24
drwxr-xr-x 7 mysql mysql 4096 Sep 22 17:05 data
drwxr-xr-x 2 mysql mysql 4096 Sep 22 17:05 logs
-rw-r--r-- 1 mysql mysql 3080 Sep 12 13:09 my3306.cnf
-rw-r--r-- 1 mysql mysql 9890 Jul 20 10:52 my3306.cnf.bak
drwxr-xr-x 2 mysql mysql 6 Sep 22 17:05 tmp
[root@node01 mysql3306]# cd data/
[root@node01 data]# mysqlf
mysqlfailover mysqlfrm
[root@node01 data]# mysqlfrm --diagnostic qq/
db.opt sbtest.frm sbtest.ibd
[root@node01 data]# mysqlfrm --diagnostic qq/sbtest.frm
# WARNING: Cannot generate character set or collation names without the --server option.
# CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.
# Reading .frm file for qq/sbtest.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:

CREATE TABLE `qq`.`sbtest` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`k` int(10) unsigned NOT NULL,
`c` char(360) NOT NULL,
`pad` char(180) NOT NULL,
PRIMARY KEY `PRIMARY` (`id`),
KEY `k` (`k`)
) ENGINE=InnoDB;

#...done.

mysqlfrm 是一個恢復性質的工具,用來讀取.frm文件並從該文件中找到表定義數據生成CREATE語句。在大多數情況下,生成的CREATE語句用於在另一個服務器上創建表或進行診斷等。然而,有些功能是不保存在.frm文件中的,因此這些功能將被忽略的。如:

  • 外鍵約束
  • 自增長序列

mysqlfrm 有兩種操作模式。默認的模式是再生個實例,使用--basedir選項或指定--server選項來連接到已經安裝的實例。這種過程不會改變原始的.frm文件。該模式也需要指定--port選項來給再生的實例使用,該端口不能與現有的實例沖突。在讀取.frm文件后,再生的實例將被關閉,所有的臨時文件將被刪除的。

另一個模式是診斷模式,需要指定 --diagnostic 選項。byte-by-byte讀取.frm文件 盡可能多的恢復信息。該模式有更多的局限性,不能校驗字符集。

當使用默認模式無法讀取文件或者該服務器上沒有安裝MySQL實例就使用診斷模式。

需要指定.frm文件的路徑,也可以指定一個目錄,該目錄下的所有.frm文件將被讀取。

可以指定數據庫名稱用來產生CREATE語句,格式如下:database_name:table_name.frm,如:oltp:t1.frm。可選的數據庫名稱也可以使用路徑,如 /home/me/oltp:t1.frm,將使用oltp作為數據庫名。如果省略了數據庫名稱和路徑,最后的一個文件夾將作為數據庫名稱的。如 /home/me/data1/t1.frm,data1將作為數據庫名。如果不想最后的文件夾作為數據庫名,只需指定冒號,如 /home/me/data1/:t1.frm,在這種情況下,CREATE語句將忽略數據庫。

選項

 

 

 注意

1. 某些引擎表在默認模式下不可讀取的。如PARTITION, PERFORMANCE_SCHEMA,必需在診斷模式下可讀。

2. 要在創建語句中改變存儲引擎,可使用--new-storage-engine 選項。如果有指定該選項,同時必須指定--frmdir選項,該工具生成新的.frm文件,前綴為new_,並保存在--frmdir目錄下。

3. 關掉所有信息除了CREATE 語句和警告或錯誤信息,使用--quiet選項。

4. 使用--show-stats 選項統計每個.frm文件信息。

5. 使用--user 選項指定再生的實例以哪個權限運行。

6. 如果再生的實例超過10秒啟動,需調大--start-timeout 選項參數。

實例

 

看看執行過程反過頭去看看上面所說是否正確。

/data/mydata3306/ttlsa_com/data.frm 數據庫名為ttlsa_com;

/data/mydata3306/mysql/bbs_ttlsa_com:user.frm 數據庫名為bbs_ttlsa_com。

診斷模式讀取目錄中的所有的FRM文件:

 

 

權限

權限取決於如何使用mysqlfrm。統一用root賬號就好了。

如果要連接服務器,需要對mysql數據庫讀權限。

具體詳細可以參考:http://www.ttlsa.com/mysql/mysql-utilities-mysqlfrm/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM