每个 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 中存储着字典表的数据。
Ⅱ mysql数据库不小心还原了怎么办
mysql数据库不小心还原了需要按照以下步骤恢复。
1、先确认MYSQL有没有启用bin日志,就是看下mysql.ini(my.cnf)里的log-bin=mysql-bin,可以自定义一个目录和前缀名,比如/data/log/mylog这样。
2、然后在数据库文件存放的data目录就能看到mysql-bin.00000x这样的文件,这就是二进制日志了,可以导出成txt格式的,里面其实就是对数据库的各种操作SQL语句。
3、导出txt文件:
E:wampinmysqlmysql5.6.12in>mysqlbinlog --database=testdatabase E:wampinmysqlmysql5.6.12datamysql-bin.000312 > C:\test1.txt
这是WINDOWS下的导出,linux也是类似的。
database=数据库名
从最早的日志还始还原
linux下可以很方便的mysql-bin.000*
可以加参数开始时间和结束时间,就是你执行那条SQL语句的时间
start-datetime="2014-12-04 11:25:56" --stop-datetime="2014-12-04 13:23:50"
4、恢复数据:
E:wampinmysqlmysql5.6.12in>mysqlbinlog --database=yundongchao E:wampinmysqlmysql5.6.12datamysql-bin.000179 | mysql -u root -p
------------------------------------------------
Ⅲ mysql数据库删除了怎么恢复
常见的情况:
1、如完全丢失数据库文件,用一般数据恢复方式不能恢复2、表被删除,甚至被重写,表行被删除3、索引错误,或者IAM断裂4、数据库大面损坏,可以指定任意表或者字段提取数据5、系统表损坏甚至完全损坏,可以提取指定数据
Oracle数据库恢复
1、undo,systen表空间损坏的恢复2、误delete数据的恢复,误删除表空间drop,truncate表的恢复3、各种ora-错误的恢
复4、DMP文件不能导入数据库以及LOB数据恢复等情况5、oracle数据库中数据文件出现现坏块情况下的恢复6、oracle数据库无数据库文件但
有有日志的情况下的恢复7、能够在系统表和空间文件丢失,变成0字节下完整的恢复数据8、只要没有覆盖表空间件,都有信心恢复数据。无论你是什么系统
(Windows,UNIX)等,无论什么存储设备(硬盘,磁盘阵列)
大
环乙木数据恢复是一家专门做手机数据恢复业务的公司,拥有先进的数据恢复认证设备,使用的几乎全部是自有技术,对于数据恢复,采用最先进的数据分析和处理
方法,对手机数据丢失的数据恢复成功率在95%以上。如果您已经多方咨询,别的手机数据恢复公司都告诉您,数据恢复无法实现。我们可以很自信地告诉您,这块工作是我们的强项。我们可以手机、硬盘、服务器、U盘、数据库数据恢复等所有手机数据,且我
们可以为大家提供大量的成功案例以供参考,让你对我们更具信心。
Ⅳ MYSQL数据库丢失了数据怎么恢复
数据库丢失了最好的恢复方法是从备份中还原文件,数据库的文件一般都会有备份。如果备份也损坏了,无法进行还原,那就需要使用数据恢复软件来恢复了。从网上找恢复软件,然后扫描一下,看是否可以搜索到需要的文件。
Ⅳ 怎么恢复mysql数据库怎么恢复数据
简单情况下:进入原来mysql安装路径下的data文件夹下,找到相应的库和ibdata1,进行,就可回复原来的数据。
复杂情况下:
从另一台机上把MySQL数据库的mysql文件夹拷贝到本地机上,目的是恢复本地机对数据的访问和操作。经过如下几种情况的操作。
1.
在本地重装MySQL(安装目录D:\Program
Files\MySQL\MySQL
Server
5.0),直接把mysql文件夹拷贝至D:\Program
Files\MySQL\MySQL
Server
5.0\。结果,失败:数据库连接错误。
2.
卸载后重装MySQL,将D:\Program
Files\MySQL\MySQL
Server
5.0\下的数据备份,只把mysql\data文件夹全部内容拷贝到D:\Program
Files\MySQL\MySQL
Server
5.0\data下。结果,失败:数据库连接错误。将备份的数据还完覆盖。结果,失败,还是连接不上数据库。
3.
卸载后重装MySQL,将mysql\data文件夹里的cf1,last文件夹(这两个是原来MySQL里的数据库)拷贝进D:\Program
Files\MySQL\MySQL
Server
5.0\data。连接成功,在Navicat
for
MySQL里看到数据库cf1和last,但是不能访问,因为数据全为零。明白了原来data里以数据库命名的文件存储的是数据库的表结构,不是元数据。下一步,把data文件夹里的ibdata1文件(3.4G大,明显存储了元数据)拷贝到D:\Program
Files\MySQL\MySQL
Server
5.0\data里,代替原来的ibdata1文件。重启电脑,打开Navicat
for
MySQL,连接成功,数据可以访问操作。
至此,操作终于成功。其实当初在那台机上把数据导出来,而不是现在直接把文件夹mysql复制过来会更容易恢复。但那台机已经重装了系统,也就是说MySQL失效了。
Ⅵ 怎么通过data来恢复mysql数据
可以尝试:
1、新建一个一样名字的数据库;
2、关掉mysql,把备份的data数据覆盖进现在mysql的data中
3、启动mysql进去看看
Ⅶ 怎么恢复mysql数据库
简单情况下:进入原来mysql安装路径下的data文件夹下,找到相应的库和ibdata1,进行,就可回复原来的数据。
复杂情况下:
从另一台机上把mysql数据库的mysql文件夹拷贝到本地机上,目的是恢复本地机对数据的访问和操作。经过如下几种情况的操作。
1.
在本地重装mysql(安装目录d:\program
files\mysql\mysql
server
5.0),直接把mysql文件夹拷贝至d:\program
files\mysql\mysql
server
5.0\。结果,失败:数据库连接错误。
2.
卸载后重装mysql,将d:\program
files\mysql\mysql
server
5.0\下的数据备份,只把mysql\data文件夹全部内容拷贝到d:\program
files\mysql\mysql
server
5.0\data下。结果,失败:数据库连接错误。将备份的数据还完覆盖。结果,失败,还是连接不上数据库。
3.
卸载后重装mysql,将mysql\data文件夹里的cf1,last文件夹(这两个是原来mysql里的数据库)拷贝进d:\program
files\mysql\mysql
server
5.0\data。连接成功,在navicat
for
mysql里看到数据库cf1和last,但是不能访问,因为数据全为零。明白了原来data里以数据库命名的文件存储的是数据库的表结构,不是元数据。下一步,把data文件夹里的ibdata1文件(3.4g大,明显存储了元数据)拷贝到d:\program
files\mysql\mysql
server
5.0\data里,代替原来的ibdata1文件。重启电脑,打开navicat
for
mysql,连接成功,数据可以访问操作。
至此,操作终于成功。其实当初在那台机上把数据导出来,而不是现在直接把文件夹mysql复制过来会更容易恢复。但那台机已经重装了系统,也就是说mysql失效了。
Ⅷ 电脑重装系统后如何恢复Mysql数据库
1、把原来mysql安装目录下的data文件夹拷出来;
2、卸载掉原来的mysql;
3、重新安装mysql;
4、拷出来的data文件夹里,除了mysql、test子文件夹外的子文件夹,全部都是数据库