MySQL如何利用ibd文件恢复数据?
#假如我们需要恢复catetory表,他的id为415,基于id是创表自增的原则,即415-11=404, #循环创建404次表后,id为415,与原来备份的.ibd文件编号一致,导入表结构 4. 检查表空间id 和备份的是否一致
确认一致后,拷贝备份的.ibd文件到新数据库实例目录下,修改my.cnf
启动数据库.后续步骤如同单表恢复,直接导出恢复到原来实例中即可. 当然,这种方式是在数据库出现极端情况下,不得不采取的一种方式,线上最重要的还是做好主从同步和定时备份,从而规避此类风险. 关于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%’; (编辑:厦门网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |