A solution for MySQL Assertion failure FIL_NULL
A solution for MySQL Assertion failure FIL_NULL
http://michaelfranzl.com/2014/01/25/solution-mysql-assertion-failure-fil_null/
A defective RAM module recently caused data corruption in MySQL tables. MySQL would log the following to /var/log/syslog in regular intervals, about every few minutes:
1
2
3
|
140125 5:04:41 InnoDB: Assertion failure in thread 140046518261504 in file fut0lst.ic line 83
InnoDB: Failing assertion: addr.page == FIL_NULL || addr.boffset >= FIL_PAGE_DATA
InnoDB: We intentionally generate a memory trap.
|
Reading MySQL documentation and various blogs didn’t help much. I ran CHECK TABLES on all the tables and they all reported OK. Then I ran
1
|
mysqlcheck --all-databases
|
and still all tables reported OK. Nevertheless the Assertion Failures continued. Then I stumbled across this excellent blog post, which suggested to dump evertying into a .sql file, wipe/var/lib/mysql (not without making a backup, mind you!), and re-import everything from scratch. This is what I did and it worked.
I recorded the passwords for each database and collected it into a SQL script like this:
1
2
3
|
GRANT ALL PRIVILEGES ON database_name1 TO ‘username1‘@‘localhost‘ IDENTIFIED BY ‘password1‘;
GRANT ALL PRIVILEGES ON database_name2 TO ‘username2‘@‘localhost‘ IDENTIFIED BY ‘password2‘;
etc.
|
When you dump all databases into a .sql file, it will not dump the permissions, so you will need to restore them later with this script. Next, the dumping part, then removal and reinstallation of mysql (Danger here: When you remove mysql-server, all packges which depend on it also will be removed!):
1
2
3
4
5
6
|
cd ~
mysqldump -u root -ppass --all-databases > alldbs.sql
cd /var/lib
cp -vpr mysql mysql-backup
apt-get remove --purge mysql-server-5.5
apt-get install mysql-server
|
Here, I had to reset the MySQL admin password because it didn’t work any more, so I ran:
1
|
dpkg-reconfigure mysql-server-5.5
|
Then, I re-imported all databases from the dump file:
1
2
|
cd ~
mysql -u root -ppass < alldbs.sql
|
Then I run the SQL permission script that I mention above.
For me, this resulted in no more Assertion Failures. Yay!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。