从ibd文件获取表空间id
xtrabackup恢复过程中出现如下错误
InnoDB: Doing recovery: scanned up to log sequence number ( %)
InnoDB: Doing recovery: scanned up to log sequence number ( %)
:: InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: :: InnoDB: Error: space id and page n:o stored in the page
InnoDB: read in are :, should be :!
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page .
InnoDB: You may have to recover from a backup.
:: InnoDB: Page dump in ascii and hex ( bytes):
从错误信息中可以看出,有页损坏了,并给出了space id和page no (51,8406774).
在非共享表空间(即innodb_file_per_table=on)时,每个表对应一个表空间。那么我们怎么通过表空间id(即space id)得到对应的表呢?
在mysql 5.6以上版本中,可通过查询information_schema.INNODB_SYS_DATAFILES得到表空间id和表的对应关系,
http://dev.mysql.com/doc/refman/5.6/en/innodb-sys-datafiles-table.html
mysql> select * from information_schema.INNODB_SYS_DATAFILES where space=;
+-------+---------------+
| SPACE | PATH |
+-------+---------------+
| | .\test\t2.ibd |
+-------+---------------+
然而出现此问题的mysql版本为5.1.那么我们怎么得到5.6以下版本表空间id和表的对应关系呢。
从源码中可以看到,每个表空间第一个页的偏移38字节处,用4个字节存储了表空间id信息。参看函数fsp_header_init_fields
于是写了个小工具直接从idb文件读取表空间id信息。
例如获取表t1的表空间为795
$ sudo ./test /u01/mysql/data/test/t1.ibd
spaceid: , file:/u01/mysql/data/test/t1.ibd
工具源码如下:
#include "stdlib.h"
#include "stdio.h" #ifdef _WIN64
typedef unsigned __int64 ulint;
#else
typedef unsigned long int ulint; #endif /* _WIN64 */ typedef unsigned char byte; ulint
mach_read_from_4(
byte* b) /*!< in: pointer to four bytes */
{
return( ((ulint)(b[]) << )
| ((ulint)(b[]) << )
| ((ulint)(b[]) << )
| (ulint)(b[])
);
} void main(int argc,char *argv[])
{
FILE *fp;
byte ret[];
int offset;
ulint spaceid; if ((fp=fopen(argv[],"r"))==NULL)
{
printf("cannot open this file\n");
exit();
} offset=;
if (fseek(fp,offset,)!=)
{
printf("cannot move pointer there.\n");
exit();
} fread(ret,sizeof(byte),,fp);
spaceid = mach_read_from_4(ret); printf("spaceid:%lu , file:%s\n",spaceid,argv[]); fclose(fp);
}
从ibd文件获取表空间id的更多相关文章
- MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...
- MySQL 利用frm文件和ibd文件恢复表结构和表数据
文章目录 frm文件和ibd文件简介 frm文件恢复表结构 ibd文件恢复表数据 通过脚本利用ibd文件恢复数据 通过shell脚本导出mysql所有库的所有表的表结构 frm文件和ibd文件简介 在 ...
- mysql innodb 从 ibd 文件恢复表数据
最近内部的 mysql 数据库发生了一件奇怪的事,其中有一个表 users625 突然出现问题, 所有对它的操作都报错误 数据表不存在. mysql> select count(*) from ...
- mysql5.7根据.frm和.ibd文件恢复表结构和数据
一.恢复表结构 1.环境:Windows .mysql5.7:首先创建一个数据库,可以通过navicat来创建: 2.使用当前创建的数据库:use ww; 3.随意创建一张表,但是这张表的名字 ...
- 获取表空间的语句 以及 建表和索引的ddl
alter session set container=PHD1; SET SERVEROUTPUT ON SET LINESIZE SET FEEDBACK OFF SET PAGESIZE sel ...
- 通过Oracle DUMP 文件获取表的创建语句
1. 有了dump文件之后 想获取表的创建语句. 之前一直不知道 dump文件能够直接解析文件. 今天学习了下 需要的材料. dump文件, dump文件对应的schema和用户. 以及一个版本合适的 ...
- oracle创建表空间 扩展表空间文件 修改表空间自动增长
1. 创建表空间 create tablespace SIRM2 datafile 'D:\oracle\product\10.2.0\oradata\orcl\SIRM2.dbf' size 10 ...
- mssql 获取表空间大小
create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_ ...
- MYSQL获取表空间大小
SELECT table_name AS "Table", round(((data_length + index_length) / 1024 / 1024), 2) as si ...
随机推荐
- Git基本命令学习
Git是一个由林纳斯·托瓦兹为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件,如今已经超越CVS.SVN称为主流的版本控制器.许多著名的开源项目都用Git管理,比较火的托管服务 ...
- 全网最详细的hive-site.xml配置文件里如何添加达到Hive与HBase的集成,即Hive通过这些参数去连接HBase(图文详解)
不多说,直接上干货! 一般,普通的情况是 全网最详细的hive-site.xml配置文件里添加<name>hive.cli.print.header</name>和<na ...
- 删除qq互联
1.删除source/plugin 下的文件qqconnect文件夹 2.删除数据: DELETE FROM `dn_common_plugin` WHERE `identifier` = 'qqco ...
- 开启curl函数功能
先打开php.ini文件 然后找到extension=php_curl.dll 这句话 然后把前面的:去掉,再重启apache服务 即可!
- 【原创】Jquery初体验二
快速导航 一.传统方式生成Table 二.使用jquery.tmpl插件快速生成Table 三.Jquery中的操作class的几个方法 四:jq里面的克隆 五:属性过滤器 六:表单元素过滤器 一.传 ...
- angular $q promise详解
前言 通过本文,你大概能清楚angular promise是个啥,$q又是个啥,以及怎么用它.这里咱们先灌输下promise的思想. 下面写的全是废话,一些看着高逼格其实没什么大作用的概念,想知道$q ...
- Docker基础教程(安装篇)
Linux安装: 1.yum -y install docker-io 2.service docker start 3.chkconfig docker on Window安装: Docker 引擎 ...
- Python时间系统
Python的time和datetime模块提供了时间日期工具, python中的时间有4种表示方式: datetime obj time obj/tuple posix timestamp time ...
- C# Azure 设置云端应用程序的默认时间
在微软云Azure中,应用程序(website)的默认时间是按照美国UTC的时间的. 例如,在应用程序中获取DateTime.Now,的时候,是获取UTC的时间,不是中国的时间. 所以我们开始在这里设 ...
- textarea 滚动条属性设置
转载:http://www.cnblogs.com/JensonBin/archive/2011/02/23/1962099.html scrollbar属性.样式详解1.overflow内容溢出时的 ...