frm和 ibd恢復資料

2022-08-27 07:09:12 字數 3691 閱讀 7488

昨日晚上開發告訴我不小心truncate兩個表的資料,要求還原。結果在阿里雲上找到了備份內容,結果是物理備份檔案.frm、.ibd。心中一萬個草泥馬啊。。沒辦法,開始還原吧。

1、檢視測試機mysql配置檔案位置

[root@localhost mysql]# which

mysqld

/usr/sbin/mysqld

[root@localhost mysql]# /usr/sbin/mysqld --verbose --help|grep -a 1

'default options

'default options are read from the following files

inthe given order:

/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

可以看到mysql首先呼叫的是/etc/my.cnf。檢視該檔案

[root@localhost mysql]#

cat /etc/my.cnf##

the percona server 5.7 configuration file.##

#* important: additional settings that can override those from this file!

#the files must end with '.cnf', otherwise they'll be ignored.##

included below.

#!includedir /etc/my.cnf.d/!includedir /etc/percona-server.conf.d/

發現載入的是/etc/my.cnf.d/和/etc/percona-server.conf.d/目錄,/etc/my.cnf.d/為空,/etc/percona-server.conf.d/有兩個檔案。

終於找到了配置檔案/etc/percona-server.conf.d/mysqld.cnf。

2、進入測試機mysql,建立乙個表(表名需要與恢復的表名一致,表結構一致)

create

table

`goms_hangar` (

`hangar_id`

int(11) unsigned not

null

auto_increment,

`airport_iata`

char(3) not

null

default

'kmg

' comment '

所屬機場',

`hangar_category`

varchar(16) not

null

default

'' comment '

所屬機庫分類',

`hangar_num`

varchar(16) not

null

default

'' comment '

機庫具體編號',

`arr_fid`

char(32) not

null

default

'' comment '

進港航班',

`aircraft_num`

varchar(16) not

null

default

'' comment '

飛機編號',

`from_parking_num`

varchar(8) not

null

default

'' comment '

原機位'

, `in_time`

int(11) unsigned not

null comment '

進庫時間',

`go_parking_num`

varchar(8) not

null

default

'' comment '

出庫機位',

`out_time`

int(11) unsigned not

null comment '

出庫時間',

`uid`

int(11) unsigned not

null comment '

操作人'

, `is_exists`

tinyint(1) unsigned not

null

default'1

' comment '

是否還存在',

`update_time`

int(11) unsigned not

null

, `create_time`

int(11) not

null comment '

資料建立時間',

primary

key(`hangar_id`),

key`idex_h_category` (`hangar_category`),

key`idx_h_num` (`hangar_num`)

) engine

=innodb default charset=utf8;

3、

alter

table goms_hangar discard tablespace;

4、將備份的.ibd拷貝到datadir目錄下,記得更改許可權

[root@localhost hello]#

cp ~/source/goms_hangar.ibd .

[root@localhost hello]#

chown -r mysql:mysql .

5、在mysql資料庫中輸入

mysql>

alter

table goms_hangar import tablespace;

完成恢復。

6、檢視效果

mysql>

select

count(*) from

goms_hangar;+--

--------+

|count(*) |+--

--------+

|341|+

----------+

1 row in

set (0.09 sec)

附:alter table table_name discard tablespace;

與alter table goms_hangar import tablespace;

alter table tbl_name discard tablespace;會將當前.ibd檔案刪除掉

alter table tbl_name import tablespace;會將檔案內容匯入到表空間中

注:如果在alter table tbl_name import tablespace;報如下錯誤

則需要在建立表的時候指定表的行格式。即加上row_format=compact

mysql由 frm和 ibd恢復資料

資料小常識 frm存放資料庫的表結構 ibd存放資料內容 1 建立資料庫 2 建立需要恢復的表 這樣就會在對應的資料庫下產生.frm和.ibd檔案 跳坑 建立表時候的字段和需要被恢復的表的一致 3 執行 alter table 表名字 discard tablespace 比如 alter tabl...

通過frm和ibd恢復資料庫

新建空的資料庫,匯入上述表結構 刪除對應的表空間,將表對應的ibd檔案複製到資料目錄下 重新插入表空間 mysql 備份var目錄,初始化資料庫mysqld initialize insecure通過mysqlfrm可以從frm中獲取表結構 新建空的資料庫,匯入上述表結構 刪除對應的表空間,將表對應...

伺服器掛掉,通過 IBD檔案恢復資料

開發中使用某伺服器廠商導致資料庫還原不了,使用ibd檔案恢復資料折騰了一天。分享出來 mysql innodb file per table 1 設定日誌方便除錯 log error f jspstudy mysql error.log 到目錄下開啟命令列 tail f error.log set ...