我有一个客户似乎从本地计算机上丢失了所有的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错误日志中收到以下错误:
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.
还有更多,如果它有帮助我可以提供。任何有关如何尝试的建议都将非常感谢,谢谢。
编辑:我尝试按照这里的步骤进行操作,但是在使用他使用的命令行序列运行mysql时遇到了问题:
http://blog.shiraj.com/2012/10/extract-data-from-mysql-ibdata1-data-file/
答案 0 :(得分:7)
以下是我的工作:
在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&#39; /tmp/table_name.sql'
一旦其中一个成功并且您的所有数据库或所有表都被导出,请停止mysqld
移动您的ib_logfile *&gt; ib_logfile名为* .bak。这些通常位于您的mysql数据目录中。
如果在第一步中你增加了你的innodb_force_recovery =&gt; 4,你需要将它设置为4.从5.6.15开始,innodb_force_recovery设置为4或更高,将InnoDB置于只读模式。
启动mysqld服务器
导入导出的数据库或表格
mysql -u root -p&lt; /tmp/mysqldump-all.sql
增加你的innodb_force_recovery =&gt; 1
重启mysqld服务器
答案 1 :(得分:0)
这对我有用: