2013-03-08 332 views
4

我有一个客户端似乎已经从他们的本地机器丢失了所有的mysql数据库。他们在Mac上,我有点不熟悉,我在Ubuntu上。数据库文件夹中没有.MYD或.MYI文件,只有.frm文件。我让他们将mysql和视域文件夹(视为我们需要的数据库)以及ibdata1,ib_logfile0和ib_logfile1文件进行压缩。我为mysql创建了第二个文件夹/ var/lib/mysql2,并将文件和文件夹移动到那里。我将新文件夹和文件加入到mysql:mysql,编辑/etc/mysql/my.cnf指向新文件夹,编辑/etc/apparmor.d/usr.sbin.mysqld,然后重新启动apparmor和mysql。不过,我收到以下错误在mysql错误日志:从ibdata1恢复mysql数据库

130308 17:38:16 [Note] Plugin 'FEDERATED' is disabled. 
130308 17:38:16 InnoDB: Initializing buffer pool, size = 8.0M 
130308 17:38:16 InnoDB: Completed initialization of buffer pool 
InnoDB: The log sequence number in ibdata files does not match 
InnoDB: the log sequence number in the ib_logfiles! 
130308 17:38:16 InnoDB: Database was not shut down normally! 
InnoDB: Starting crash recovery. 
InnoDB: Reading tablespace information from the .ibd files... 
InnoDB: Restoring possible half-written data pages from the doublewrite 
InnoDB: buffer... 
130308 17:38:16 InnoDB: Error: space id and page n:o stored in the page 
InnoDB: read in are 0:589824, should be 0:7! 
130308 17:38:16 InnoDB: Error: page 589824 log sequence number 786432 0 
InnoDB: is in the future! Current system log sequence number 0 63932940. 
InnoDB: Your database may be corrupt or you may have copied the InnoDB 
InnoDB: tablespace but not the InnoDB log files. See 
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html 
InnoDB: for more information. 
InnoDB: Database page corruption on disk or a failed 
InnoDB: file read of page 7. 
InnoDB: You may have to recover from a backup. 
130308 17:38:16 InnoDB: Page dump in ascii and hex (16384 bytes): 
len 16384; hex 0008000000090000000a0000000b0000000c00000000000000000000000202720000 (snipped because this goes on for a while) 
                       Tg 9 <o q      E    i F / D    ;InnoDB: End of page dump 
130308 17:38:16 InnoDB: Page checksum 4146777650, prior-to-4.0.14-form checksum 1800374066 
InnoDB: stored checksum 524288, prior-to-4.0.14-form stored checksum 0 
InnoDB: Page lsn 786432 0, low 4 bytes of lsn at page end 0 
InnoDB: Page number (if stored to page already) 589824, 
InnoDB: space id (if created with >= MySQL-4.1.1 and stored already) 0 
InnoDB: Page may be a freshly allocated page 
InnoDB: Database page corruption on disk or a failed 
InnoDB: file read of page 7. 
InnoDB: You may have to recover from a backup. 
InnoDB: It is also possible that your operating 
InnoDB: system has corrupted its own file cache 
InnoDB: and rebooting your computer removes the 
InnoDB: error. 
InnoDB: If the corrupt page is an index page 
InnoDB: you can also try to fix the corruption 
InnoDB: by dumping, dropping, and reimporting 
InnoDB: the corrupt table. You can use CHECK 
InnoDB: TABLE to scan your table for corruption. 
InnoDB: See also http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html 
InnoDB: about forcing recovery. 
InnoDB: Ending processing because of a corrupt database page. 

我曾尝试加入innodb_force_recovery = 4到my.cnf文件,产生不同的错误整体转换:

130308 17:48:30 [Note] Plugin 'FEDERATED' is disabled. 
130308 17:48:30 InnoDB: Initializing buffer pool, size = 8.0M 
130308 17:48:30 InnoDB: Completed initialization of buffer pool 
InnoDB: The log sequence number in ibdata files does not match 
InnoDB: the log sequence number in the ib_logfiles! 
130308 17:48:30 InnoDB: Database was not shut down normally! 
InnoDB: Starting crash recovery. 
InnoDB: Reading tablespace information from the .ibd files... 
InnoDB: Restoring possible half-written data pages from the doublewrite 
InnoDB: buffer... 
130308 17:48:30 InnoDB: Error: space id and page n:o stored in the page 
InnoDB: read in are 0:589824, should be 0:7! 
130308 17:48:30 InnoDB: Error: page 589824 log sequence number 786432 0 
InnoDB: is in the future! Current system log sequence number 0 63932940. 
InnoDB: Your database may be corrupt or you may have copied the InnoDB 
InnoDB: tablespace but not the InnoDB log files. See 
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html 
InnoDB: for more information. 
InnoDB: Database page corruption on disk or a failed 
InnoDB: file read of page 7. 
InnoDB: You may have to recover from a backup. 

和更多,如果有帮助,我可以提供。有什么建议在这里尝试将不胜感激,谢谢。

-Michael

编辑:我尝试以下步骤在这里,但有使MySQL使用他使用的命令行程序运行的问题:

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

回答

3

以下为我工作:

  • 在你的my.cnf设置innodb_force_recovery = 1

  • 试着让你的mysqld重启。如果不是,则重复步骤#1并每次递增 innodb_force_recovery直到成功。使用指南,帮助您了解每一次发生了什么,你增加它:http://dev.mysql.com/doc/refman/5.0/en/forcing-innodb-recovery.html

  • 一旦mysqld正在运行,尝试和转储所有的数据库

mysqldump -u root -p --all-databases > /tmp/mysqldump-all.sql 
  • 如果不成功,您必须首先在数据库级别尝试它
mysqldump -u root -p --databases db_name > mysqldump-db_name.sql 
  • 如果没有成功,你必须尝试它放在桌子上水平

SELECT * FROM TABLE_NAME INTO OUTFILE“/tmp/table_name.sql “

  • 一旦其中的一个是成功的,无论是你所有的d b或所有表都已导出,请停止mysqld移动您的ib_logfile *> ib_logfile * .bak。这些通常在你的mysql数据目录中。

  • 如果在第一步中增加了innodb_force_recovery => 4,则需要将其设置为低于4.从5.6.15开始,innodb_force_recovery设置为4或更大将InnoDB置于只读模式。

  • 启动mysqld服务器

  • 导入导出的数据库或表

的mysql -u根-p < /tmp/mysqldump-all.sql

  • 增加你的innodb_force_recovery => 1

  • 重新启动mysqld服务器

+0

太谢谢你了。我可以通过这个答案来恢复我的数据。 – shgnInc 2015-05-10 08:35:08