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);
}

最新文章

  1. 尽量用goto代替尾递归
  2. UVA11987Almost Union-Find(并查集删除节点)
  3. linux查看常用操作
  4. The available repos for opensuse13.2
  5. org.springframework.web.context.ContextLoaderListen 报错解决办法
  6. PHP中数组合并的两种方法及区别介绍
  7. Smart20学习记录----异步通知
  8. Java 基础-运算符
  9. 沈逸老师PHP魔鬼特训笔记(5)
  10. HttpContext
  11. html不同文档类型支持的元素标签
  12. BearSkill实用方法之UITextField限制输入的字符数量
  13. 我的开源框架之TAB控件
  14. LinearGradientBrush,RadialGradientBrush的样式说明
  15. poj-1273(最大流)
  16. WIN7/XP用注册表关联指定后缀名和打开程序(手动【图文】和C编程两种实现)
  17. es6proxy
  18. leetcode-递增的三元子序列
  19. 图像质量评估(IQA)
  20. WP8.1学习系列(第二十章)——添加控件和处理事件

热门文章

  1. JVM(四)JVM的双亲委派模型
  2. Element ui tree结合Vue使用遇到的一些问题(一)
  3. Liferay7.0与cas单点登录配置
  4. CentOS 6.5 网络服务器功能的实现①:运用bind搭建基本的DNS服务器
  5. 深入理解.sync修饰符
  6. guava EventBus 消息总线的运用
  7. MySQL问答整理
  8. android开发学习笔记系列(5)--fragment与viewpage
  9. Eclipse 处理 IOConsole Updater 报错
  10. Git 使用SSH密钥操作