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. Android Design Support Library——Navigation View

    前沿 Android 从5.0开始引入了Material design元素的设计,这种新的设计语言让整个安卓的用户体验焕然一新,google在Android Design Support Librar ...

  2. 在linux下实现mysql自动备份数据

    使用的系统为CentOS,mysql版本为5.6 备份功能主要利用以下功能实现: mysql命令中的mysqldump命令 linux下脚本编写 linux下crontab定时任务的使用 首先确定你要 ...

  3. Java多线程同步集合--并发库高级应用

    一.阻塞队列1.在多线程领域,所谓阻塞,在某些情况下会挂起线程,一旦条件满足,被挂起的线程又会自动被唤醒2.ArrayBlockingQueue(效率高)和LinkedBlockingQueue是两个 ...

  4. JavaScript 片段

    js split 的用法和定义 js split分割字符串成数组的实例代码 <script language="javascript"> str="2,2,3 ...

  5. android开发学习笔记系列(5)--fragment与viewpage

    前言 在前面的博客写到我针对一个项目完成了动态布局的效果,顿时感觉很爽,那么下面我针对我在前文中所讲的tabhost的实现做出一个新的方法,tabhost基本已经被启用,现在基本使用Fragment与 ...

  6. Spring-web初始化流程简图

  7. AuthenticationManager、ProviderManager

    本篇主要讲述以下几点: 1.AuthenticationManager.ProviderManager和AuthenticationProvider三者之间的关系 2.以UsernamePasswor ...

  8. c#里面如何激活一个外部程序进程并显示在最前

    using System.Diagnostics; using System.Runtime.InteropServices; [DllImport("user32.dll")] ...

  9. Tomcat服务器的安装配置图文教程(推荐)

    现在将使用Tomcat的一些经验和心得写到这里,作为记录和备忘.如果有朋友看到,也请不吝赐教. 1.首先是Tomcat的获取和安装. 获取当然得上Apache的官方网站下载,开源免费,而且带宽也足够. ...

  10. oracle逐步学习总结之权限和角色(基础六)

    原创作品,转自请注明出处:https://www.cnblogs.com/sunshine5683/p/10236129.html 继续上节的索引,这次主要总结oracle数据库的权限问题!(在总结的 ...