表空间恢复数据库

第1章 故障背景

1.1 环境

硬件及软件环境:
联想服务器(IBM)
磁盘500G 没有raid
centos 6.8
mysql 5.6.33  innodb引擎  独立表空间
备份没有,日志也没开
为什么没有备份和日志没有开?
因为是开发用户专用库(由开发人员自己维护)
jira(bug追踪),confluence(内部知识库)

1.2 故障现象

因为是开发库,所以开发人员自己在维护,有一天,突然断电了,数据库起不来,开发人员处理了2天还没有处理好,最后就把这个问题丢给我了
我接手以后,已经是下面这种情况了
1.断电了,第二天启动,"根文件系统只读,建议使用fsck命令修复文件系统"
2.拿到手的操作系统起来了,但是数据库启动不了
3.检查问题,jira库目录丢失,只剩下confluence

1.3 处理思路

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 验证数据
表都可以访问了,数据挽回到了出现问题时刻的状态

第2章 故障模拟

1.1 数据模拟

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;
#假设此时数据库宕机起不来了!

1.2 恢复里程

第一个里程: 先在db02服务器创建一个库kk

mysql>create database kk charset utf8mb4;

第二个里程: 在db01上获取,建表语句

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 |
+-------+-----------------------------------------------------------------------------------------------------------+

第三个里程: 在db02上用拿到的建表语句,创建表

mysql>use kk
mysql>CREATE TABLE t1 (id int(11) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

第四个里程: 在db02上用数据库专用的命令,删除掉新建表的ibd

mysql>alter table t1 discard tablespace;

第五个里程: 把db01上KK库下t1表的ibd拷贝到db02的KK库下

scp -rp /data/mysql/data/t1/t1.bid 192.168.114.51:/data/mysql/data/kk/

第六个里程: 在db02上给予拷贝古来的IBD权限

chown -R mysql:mysql /data/mysql/data/kk/

第七个里程: 用数据库专用的命令把拷贝过来的ibd导入表中

alter table t1 import tablespace;

第八个里程: 检查数据


第3章 总结

这种情况,如果有历史备份,可以获取到原表的交表语句!才能用!如果连原表的建表语句都获取不到,是不行的

原文地址:https://www.cnblogs.com/yufenchi/p/12672860.html

时间: 2024-11-10 12:58:58

表空间恢复数据库的相关文章

数据库-表空间、数据库备份(实施)

近来第一次写了实施文档,也有一些收获,及时记录下来,以备后用. 数据库表空间 ORACLE数据库被划分成称作为表空间的逻辑区域--形成ORACLE数据库的逻辑结构. 一个ORACLE数据库能够有一个或多个表空间, 而一个表空间则对应着一个或多个物理的数据库文件. 表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表.视图.索引.聚簇.回退段和临时段等. 每个ORACLE数据库均有SYSTEM表空间,这是数据库创建时自动创建的. SYSTEM表空间必须总要保持联机,因为其包含着数据

PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

看PostgreSQL9的官方文档,我越看越迷糊,这表空间,数据库,模式,表,用户,角色之间的关系怎么在PostgreSQL里这么混乱呢?经过中午的一个小实验,我逐渐理清了个中来龙去脉.下面我来还原我的试验,并循序讲清其中关系. 首先,实验出角色与用户的关系    在PostgreSQL中,存在两个容易混淆的概念:角色/用户.之所以说这两个概念容易混淆,是因为对于PostgreSQL来说,这是完全相同的两个对象.唯一的区别是在创建的时候: 1.我用下面的psql创建了角色kanon:   CRE

Oracle sql语句创建表空间、数据库、用户及授权

--创建表空间和数据库文件及默认表空间大小 create tablespace TableSpace_Test datafile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DataBase_Test.DBF' size 200m; --设置数据库自动增长 alter database datafile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DataBase_Test.DBF' autoextend on; --创建用户

GreenPlum 数据库创建用户、文件空间、表空间、数据库

前几篇文章介绍了GreenPlum数据库的安装.启动.关闭.状态检查.登录等操作,数据库已经创建好了,接下来介绍如何使用数据库.按照习惯,需要先创建测试用户.表空间.数据库.先创建测试用户dbdream. view source 1 postgres=# create role dbdream password 'dbdream' createdb login; 2 NOTICE:  resource queue required -- using default resource queue

(Les16 执行数据库恢复)-表空间恢复

NOARCHIVELOG模式下丢失了数据文件 数据库处于NOARCHIVELOG模式时,如果丢失任何数据文件,执行以下步骤 1.如果实例尚未关闭,请关闭实例 2.从备份还原整个数据库,包括所有数据文件和控制文件 3.打开数据库 4.让用户重新输入自上次备份以来所做的所有更改 ARCHIVELOG模式下丢失了非关键性数据文件(SYSTEM,UNDO除外) 仅仅恢复当前数据文件不用整库恢复,不需要停机 1.数据文件离线 2.restore数据文件,介质恢复 3.recover事务 4.数据文件联机

【只读表空间--恢复-1】

1>只读 ---备份只读  故障 只读  还原有故障的数据文件 2>只读 ---备份只读  可写 故障  还原备份数据文件,重做recover 3>只读 ---备份可写  只读 故障  还原备份数据文件,recover 1> 进入rman,确保是否有备份的文件: [[email protected] ~]$ rman target / Recovery Manager: Release 10.2.0.5.0 - Production on Thu Nov 6 09:44:08 20

[20170623]利用传输表空间恢复部分数据.txt

--//昨天我测试使用传输表空间+dblink,上午补充测试发现表空间设置只读才能执行impdp导入原数据,这个也很好理解.--//这样的操作模式仅仅减少expdp生成原数据的过程. --//我想一下,rman也支持建立传输表空间的命令.我仔细看了以前的笔记,发现这样最大的有点不用设置只读,实际上它是通过建立辅组实--//例来建立传输文件,理论讲可以恢复到特定的scn,这样可以利用它解决一些误操作的问题,还是通过例子来说明问题. 1.环境:--//前面的测试有点乱,我使用冷备份恢复数据库. [e

Oracle传输表空间迁移数据库

本文是通过exp/imp方式实现,需要将数据库表空间处于只读模式,对于实时应用的生产数据库,可以采用rman方式进行传输表空间.   执行表空间传输有以下限制条件:    (1)源数据库和目标数据库必须处于相同的平台,10g以后可以用RMAN命令修改数据文件实现跨平台移动表空间.    (2)对于源数据库和目标数据库版本不同时,源数据库的版本必须低于目标数据库.    (3)两边数据库字符集和国家字符集必须一致.    (4)目标数据库不能存在同名的表空间. 1. 查询oracle支持的平台转换

oracle创建表空间 导入数据库

1首先需要以系统用户进入oracle 2 然后是创建表空间 创建表空间需要创建两个一个临时表空间 一个表空间 --创建表空间 create tablespace abc  datafile 'D:\tablespce\LANDHIGH_SFTMS.dbf' size 500m; --创建用户并指定表空间 create user admin identified by admin default tablespace  abc quota 500m on users; --这个是数据库存放的位置