MySQL中怎么利用ibd文件恢復(fù)數(shù)據(jù),相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計、成都做網(wǎng)站、開化網(wǎng)絡(luò)推廣、小程序開發(fā)、開化網(wǎng)絡(luò)營銷、開化企業(yè)策劃、開化品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供開化建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
#創(chuàng)建表
CREATE TABLE `ibdtest` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fid` int(11) NOT NULL COMMENT '表b中的id',
`content` char(255) NOT NULL COMMENT '操作內(nèi)容,系統(tǒng)生成',
`mark` char(255) NOT NULL COMMENT '備注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
#添加數(shù)據(jù)
INSERT ibdtest (fid,content,mark) VALUES (1,'1','1'),(2,'2','2');
SELECT * FROM ibdtest;
關(guān)閉mysql將ibdtest.ibd copy出來,放到其他中來模擬災(zāi)難.
[root@localhost ~]#/opt/soft//bin/mysqladmin -p123456 shutdown
120130 18:31:50 mysqld_safe mysqld from pidfile /opt/soft/mysql/60137.localdomain.pid ended
[1]+ Done /opt/soft/mysql/bin/mysqld_safe--defaults-file=/opt/soft/mysql/config/my.cnf --user=mysql
[root@localhost ~]# cd /home/soft/mysql/data/test/
[root@localhost test]# ll
total 1296
-rw-rw----. 1 mysql mysql 8612 Jan 18 00:06 a.frm
-rw-rw----. 1 mysql mysql 98304 Jan 18 00:24 a.ibd
-rw-rw----. 1 mysql mysql 8624 Jan 30 08:34 area.frm
-rw-rw----. 1 mysql mysql 98304 Jan 30 08:36 area.ibd
-rw-rw----. 1 mysql mysql 8642 Jan 18 00:05 b.frm
-rw-rw----. 1 mysql mysql 98304 Jan 18 00:08 b.ibd
-rw-rw----. 1 mysql mysql 8693 Jan 30 18:27 ibdtest.frm
-rw-rw----. 1 mysql mysql 98304 Jan 30 18:28 ibdtest.ibd
-rw-rw----. 1 mysql mysql 8728 Jan 6 16:23 testa.frm
-rw-rw----. 1 mysql mysql 98304 Jan 10 04:10 testa.ibd
-rw-rw----. 1 mysql mysql 8693 Jan 30 14:30 testmc.frm
-rw-rw----. 1 mysql mysql 98304 Jan 30 14:30 testmc.ibd
-rw-rw----. 1 mysql mysql 8693 Jan 30 13:54 testme.frm
-rw-rw----. 1 mysql mysql 98304 Jan 30 13:55 testme.ibd
-rw-rw----. 1 mysql mysql 8693 Jan 30 14:40 testmm.frm
-rw-rw----. 1 mysql mysql 98304 Jan 30 14:45 testmm.ibd
-rw-rw----. 1 mysql mysql 8693 Jan 30 13:40 testmu.frm
-rw-rw----. 1 mysql mysql 98304 Jan 30 13:40 testmu.ibd
-rw-rw----. 1 mysql mysql 8693 Jan 30 11:08 testmv.frm
-rw-rw----. 1 mysql mysql 98304 Jan 30 11:10 testmv.ibd
-rw-rw----. 1 mysql mysql 8694 Jan 4 21:55 testuser.frm
-rw-rw----. 1 mysql mysql 98304 Jan 4 22:04 testuser.ibd
-rw-rw----. 1 mysql mysql 8644 Jan 14 21:55 user.frm
-rw-rw----. 1 mysql mysql 98304 Jan 14 21:55 user.ibd
[root@localhost test]# cp ibdtest.ibd /home/download/
[root@localhost test]# cd /home/download/
#vim打開ibd,使用16進(jìn)制查看
[root@localhost download]# vim -b ibdtest.ibd
:%!xxd
從下圖中能看到 此表在 當(dāng)前my中的id為0x10,即16.
此時,我們假設(shè)災(zāi)難發(fā)生,ibdata損壞…
只剩下了ibdtest.ibd文,我們跳轉(zhuǎn)到另一個mysql服務(wù)器上,用同樣的建表語句創(chuàng)建ibdtest表.
這時我們打開這個mysql服務(wù)器下的ibdtest.ibd看看:
這個表的id為0x16,即為22,那么,我們只需將原有的ibdtest.ibd表id修改為0x16即可.
退出保存的時候一定要記得使用:%!xxd -r
退出保存.
并將修改好的文件覆蓋掉新的ibdtest.ibd即可,
此mysql服務(wù)器會認(rèn)為該表損毀,無法打開,沒關(guān)系,修改innodb_force_recovery = 6,
重啟mysql服務(wù):
Select下,就知道數(shù)據(jù)是否恢復(fù)了沒有:
此時,無法執(zhí)行寫操作,應(yīng)盡快將數(shù)據(jù)dump出來,修改innodb_force_recovery = 0,重啟服務(wù),創(chuàng)建新表后,把數(shù)據(jù)倒回去就ok了.恢復(fù)數(shù)據(jù)就不演示了.
看完上述內(nèi)容,你們掌握MySQL中怎么利用ibd文件恢復(fù)數(shù)據(jù)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!