具有特定于表的表空间(存储在.ibd
可以在不关闭MySQL服务器的情况下单独恢复。如果您错误地删除或更新了表数据,而又没有真正丢失表本身删除表
,截断表
,或删除数据库
声明。
如果你有一个完整的备份.ibd
文件,你可以恢复到MySQL安装,从它的起源如下:
对于MySQL 5.5及更早版本,表必须已经存在,并且在执行备份后没有被删除或截断。当一个InnoDB表被截断或删除并重新创建时,它将获得一个新的表ID。数据库中的表与备份的表之间的任何ID不匹配都可能阻止对其进行恢复。匹配表id的要求也是您必须恢复到备份数据所在的MySQL服务器,而不是另一个具有类似数据库和表集的服务器的原因。这个限制不适用于MySQL 5.6及更高版本,只要从一个通用可用(GA)版本恢复到同一系列MySQL服务器中的另一个版本即可。
防止对要恢复的表进行写操作。这可以防止用户在恢复过程中修改表。
锁表tbl_name写;
这个问题
ALTER TABLE
声明:ALTER TABLEtbl_name丢弃表空间;
警告:这将删除当前
.ibd
文件。复制备份
.ibd
文件返回到适当的数据库目录。这个问题
ALTER TABLE
声明:ALTER TABLEtbl_name进口表空间;
释放写锁以完成恢复过程:
打开表;
在这种情况下,清洁.ibd
文件备份方式:
中的事务没有未提交的修改
.ibd
文件。对象中没有未合并的插入缓冲区项
.ibd
文件。对象中删除了所有已删除标记的索引记录
.ibd
文件。mysqld已刷新
.ibd
文件从缓冲池到文件。
你可以做这么干净的备份.ibd
用以下方法存档:
停止所有活动mysqld服务器并提交所有事务。
等到
显示innodb状态
的主线程状态显示数据库中没有活动事务InnoDB
是等待服务器活动
.然后你可以复制一份.ibd
文件。
对象的干净副本的另一种方法.ibd
文件是要使用的mysqlbackup:
使用mysqlbackup与
——only-innodb
或——only-innodb-with-frm
选项来备份InnoDB
安装。运行
mysqlbackup……运用原木
创建备份数据库的一致版本。开始第二次(假)mysqld备份服务器,让它清理
.ibd
备份中的文件。等待清理结束。关掉假人mysqld服务器。
清洁一下
.ibd
备份中的文件。