mysql 灾难型恢复

http://www.admin5.com/article/20140523/546473.shtml

如果.MYD文件丢失或者误删除,有没有备份,也没有二进制日志,还没有备库,那怎么办呐?

案例:灾难恢复

在没有备份,没有日志,没有备库,数据文件还被删除的情况下恢复数据

恢复思路

在系统中删除文件并非真正在存储中抹去数据,而是仅仅是标示对应的block块可以被重新分配,因此,数据还是在的,只是正常方式读取不到

因此,假如可以通过非正常方式读到这些数据,在重重新保存文件,那么数据就还原回来了、

mysql 配置

为了模拟一次数据误删除,并且使用ext3grep恢复数据,需要以下环境准备

1,创建一个单独的分区。

2,将MSYQL数据拷贝到该分区中

3,将新的分区挂载到mysql数据文件目录

原因?ext3grep 无法操作一挂载的分区,因此mysql的数据应该存在一个独立分区上,这样方便挂载和卸载

使用ext3grep 查看文件系统:

ext3grep  可以帮助我们通过文件系统读取底层数据。

--ls --inode 可以查看指定文件或目录的信息

ext3grep /dev/sdb1  --ls --inode 2

使用ext3grep 恢复文件

使用--restore-inode的参数组合,我们可以恢复指定的文件

ext3grep /dev/sdb1  --restore-inode 12354

 本文所用到的工具链接:

1.ext3grep:https://code.google.com/p/ext3grep/

ext3grep依赖e2fsprogs-devel和e2fsprogs-lib包,因此需要先安装他们才能编译ext3grep

tar  xvf  ext3grep-0.10.2.tar.gz -C /home

cd xt3grep-0.10.2

./configure

make

mkae install.

如果是ext4文件系统,使用下面的工具即可使用方法和ext3一样的

extundelete /dev/sdb1 --inde 2

extundelete /dev/sdb1 --restore-inode 57146

extundelete

模拟案例如下:

>drop table t2;

/etc/init.d/mysqld stop

mount  查看mysql数据在那个分区

ll -id  /usr/local/mysql 查看mysql的inode

2 drwxr-xr-x 3 root root 4096 Jan 14 16:52 mysql

umount /  /var/lib/mysql

ext3grep /dev/sdb1  --ls --inode 2

ext3grep /dev/sdb1  --ls --inode 48961(db1 具体某一库的inode)

接下来根据iNode 恢复到一个空目录

cd /root/test

ext3grep  /dev/sdb1 --restore-inode  48961

mv test/RESTORE-FILEs/inode.48691  test/RESTORE-FILEs/t2.MYD

mv test/RESTORE-FILEs/inode.48692  test/RESTORE-FILEs/t2.MYI

mv test/RESTORE-FILEs/inode.48693 test/RESTORE-FILEs/t2.frm

mount /dev/sdb2  /var/lib/mysql

cp t2.*  /usr/local/mysql/data/db1

chow -R mysql.mysql . * (pwd =/var/lib/mysql/db1)

/etc/mysqld start

最后在查看数据是不是完整、

时间: 2025-01-12 20:35:11

mysql 灾难型恢复的相关文章

Mysql备份和恢复

Mysql备份和恢复 备份 热备,是指对数据库运行中直接进行备份,对正在运行的数据库没有任何影响: 冷备,是指在数据库停止(关闭)下进行备份,只需拷贝相关的数据物理文件: 温备,是指对数据库运行中直接进行备份,但对当前数据库操作有所影响,很少用. 按备份出来的文件内容分为: 逻辑备份: 裸文件备份. 逻辑备份后文件内容是可读的,通常是文本文件,内容一般是Sql语句或表内的实际数据,如mysqldump或select * into outfile等方法.适用于数据库的升级.迁移,恢复时间较长. 裸

利用XtraBackup实现MySQL物理备份恢复

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠: (2)备份过程不会打断正在执行的事务: (3)能够基于压缩等功能节约磁盘空间和流量: (4)自动实现备份检验: (5)还原速度快: Xtrabackup中主要包含两个工具: xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构: in

[mysql]刷新windows恢复后mysql和"Access denied for user'root'@'IP'"处理问题

mysql数据库软件实际上是绿色的,重装系统后能够继续使用. 1.重装系统保留原有的后mysql安装文件夹,数据文件夹. 2.制作用于启动一个批处理文件mysql:[run.bat]的文件存储在mysql安装文件夹bin下. mysqld.exe --defaults-file=../my-default.ini --console 3.运行run.bat就可以. 假设连接数据库时出现下面错误:"Access denied for user'root'@'IP'" 1. 管理员登陆系统

【转】【MySQL】mysql 通过bin-log恢复数据方法详解

mysql中bin-log在mysql默认状态下是没有打开的,我们要先打开mysql 开启bin-log功能,然后再通过备份的bin-log进行数据库恢复了. 具体的操作是通过mysqlbinlog这个指令来完成的 /mysql/bin/mysqlbinlog --database=fox --start-date="2013-01-22 5:00:00" --stop-date="2013-01-22 9:00:00" /mysql/data/mysql-bin.

MySQL 备份和恢复(三)Xtrabackup实现热备:完全备份+增量备份

Percona XtraBackup is the world's only open-source, free MySQL hot backup software that performs non-blocking backups for InnoDB and XtraDB databases. With Percona XtraBackup, you can achieve the following benefits: Backups that complete quickly and

Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工具: xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构: innobackupex:是将xtrabackup进行封装的perl脚本,可以备份和恢复MyISAM表以及数据表结构. 一段官方文档的说明: http://www.per

MySQL 备份和恢复(一)mysqldump

备份方式:    热备:不中断服务    温备:备份过程中不可写,要加读锁    冷备:需要停掉服务 备份策略一:mysqldump + binlog 完全备份 + 增量,用mysqldump定期全备,每天(根据实际情况来)备份二进制日志. mysqldump类似于一个mysql的客户端,所以用mysqldump备份时,mysql服务要启动起来,常用参数: -u username | --user=username 指定备份的用户 -p password | --password=passwor

MySQL 备份和恢复(二)基于LVM实现几乎热备

LVM(Logical Volume Management逻辑卷管理)实现几乎热备的原理:利用LVM的快照卷达到可以保存数据库在某一时刻的瞬时状态,只需把当时的快照备份出来即可. LVM的快照原理:简单的讲就是lvm对某个卷创建快照卷后,快照卷则作为原卷的另一个访问入口,当原卷的数据发生变化时,则先把原卷的内容先复制一份到快照卷,然后才会继续对原卷数据的修改,这也就是之所以快照卷的容量大小应该大于整个备份过程中数据库的变化量的原因.所以当备份完成以后,快照卷也就可以拆除了,它的作用就是在备份过程

mysql用户管理、常用sql语句、mysql数据库备份恢复

mysql用户管理 1.新增用户user1,并设置密码为123456 mysql> grant all on *.* to 'user1'@'127.0.0.1' identified by '123456'; #创建user1用户并授予其所有权限"*.*"(通配符) #第一个*:表示所有的数据库 #第二个*:表示所有的表 #127.0.0.1表示来源IP,指的只有这个IP可以连接:'%':代表所有的ip #identified by 设置密码 2.对user1用户进行授权管理