mysql 模拟 ibd 文件 故障 使用,故障 恢复。

mysql 的后缀名ibd的文件是存放数据和索引的。

现模拟ibd文件的故障使用,故障恢复。

声明:我也是刚刚使用mysql,一起学习吧。        

测试ibd文件使用

1、新建一个测试库,可以和正式库在同一台电脑上(不用单独再借一台电脑)

2、把要恢复的数据表的创建语句在测试库执行一次。

CREATE TABLE `historyorder_copy1`  (
  `Orderid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Orderid',
  `belongToShop` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `belongToTime` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `ID` bigint(0) UNSIGNED NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`ID`) USING BTREE,
  UNIQUE INDEX `OrderidIndex`(`Orderid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1183135 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '20200908增加唯一索引,确保唯一性,本身有ID自增作为主键' ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

3、执行 其中matlab为刚刚创建的表名,去掉表空间。

alter table historyorder_copy1 DISCARD TABLESPACE;

4、可以把正式库的matlab复制到测试库的文件夹下,这里mysql可以不用停止服务。

5、执行 加载表空间。

alter table historyorder_copy1 IMPORT TABLESPACE; 

6、执行完后在测试库中已经可以 select count(*) from matlab ,证明成功启用另一个ibd文件。

-- 使用sql查询数据目录
**show global variables like '%datadir%';**

发现另一个问题,我停掉mysql服务,把ibd文件复制出来,放到安全的地方,开启数据库服务,删除刚刚复制文件的表的部分数据,比方说数据由100行,变成30行。然后停服务。

再把放在安全地方的ibd文件放回他原本的位置,这样数据行又变成100行,并且是可读写状态。

这是不是mysql的一个小bug?还是我开了容错模式?

测试库和正式库在不同的文件夹,我也是涨知识了,在mysql中,不同数据库的物理文件在不同的文件夹,mssql和oracle除非你指定,默认都是在同一个文件夹。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值