数据库全恢复:让数据安全无忧(数据库全恢复)

随着信息化、数字化浪潮的不断发展,企业与个人越来越离不开数据的支持。然而,数据安全问题在这一进程中不断浮现:利益的驱使和技术漏洞为黑客蓝海提供了无限空间,从而导致各种数据被窃取、篡改、删除等问题。这些安全问题不仅会给生产生活带来极大的损失,也会对企业或个人的名誉造成极大的影响,甚至引起法律纠纷。因此,数据库全恢复技术的重要性显得格外突出。

芜湖网站建设公司创新互联,芜湖网站设计制作,有大型网站制作公司丰富经验。已为芜湖数千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的芜湖做网站的公司定做!

数据库全恢复技术是指在排除硬件、软件等因素导致数据库故障后,恢复数据库到故障出现之前的状态。通过全恢复技术,可以保证数据的安全性和完整性,并大大减少企业和个人在数据安全方面的风险和损失。下面我们来分析一下数据库全恢复技术的重要性。

数据库全恢复能够避免数据丢失。现代数据库系统中,数据量庞大,甚至其中一小部分的丢失都会引起灾难性的后果。比如,银行的数据系统因为系统故障等原因,造成客户账户资金丢失,不仅会影响用户权益,也会影响银行业务的稳定和发展。而数据库全恢复技术则可以使已丢失的数据得到全部或部分恢复,减少数据的丢失和损失。

数据库全恢复可以保证数据的完整性。数据库数据有着各种不同的表、字段、索引等等,这些数据很容易受到各种软件漏洞、黑客攻击等等的攻击而被篡改。如果数据被篡改,那么数据完整性就已经严重受损。而数据库全恢复技术通过将数据库恢复到故障之前,保证了数据的完整性,大大保障了数据的安全性。

数据库全恢复可以提升数据的可用性。在业务高峰时段,系统的访问“瓶颈”很容易受到破坏,导致运行出现问题。此时,通过数据库全恢复技术可以快速恢复其在故障前的状态,从而保障系统的高效运行。

综上所述,数据库全恢复技术是一项非常重要的技术,它可以使得数据安全无忧。数据的安全问题需要我们付出更多的关注和努力,而数据库全恢复技术就是维护这个安全的重要手段之一。

值得注意的是,数据库全恢复技术的实施需要专业人员,需要有完善的系统、设备和备份措施作为支撑。在技术不断进步的今天,专业的技术团队和完善的技术保障体系对于个人和企业来说都非常必要,尤其对于大型企业和重要行业,一定要高度重视数据安全问题。只有这样才能真正让数据安全无忧。

相关问题拓展阅读:

  • mysql整个数据库被删除了怎么恢复
  • 浅谈IBMDB2的数据库备份与恢复

mysql整个数据库被删除了怎么恢复

1 找个别的机器安装个同版本的mysql或从已安装同版本的其他机器上(非同版本的也可以试下):

拷贝 mysql/data/mysql 目录到你的mysql/data/ 下吧

2 试着启动mysql服务,如果能启动了,理论上应该丢失的只有用户、授权等一些系统掘槐信息,不影响你的使用的数据;

如果不能启动,看错误日志,争取启动了。

3 赶紧把数据备份一份出来,重新把判渗友所有喊兄库(只是你后来创建的业务相关的库,不包括mysql库)都删了,重新导入一遍。理论上不这样也可以,但只是非生产重要的环境下。

4 重新做用户授权。

有没有完整备份?

每个 DBA 是不是粗皮都有过删库的经历?删库了没有备份怎么办?备份恢复后无法启动服务什么情况?表定义损坏数据无法读取怎么办?逗凳液 

我曾遇到某初创互联网企业,因维护人员不规范的备份恢复操作,导致系统表空间文件被初始化,上万张表无法读取,花了数小时才抢救回来。

当你发现数据无法读取时,也许并非数据丢失了,可能是 DBMS 找不到描述数据的信息。

背景

先来了解下几张关键的 InnoDB 数据字典表,它们保存了部分表定义信息,在我们恢复表结构时需要用到。

