昨日晚上開發告訴我不小心truncate兩個表的資料,要求還原。結果在阿里雲上找到了備份內容,結果是物理備份檔案.frm、.ibd。心中一萬個草泥馬啊。。沒辦法,開始還原吧。
1、檢視測試機mysql配置檔案位置
[root@localhost mysql]# which可以看到mysql首先呼叫的是/etc/my.cnf。檢視該檔案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
[root@localhost mysql]#發現載入的是/etc/my.cnf.d/和/etc/percona-server.conf.d/目錄,/etc/my.cnf.d/為空,/etc/percona-server.conf.d/有兩個檔案。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/percona-server.conf.d/mysqld.cnf。
2、進入測試機mysql,建立乙個表(表名需要與恢復的表名一致,表結構一致)
create3、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;
alter4、將備份的.ibd拷貝到datadir目錄下,記得更改許可權table goms_hangar discard tablespace;
[root@localhost hello]#5、在mysql資料庫中輸入cp ~/source/goms_hangar.ibd .
[root@localhost hello]#
chown -r mysql:mysql .
mysql>完成恢復。alter
table goms_hangar import tablespace;
6、檢視效果
mysql>附:alter table table_name discard tablespace;select
count(*) from
goms_hangar;+--
--------+
|count(*) |+--
--------+
|341|+
----------+
1 row in
set (0.09 sec)
與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 ...