Mysql – InnoDB “corruption”

corruptioninnodbMySQL

I use:

  • 5.1.63-0ubuntu0.11.10.1
  • Apache/2.2.20 (Ubuntu)
  • MySQL client version: 5.1.63

The system is continuously displaying the following error during reading data from a MySQL database:

InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 387794.

After rebooting the system, I can regain access to the database and read
the "problematic" data without any problem for a few minutes or hours until
the same problem re-appears (for different data read attempts).

Any idea on the source of the problem?

  1. I have checked the HDD with S.M.A.R.T utility and I could not find any problem.
  2. I deactivate AppArmor without any result.
  3. I also tried SQL_NO_CACHE option in the query without any result
120918 13:07:06  InnoDB: Page checksum 3504102879, prior-to-4.0.14-form checksum 1216630776
InnoDB: stored checksum 2100325079, prior-to-4.0.14-form stored checksum 1216630776
InnoDB: Page lsn 2 1168743501, low 4 bytes of lsn at page end 1168743501
InnoDB: Page number (if stored to page already) 387794,
InnoDB: space id (if created with >= MySQL-4.1.1 and stored already) 0
InnoDB: Page may be an index page where index id is 0 175
InnoDB: (index "PRIMARY" of table "OII"."dataset_cs_1")
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 387794.
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.
120918 13:07:07 [Note] Plugin 'FEDERATED' is disabled.
120918 13:07:07  InnoDB: Initializing buffer pool, size = 64.0M
120918 13:07:07  InnoDB: Completed initialization of buffer pool
InnoDB: Log scan progressed past the checkpoint lsn 2 2380293142
120918 13:07:07  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...
InnoDB: Doing recovery: scanned up to log sequence number 2 2380293162
120918 13:07:07  InnoDB: Started; log sequence number 2 2380293162
120918 13:07:07 [Note] Event Scheduler: Loaded 0 events
120918 13:07:07 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.1.63-0ubuntu0.11.10.1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)

Best Answer

Rebooting temporarily clears the problem, and the error moves around... this strongly points to defective system RAM causing corruption of the OS cache.

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.

You likely already know this part, but with Ubuntu, on startup, select "Memory test (memtest86+)" to verify. If you don't normally see the GRUB boot menu, you should be able to hold left-shift as it first starts up.

Related Question