SYS_TABLES 描述 InnoDB 表信息CREATE TABLE `SYS_TABLES` (`NAME` varchar(255) NOT NULL DEFAULT ”,  表名`ID` bigint(20) unsigned NOT NULL DEFAULT ‘0’,  表id`N_COLS` int(10) DEFAULT NULL,`TYPE` int(10) unsigned DEFAULT NULL,`MIX_ID` bigint(20) unsigned DEFAULT NULL,`MIX_LEN` int(10) unsigned DEFAULT NULL,`CLUSTER_NAME` varchar(255) DEFAULT NULL,`SPACE` int(10) unsigned DEFAULT NULL,   表空间idPRIMARY KEY (`NAME`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_INDEXES 描述 InnoDB 索引信息CREATE TABLE `SYS_INDEXES` (  `TABLE_ID` bigint(20) unsigned NOT NULL DEFAULT ‘0’, 与sys_tables的id对应山物  `ID` bigint(20) unsigned NOT NULL DEFAULT ‘0’,  索引id  `NAME` varchar(120) DEFAULT NULL,索引名称  `N_FIELDS` int(10) unsigned DEFAULT NULL, 索引包含字段的个数  `TYPE` int(10) unsigned DEFAULT NULL,  `SPACE` int(10) unsigned DEFAULT NULL,  存储索引的表空间id  `PAGE_NO` int(10) unsigned DEFAULT NULL,  索引的root page id  PRIMARY KEY (`TABLE_ID`,`ID`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_COLUMNS 描述 InnoDB 表的字段信息CREATE TABLE `SYS_COLUMNS` (  `TABLE_ID` bigint(20) unsigned NOT NULL, 与sys_tables的id对应  `POS` int(10) unsigned NOT NULL,     字段相对位置  `NAME` varchar(255) DEFAULT NULL,    字段名称  `MTYPE` int(10) unsigned DEFAULT NULL,  字段编码  `PRTYPE` int(10) unsigned DEFAULT NULL, 字段校验类型  `LEN` int(10) unsigned DEFAULT NULL,  字段字节长度  `PREC` int(10) unsigned DEFAULT NULL, 字段精度  PRIMARY KEY (`TABLE_ID`,`POS`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;SYS_FIELDS 描述全部索引的字段列CREATE TABLE `SYS_FIELDS` (  `INDEX_ID` bigint(20) unsigned NOT NULL,  `POS` int(10) unsigned NOT NULL,  `COL_NAME` varchar(255) DEFAULT NULL,  PRIMARY KEY (`INDEX_ID`,`POS`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;./storage/innobase/include/dict0boot.h 文件定义了每个字典表的 index id,对应 id 的 page 中存储着字典表的数据。

这里我们需要借助 undrop-for-innodb 工具恢复数据,它能读取表空间信息得到 page,将数据从 page 中提取出来。

# wget yum install -y gcc flex bison# make# make sys_parser

# ./sys_parser 读取表结构信息

sys_parser databases/table

stream_parser 读取 InnoDB page 从 ibdata1 或 ibd 或分区表

# ./stream_parserYou must specify file with -f optionUsage: ./stream_parser -f  Where:    -hPrint this help    -V or -g   – Print debug information    -s size    – Amount of memory used for disk cache (allowed examples 1G 10M). Default 100M    -Tretrieves only pages with index id = NM (N – high word, M – low word of id)    -t size    – Size of InnoDB tablespace to scan. Use it only if the parser can’t determine it by himself.

c_parser 从 innodb page 中读取记录保存到文件

# ./c_parserError: Usage: ./c_parser -4|-5|-6 -f -t table.sql  Where    -f — InnoDB page or directory with pages(all pages should have same index_id)    -t — CREATE statement of a table    -o — Save dump in this file. Otherwise print to stdout    -l — Save SQL statements in this file. Otherwise print to stderr    -h  — Print this help    -d  — Process only those pages which potentially could have deleted records (default = NO)    -D  — Recover deleted rows only (default = NO)    -U  — Recover UNdeleted rows only (default = YES)    -V  — Verbose mode (lots of debug information)innodb_datafile is in REDUNDANT formatinnodb_datafile is in COMPACT formatinnodb_datafile is in MySQL 5.6 format    -T  — retrieves only pages with index id = NM (N – high word, M – low word of id)    -b — Directory where external pages can be found. Usually it is pages-XXX/FIL_PAGE_TYPE_BLOB/    -i — Read external pages at their offsets from .    -p prefix — Use prefix for a directory name in LOAD DATA INFILE command

接下来,我们演示场景的几种数据恢复场景。

场景1:drop table

是否启用了 innodb_file_per_table 其恢复方法有所差异,当发生误删表时,应尽快停止MySQL服务,不要启动。若 innodb_file_per_table=ON,更好只读方式重新挂载文件系统,防止其他进程写入数据覆盖之前块设备的数据。

如果评估记录是否被覆盖,可以表中某些记录的作为关键字看是否能从 ibdata1 中筛选出。

# grep WOODYHOFFMAN ibdata1

Binary file ibdata1 matches

也可以使用 bvi(适用于较小文件)或 hexdump -C(适用于较大文件)工具

以表 sakila.actor 为例CREATE TABLE `actor` (`actor_id` allint(5) unsigned NOT NULL AUTO_INCREMENT,`first_name` varchar(45) NOT NULL,`last_name` varchar(45) NOT NULL,`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`actor_id`),KEY `idx_actor_last_name` (`last_name`)) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8

首先恢复表结构信息1. 解析系统表空间获取 page 信息

./stream_parser -f /var/lib/mysql/ibdata1

2. 新建一个 schema,把系统字典表的 DDL 导入

cat dictionary/SYS_* | mysql recovered

3. 创建恢复目录

mkdir -p dumps/default

4. 解析系统表空间包含的字典表信息,

./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/01.page -t dictionary/SYS_TABLES.sql > dumps/default/SYS_TABLES 2> dumps/default/SYS_TABLES.sql./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/02.page -t dictionary/SYS_COLUMNS.sql > dumps/default/SYS_COLUMNS 2> dumps/default/SYS_COLUMNS.sql./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/03.page -t dictionary/SYS_INDEXES.sql > dumps/default/SYS_INDEXES 2> dumps/default/SYS_INDEXES.sql./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/04.page -t dictionary/SYS_FIELDS.sql > dumps/default/SYS_FIELDS 2> dumps/default/SYS_FIELDS.sql

5. 导入恢复的数据字典

cat dumps/default/*.sql | mysql recovered

6. 读取恢复后的表结构信息

./sys_parser -pmsandbox -d recovered sakila/actor

由于 5.x 版本 innodb 引擎并非完整记录表结构信息,会丢失 AUTO_INCREMENT 属性、二级索引和外键约束, DECIMAL 精度等信息。

若是 mysql 5.5 版本 frm 文件被从系统删除,在原目录下 touch 与原表名相同的 frm 文件,还能读取表结构信息和数据。若只有 frm 文件,想要获得表结构信息,可使用 mysqlfrm –diagnostic /path/to/xxx.frm,连接 mysql 会显示字符集信息。

innodb_file_per_table=OFF

因为是共享表空间模式,数据页都存储在 ibdata1,可以从 ibdata1 文件中提取数据。

1. 获取表的 table id,sys_table 存有表的 table id,sys_table 表 index id 是1,所以从01.page 获取表 id./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/01.page -t dictionary/SYS_TABLES.sql | grep sakila/actorB28  2AD4D  SYS_TABLES  “sakila/actor”  0   “”B28  2AD4D  SYS_TABLES  “sakila/actor”  0   “”  0

2. 利用 table id 获取表的主键 id,sys_indexes 存有表索引信息,innodb 索引组织表,找到主键 id 即找到数据,sys_indexes 的 index id 是3,所以从03.page 获取主键 id

./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/03.page -t dictionary/SYS_INDEXES.sql | grepBABCA  SYS_INDEXES”PRIMARY”BAC3C  SYS_INDEXES”idx_actor_last_name”BABCA  SYS_INDEXES”PRIMARY”BAC3C  SYS_INDEXES”idx_actor_last_name”

3. 知道了主键 id,就可以从对应 page 中提取表数据,并生成 sql 文件。

./c_parser -4f pages-ibdata1/FIL_PAGE_INDEX/76.page -t sakila/actor.sql > dumps/default/actor 2> dumps/default/actor_load.sql

4. 最后导入恢复的数据

cat dumps/default/*.sql | mysql sakila

更多详细情况点击

网页链接

网页链接

请点击输入图片描述

浅谈IBMDB2的数据库备份与恢复

摘要 本文探讨了基于 IBM DB 的各种数据库备份与恢复策略 并附有完整的实验步骤 本文试图通过具体的实验使读者领会各种数据库备份方式的优劣和异同 并掌握 IBM DB 的数据库备份与恢复技术

  若无特殊说明 以下数据库备份与恢复的试验环境均为 Windows XP + IBM DB V 企业版 同样的语句也在 AIX + IBM DB V 上验证通过

  丛宏举一 数据库备份的重要性

  在信息日趋发达的时代 数据显得尤其重要 如何保障数据的完整性和安全性呢?如何避免数据灾难事故的发生呢?数据库备份作为数据安全和完整最有利保障手段的重要性就不言而喻了

  数据库绝穗备份的重要性主要体现在

   提高系统的高可用性和灾难可恢复性 (在数据库系统崩溃的时候 没有数据库备份怎么办!?)

   使用数据库备份还原数据库是数据库系统崩溃时提供数据恢复最小代价的更优方案 (总不能让客户重新填报数据吧!?)

   没有数据就没有一切 数据库备份就是一种防范灾难于未然的强力手段 (没有了数据 应用再花哨也是镜中花水中月)

   对于DBA来说 最首要也是最重要的任务就是数据库备份

  二 DB 数据库备份的方式与分类

   按照数据库备份对数据库的使用影响来划分

  A 联机备份(也称热备份或在线备份)

  B 脱机备份(也称冷备份或离线备份)

  说明 联机备份和脱机备份更大的不同在于 联机备份数据库时 数据库仍然可以供用户使用 而脱机备份数据库则不行 脱机备份数据库时 必须断开所有与数据库有连接的应用后才能进行

   按照数据库的数据备份范围来划分

  A 完全备份

  B 增量备份

  说明 完全备份数据库是指备份数据库中的所有数据 而增量备份只是备份数据库中的部分数据 至于增量备份到底备份哪些数据 稍候会提到

   增量备份的两种实现方式

  A 增量备份(也称累计备份)

  B delta备份

  说明 这两种备份方式的严格定义如下

  增量备份是自最近成功的完全备份以来所有更改的数据的备份

  delta 备份则是上一次成功的完全 增量或 delta 备份以后所做更改的数据的备份

  这里请读者们仔细的看上面两个增量备份方式的定义 注意这两种备渗碧份方式的细微差别 这里我们举一个例子来说明

  假设有一个数据库 它每天都有部分数据在发生变化 我们星期一晚上对该数据库做了一次完全备份 星期二晚上对该数据库做了一次增量备份A(注 这里的增量备份是指累计备份 下同) 星期三晚上又做了一次增量备份B 星期四则做了一次delta 备份

  那么 我们可以得出以下结论

  星期一的数据库备份包含了所有的数据

  星期二没有变动过的数据没有发生备份 在星期二变动过的数据会备份 并且备份到增量备份A中

  星期三的备份中含有自星期一完全备份以来发生过变动的所有数据 包含了星期二和星期三发生过变动的数据 显然 增量备份A 被 增量备份 B 包含

  星期四做的是delta备份 注意 它会也只会备份自星期三备份之后变动过的数据

  三 DB 备份文件的结构介绍

  在不同的操作系统下 DB 的备份文件的结构是不同的 这里概要地介绍一下

   Windows 操作系统下的数据库备份文件结构

  

  说明 Windows 操作系统下的数据库备份文件是嵌套在一系列文件夹之下的特殊结构 上例中 D:\DB _Train 是指备份目录 TESTDB 是指数据库名称为 TESTDB DB 是指实例名称 NODE 是指节点名称 CATN 是指编目名称 是指备份发生的年月日 形如YYYYMMDD 是指备份发生的时间 精确到秒 也就是指 点 分 秒 形如HHMMSS 最后的 则是备份文件的一个序列号

   Unix 操作系统下的数据库备份文件结构

  

  说明 Unix 操作系统下的数据库备份文件就是一个文件 上例中 HTDC 是指数据库名称 db inst 是指实例名称 NODE 是指节点名称 CATN 是指编目名称 是指备份发生的具体时间 形如YYYYMMDDHHMMSS 同样地 它的时间精确到秒 也就是指 年 月 日 点 分 秒发生备份 最后的 则是备份文件的一个序列号

  四 DB 数据库备份实验(附完整命令脚本清单)

   DB 数据库实验准备工作

  ( ) Step 创建测试数据库 TestDB

  脚本清单CREATE DATABASE TestDBON D:USING CODESET GBK TERRITORY CNWITH Pjj s Test DB ;}

  ( ) Step 创建数据库管理表空间 Data_SP(注意路径 如果没有请创建)

  脚本清单CREATE REGULAR TABLESPACE Data_SPPAGESIZE KMANAGED BY DATABASEUSING ( FILE D:\DB \Container\TestDB\UserData\UserData )BUFFERPOOL IBMDEFAULTBP;

  说明 上面的脚本创建了一个名为 Data_SP 的数据库管理表空间 该表空间使用的缓冲池为 IBMDEFAULTBP 存储路径为 D:\DB \Container\TestDB\UserData\ 存储文件名为 UserData 大小为 * K = M 页大小为 K

  ( ) Step 创建测试表 TestTable 并插入测试数据

  脚本清单

  CREATE TABLE TestTable(ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH INCREMENT BY NO CACHE )Message VARCHAR( )PRIMARY KEY(ID))IN Data_SP;

   插入测试数据 INSERT INTO TestTable(Message) VALUES( 测试表建立成功 );

  说明 建立测试表并插入数据是为了稍候验证数据库恢复的时候用的

  ( ) Step 创建测试表 TestTable 并插入测试数据

  脚本清单CREATE TABLE TestTable(ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH INCREMENT BY NO CACHE )Message VARCHAR( )PRIMARY KEY(ID))IN Data_SP;

   插入测试数据INSERT INTO TestTable(Message)VALUES( 测试表建立成功 );

   DB 数据库脱机备份与恢复实验

  脚本清单

   Step 完全备份数据库(脱机 备份时间戳记为 )

  db backup db TestDB to D:\DB _Train

   Step 模拟灾难 强制删除数据库

  db drop db TestDB

   Step 根据该数据库完全备份还原数据库

  db restore db TestDB from D:\DB _Train taken at

   DB 数据库增量备份与恢复实验

  脚本清单

   数据库增量备份以及还原实验

   修改数据库参数 TrackMod 使之支持数据库进行增量备份

  db update db cfg using TrackMod YES

   更改参数后必须完全离线备份数据库(脱机 备份时间戳记为 )

  db backup db TestDB to D:\DB _Train

   插入测试数据

  INSERT INTO TestTable(Message)VALUES( 开始增量数据库备份测试 );

   开始增量备份(脱机 备份时间戳记为 )

  db backup db TestDB incremental to D:\DB _Train

   删除数据库 模拟数据灾难

  db drop db TestDB

   首先还原至完全离线备份状态

  db restore db TestDB from D:\DB _Train taken at

   还原至增量离线备份状态

  db restore db TestDB incremental automatic from D:\DB _Train taken at

   注意 上述语句中 有一个 automatic 它表示无论有多少个增量备份 系统将全自动检索恢复数据库的顺序并自动恢复数据库 如果没有 automatic 则需要多次手动恢复数据库 很麻烦而且容易出错

   Step 根据该数据库完全备份还原数据库

  db restore db TestDB from D:\DB _Train taken at

   还原数据库后查询测试表数据检验数据是否恢复成功

   DB 数据库联机机备份与恢复实验

  说明 联机备份数据库可以使数据库在备份的同时仍然保持在可用状态 要让数据库支持联机备份 必须更改数据库的日志归档方式 在脱机备份模式下 数据库采用循环日志方式记录数据库日志 在联机备份模式下 数据库则采用归档日志的方式备份数据库日志 另外 对于联机备份的数据库来说 活动日志和归档日志就很重要了 一定要经常备份 保存

  脚本清单

   数据库联机备份以及还原实验

   连接至数据库并插入测试数据

  db connect to TestDB

   插入测试数据

  INSERT INTO TestTable(Message)VALUES( 开始联机数据库备份测试 完全备份 );

   修改数据库参数 使之支持在线联机备份

  db update db cfg for TestDB using logretain on trackmod on

   执行增量 在线备份之前必须执行离线全备份一次 否则数据库将处于备份暂挂的不可用状态

   (联机完全备份 时间戳记 )

  db backup db TestDB

   连接至数据库并插入测试数据

  db connect to TestDB

   插入测试数据

  INSERT INTO TestTable(Message)VALUES( 开始联机数据库备份测试 增量备份 );

   执行联机备份 备份同时再打开一个会话 模拟应用在线(联机增量备份 时间戳记 )

  db backup db TestDB online incremental to D:\DB _Train

   模拟灾难 删除数据库!

   重要 此前一定要将活动日志文件备份至另一个路径 保存好 本例中 活动日志保存在 C:\db admin 下

  db drop db TestDB

   根据在线完全备份恢复数据库

  db restore db TestDB from D:\DB _Train taken at

   根据在线增量备份恢复数据库

  db restore db TestDB incremental automatic from D:\DB _Train taken at

   恢复后的数据库处于前滚暂挂的不可用状态

  db connect to TestDB

   前滚数据库 并指定归档日志位置 重要!

  db ROLLFORWARD DATABASE TESTDB TO END OF LOGS AND PLETE OVERFLOW LOG PATH ( C:\db admin )

  五 综述

  对于数据库管理人员或者维护人员来说 怎么强调数据库备份的重要性都不为过

  希望本文能抛砖引玉 能让大家对 IBM DB UDB 的数据库备份与恢复有一些深入的认识 也希望大家能在本机上按照本文的脚本认真的做一次实验 这样 你的认识会更加深刻

lishixinzhi/Article/program/Oracle/202311/18590

关于数据库 全恢复的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。

本文标题:数据库全恢复:让数据安全无忧(数据库全恢复)
URL网址:http://www.shufengxianlan.com/qtweb/news27/53477.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联