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的更多相关文章

  1. MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据

    记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...

  2. MySQL 利用frm文件和ibd文件恢复表结构和表数据

    文章目录 frm文件和ibd文件简介 frm文件恢复表结构 ibd文件恢复表数据 通过脚本利用ibd文件恢复数据 通过shell脚本导出mysql所有库的所有表的表结构 frm文件和ibd文件简介 在 ...

  3. mysql innodb 从 ibd 文件恢复表数据

    最近内部的 mysql 数据库发生了一件奇怪的事,其中有一个表 users625 突然出现问题, 所有对它的操作都报错误 数据表不存在. mysql> select count(*) from ...

  4. mysql5.7根据.frm和.ibd文件恢复表结构和数据

    一.恢复表结构 1.环境:Windows .mysql5.7:首先创建一个数据库,可以通过navicat来创建:     2.使用当前创建的数据库:use ww; 3.随意创建一张表,但是这张表的名字 ...

  5. 获取表空间的语句 以及 建表和索引的ddl

    alter session set container=PHD1; SET SERVEROUTPUT ON SET LINESIZE SET FEEDBACK OFF SET PAGESIZE sel ...

  6. 通过Oracle DUMP 文件获取表的创建语句

    1. 有了dump文件之后 想获取表的创建语句. 之前一直不知道 dump文件能够直接解析文件. 今天学习了下 需要的材料. dump文件, dump文件对应的schema和用户. 以及一个版本合适的 ...

  7. oracle创建表空间 扩展表空间文件 修改表空间自动增长

    1. 创建表空间 create tablespace SIRM2  datafile 'D:\oracle\product\10.2.0\oradata\orcl\SIRM2.dbf' size 10 ...

  8. mssql 获取表空间大小

    create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_ ...

  9. MYSQL获取表空间大小

    SELECT table_name AS "Table", round(((data_length + index_length) / 1024 / 1024), 2) as si ...

随机推荐

  1. 神经网络优化方法总结:SGD,Momentum,AdaGrad,RMSProp,Adam

    1. SGD Batch Gradient Descent 在每一轮的训练过程中,Batch Gradient Descent算法用整个训练集的数据计算cost fuction的梯度,并用该梯度对模型 ...

  2. java-数组连接的几种方式

    多个数组进行拼接, 1, 使用java自己的 System#arrayCopy() byte[] message = new byte[heads.length + result.length + b ...

  3. Nginx缓存配置

    访问我的博客 前言 本文介绍利用 nginx 的 nginx_ngx_cache_purge 模块来实现缓存功能,前几篇文章介绍了 Nginx 的动静分离以及 CDN 技术,在其基础上,再对整个页面进 ...

  4. linux weblogic 控制台进入缓慢

    实际是JVM在Linux下的bug 他想调用一个随机函数 但取不到 暂时的解决办法是 1)较好的解决办法: 在Weblogic启动参数里添加 “- Djava.security.egd=file:/d ...

  5. 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法

    [试题描述]:  给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...

  6. java中数据的传递方式到底是怎样的!

    今天早上我了一道有关java的题.主要考点是考java中值得传递方式. 之前我在javaoo里总结的是:基本数据类型中保存的是实际的值,引用数据类型保存的是被引用的内存地址,那么基本数据类型就是按值传 ...

  7. Java设计模式学习记录-原型模式

    前言 最近一直在面试,也没时间写博客了,感觉已经积攒了好多知识想要记录下来了,因为在面试中遇到的没答出来的问题,这就是自己不足的地方,然后就要去学习这部分内容,虽然说自己不足的地方学习了,但是没有应用 ...

  8. UVa 442 Matrix Chain Multiplication(栈的应用)

    题目链接: https://cn.vjudge.net/problem/UVA-442 /* 问题 输入有括号表示优先级的矩阵链乘式子,计算该式进行的乘法次数之和 解题思路 栈的应用,直接忽视左括号, ...

  9. aspnetmvc和aspnetcoremvc的一些区别

    1.路由 控制器添加特性:  [RoutePrefix("api/controller")]  = >   [Route("api/[controller]&quo ...

  10. Claim-Based Identity for Windows: Technologies and Scenarios

    Claim-Based Identity for Windows: Technologies and Scenarios Active Diretory Federation Services 2.0 ...