加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

MySQL如何利用ibd文件恢复数据?

发布时间:2021-01-18 12:36:15 所属栏目:站长百科 来源:网络整理
导读:《MySQL如何利用ibd文件恢复数据?》要点: 本文介绍了MySQL如何利用ibd文件恢复数据?,希望对您有用。如果有疑问,可以联系我们。 前言 数据库丢失之痛 磁盘坏道、断电等意外不是常态,但遇上了就足够你“惊心动魄”! 如果是数据库损坏造成的数据丢失,Binlo

#假如我们需要恢复catetory表,他的id为415,基于id是创表自增的原则,即415-11=404,
#我们还需要循环创建404个表后,才真正导入catetory表结构.
for ((oid;oid<id;oid++)); do
mysql -uroot –p****** -e “create table test.t(a bool);drop table test.t;” && echo “${oid} ok”
done

#循环创建404次表后,id为415,与原来备份的.ibd文件编号一致,导入表结构
mysql -uroot –p****** ${db} < /data/backup/${db}/${tb%%.ibd}.sql && echo “${oid} ${db}/${tb%%.ibd}.sql ok”
let oid=oid+1
done

4. 检查表空间id 和备份的是否一致

for ibd in `find test_restore/ -name “*.ibd”` ; do ?echo -e “${ibd//// } ? c” ;hexdump -C ${ibd} |head -n 3 |tail -n 1|awk ‘{print ?strtonum(“0x”$6$7)}’ ;done | sort -n ?-k 3 | column -t > /tmp/ibd2.txt

确认一致后,拷贝备份的.ibd文件到新数据库实例目录下,修改my.cnf

innodb_force_recovery=6

innodb_purge_threads=0

启动数据库.后续步骤如同单表恢复,直接导出恢复到原来实例中即可.

当然,这种方式是在数据库出现极端情况下,不得不采取的一种方式,线上最重要的还是做好主从同步和定时备份,从而规避此类风险.

关于InnoDB引擎独立表空间说明:

使用过MySQL的同学,刚开始接触最多的莫过于MyISAM表引擎了,这种引擎的数据库会分别创建三个文件:表结构、表索引、表数据空间.我们可以将某个数据库目录直接迁移到其他数据库也可以正常工作.然而当你使用InnoDB的时候,一切都变了.

InnoDB默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题.通常只能将数据使用mysqldump导出,然后再导入解决这个问题.

但是可以通过修改MySQL配置文件[mysqld]部分中innodb_file_per_table的参数来开启独立表空间模式,每个数据库的每个表都会生成一个数据空间.

优点:

1.每个表都有自已独立的表空间.

2.每个表的数据和索引都会存在自已的表空间中.

3.可以实现单表在不同的数据库中移动.

4.空间可以回收(除drop table操作处,表空不能自已回收)

a) Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间.

b) 对于使innodb-plugin的Innodb使用turncate table也会使空间收缩.

c) 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理.

缺点:

单表增加过大,如超过100个G.

结论:

共享表空间在Insert操作上少有优势.其它都没独立表空间表现好.当启用独立表空间时,请合理调整一下:innodb_open_files.

配置方式:

1.innodb_file_per_table设置.开启方法:

在my.cnf中[mysqld]下设置

innodb_file_per_table=1

2.查看是否开启:

mysql> show variables like ‘%per_table%’;

3.关闭独享表空间

innodb_file_per_table=0关闭独立的表空间

mysql> show variables like ‘%per_table%’;

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读