从ibdata1恢复mysql数据库 [英] recover mysql database from ibdata1

查看:264
本文介绍了从ibdata1恢复mysql数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个客户端,该客户端似乎从其本地计算机上丢失了所有的mysql数据库.它们是在Mac上的,我有点不熟悉,而我在Ubuntu上.数据库文件夹中没有.MYD或.MYI文件,只有.frm文件.我让他们压缩了mysql和Sight文件夹(其中Sight是我们需要的数据库)以及ibdata1,ib_logfile0和ib_logfile1文件.我为mysql创建了另一个文件夹/var/lib/mysql2,并将文件和文件夹移到其中.我将新文件夹和文件更改为mysql:mysql,编辑/etc/mysql/my.cnf以指向新文件夹,编辑/etc/apparmor.d/usr.sbin.mysqld,然后重新启动apparmor和mysql.但是,我在mysql错误日志中收到以下错误:

  130308 17:38:16 [注意]插件'FEDERATED'已禁用.130308 17:38:16 InnoDB:初始化缓冲池,大小= 8.0M130308 17:38:16 InnoDB:缓冲池的完成初始化InnoDB:ibdata文件中的日志序列号不匹配InnoDB:ib_logfiles中的日志序列号!130308 17:38:16 InnoDB:数据库未正常关闭!InnoDB:开始崩溃恢复.InnoDB:从.ibd文件中读取表空间信息...InnoDB:从doublewrite还原可能的半写数据页InnoDB:缓冲区...130308 17:38:16 InnoDB:错误:空间ID和页面n:o存储在页面中InnoDB:读入时间是0:589824,应该是0:7!130308 17:38:16 InnoDB:错误:页面589824日志序列号786432 0InnoDB:是未来!当前系统日志序列号0 63932940.InnoDB:您的数据库可能已损坏,或者您已经复制了InnoDBInnoDB:表空间,而不是InnoDB日志文件.看InnoDB:http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.htmlInnoDB:有关更多信息.InnoDB:磁盘上的数据库页面损坏或发生故障InnoDB:从第7页读取文件.InnoDB:您可能必须从备份中恢复.130308 17:38:16 InnoDB:ascii和hex(16384字节)中的页面转储:len 16384;十六进制0008000000090000000a0000000b0000000c0000000000000000000000000000202720000(由于持续了一段时间而被剪断)Tg 9< o q E i F/D; InnoDB:页面转储结束130308 17:38:16 InnoDB:页面校验和4146777650,4.0.14之前的格式校验和1800374066InnoDB:存储的校验和524288,4.0.14之前的格式存储的校验和0InnoDB:页面lsn 786432 0,页面结尾0的低4个字节的lsnInnoDB:页码(如果已存储到页中)589824,InnoDB:空间ID(如果使用> = MySQL-4.1.1创建并已存储)0InnoDB:页面可能是新分配的页面InnoDB:磁盘上的数据库页面损坏或发生故障InnoDB:从第7页读取文件.InnoDB:您可能必须从备份中恢复.InnoDB:您的操作也有可能InnoDB:系统已损坏其自己的文件缓存InnoDB:重新启动计算机将删除InnoDB:错误.InnoDB:如果损坏的页面是索引页面InnoDB:您也可以尝试修复损坏InnoDB:通过转储,删除和重新导入InnoDB:损坏的表.您可以使用CHECKInnoDB:TABLE,用于扫描表是否损坏.InnoDB:另请参见http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.htmlInnoDB:关于强制恢复.InnoDB:由于数据库页面损坏而结束处理. 

我尝试将innodb_force_recovery = 4添加到my.cnf文件中,该文件会生成一系列不同的错误:

  130308 17:48:30 [注意]插件'FEDERATED'已禁用.130308 17:48:30 InnoDB:初始化缓冲池,大小= 8.0M130308 17:48:30 InnoDB:缓冲池的完成初始化InnoDB:ibdata文件中的日志序列号不匹配InnoDB:ib_logfiles中的日志序列号!130308 17:48:30 InnoDB:数据库未正常关闭!InnoDB:开始崩溃恢复.InnoDB:从.ibd文件中读取表空间信息...InnoDB:从doublewrite还原可能的半写数据页InnoDB:缓冲区...130308 17:48:30 InnoDB:错误:空间ID和页面n:o存储在页面中InnoDB:读入时间是0:589824,应该是0:7!130308 17:48:30 InnoDB:错误:页面589824日志序列号786432 0InnoDB:是未来!当前系统日志序列号0 63932940.InnoDB:您的数据库可能已损坏,或者您已经复制了InnoDBInnoDB:表空间,而不是InnoDB日志文件.看InnoDB:http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.htmlInnoDB:有关更多信息.InnoDB:磁盘上的数据库页面损坏或发生故障InnoDB:从第7页读取文件.InnoDB:您可能必须从备份中恢复. 

还有更多,如果有帮助,我可以提供.非常感谢您提出任何有关尝试从此处尝试的建议.


我尝试按照此处的步骤进行操作,但是在使用他使用的命令行顺序使mysql运行时遇到了问题:

http://blog.shiraj.com/2012/10/extract-data-from-mysql-ibdata1-data-file/

解决方案

以下内容适用于我:

  • 在my.cnf中设置innodb_force_recovery = 1

  • 尝试使您的mysqld重新启动.如果不是,请重复步骤1并递增直到成功为止,每个都执行innodb_force_recovery.使用该指南可帮助您了解每次递增时发生的情况:http://blog.shiraj.com/2012/10/extract-data-from-mysql-ibdata1-data-file/

    解决方案

    The following worked for my:

    • Set innodb_force_recovery = 1 in your my.cnf

    • Try and get your mysqld to restart. If not, repeat step #1 and increment innodb_force_recovery by each until successful. Use the guide to help you understand what's happening each time you increment it: http://dev.mysql.com/doc/refman/5.0/en/forcing-innodb-recovery.html

    • Once mysqld is running, try and dump all your databases

    mysqldump -u root -p --all-databases > /tmp/mysqldump-all.sql
    

    • If that isn't successful, you'll have to try it first on the database level

    mysqldump -u root -p --databases db_name > mysqldump-db_name.sql
    

    • If that isn't successful, you'll have to try it on the table level

    SELECT * FROM table_name INTO OUTFILE '/tmp/table_name.sql'

    • Once one of those is successful and either all your db's or all your tables are exported, stop the mysqld

    • Move your ib_logfile* > ib_logfile*.bak. These are typically in your mysql data directory.

    • If in the first step you incremented your innodb_force_recovery => 4, you need to set it below 4. As of 5.6.15, an innodb_force_recovery setting of 4 or greater places InnoDB in read-only mode.

    • Start the mysqld server

    • Import your exported databases or tables

    mysql -u root -p < /tmp/mysqldump-all.sql

    • Incremented your innodb_force_recovery => 1

    • Restart the mysqld server

    这篇关于从ibdata1恢复mysql数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