时间:2021-07-01 10:21:17 帮助过:25人阅读
硬件及软件环境:
联想服务器(IBM)
磁盘500G 没有raid
centos 6.8
mysql 5.6.33 innodb引擎 独立表空间
备份没有,日志也没开
为什么没有备份和日志没有开?
因为是开发用户专用库(由开发人员自己维护)
jira(bug追踪),confluence(内部知识库)
因为是开发库,所以开发人员自己在维护,有一天,突然断电了,数据库起不来,开发人员处理了2天还没有处理好,最后就把这个问题丢给我了
我接手以后,已经是下面这种情况了
1.断电了,第二天启动,"根文件系统只读,建议使用fsck命令修复文件系统"
2.拿到手的操作系统起来了,但是数据库启动不了
3.检查问题,jira库目录丢失,只剩下confluence
confulence库中一共有107张表。
1、创建107张和原来一模一样的表。
他有2016年的历史库,我让他去他同时电脑上 mysqldump备份confulence库
mysqldump -uroot -ppassw0rd -B confulence --no-data >test.sql
拿到你的测试库,进行恢复
到这步为止,表结构有了。
2、批量表空间删除并导出
select concat(‘alter table ‘,table_schema,‘.‘table_name,‘ discard tablespace;‘) from information_schema.tables where table_schema=‘confluence‘ into outfile ‘/tmp/discad.sql‘;
source /tmp/discard.sql
执行过程中发现,有20-30个表无法成功。主外键关系
set foreign_key_checks=0 跳过外键检查。
把有问题的表表空间也删掉了。
3、批量拷贝生产中confulence库下的所有表的ibd文件拷贝到准备好的环境中
select concat(‘alter table ‘,table_schema,‘.‘table_name,‘ import tablespace;‘) from information_schema.tables where table_schema=‘confluence‘ into outfile ‘/tmp/import.sql‘;
4、1.4 验证数据
表都可以访问了,数据挽回到了出现问题时刻的状态
mysql>create database kk charset utf8mb4;
mysql>use kk
mysql>create table t1 (id int primary key);
mysql>insert into t1 values(1),(2),(3);
mysql>commit;
#假设此时数据库宕机起不来了!
mysql>create database kk charset utf8mb4;
mysql>use kk
mysql> show create table t1;
+-------+-----------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------+
| t1 | CREATE TABLE `t1` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-----------------------------------------------------------------------------------------------------------+
mysql>use kk
mysql>CREATE TABLE t1 (id int(11) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
mysql>alter table t1 discard tablespace;
scp -rp /data/mysql/data/t1/t1.bid 192.168.114.51:/data/mysql/data/kk/
chown -R mysql:mysql /data/mysql/data/kk/
alter table t1 import tablespace;
这种情况,如果有历史备份,可以获取到原表的交表语句!才能用!如果连原表的建表语句都获取不到,是不行的
表空间恢复数据库
标签:思路 导入表 mysql pre 删掉 假设 sch 导入 commit