Article ID: 6586, created on May 21, 2012, last review on Mar 31, 2016

  • Applies to:
  • Plesk

问题

1) Parallels Plesk Panel 中会显示以下错误:

ERROR: PleskMainDBException
MySQL query failed: Incorrect information in file: './psa/misc.frm'

0: /usr/local/psa/admin/plib/common_func.php3:211
        db_query(string 'select param, val from misc')
1: /usr/local/psa/admin/plib/common_func.php3:490
        get_param(string 'login_timeout')
2: /usr/local/psa/admin/plib/class.Session.php:120
        Session->Session()
3: /usr/local/psa/admin/auto_prepend/auth.php3:155


2) mysqldump mysqlcheck 失败并出现错误,提示一个表格不存在。例如:

~# mysqlcheck -uadmin -p`cat /etc/psa/.psa.shadow` psa
psa.BackupTasks
error    : Can't find file: 'BackupTasks.MYD' (errno: 2)
psa.BackupsObjects
error    : Can't find file: 'BackupsObjects.MYD' (errno: 2)
psa.BackupsRunning
error    : Incorrect information in file: './psa/BackupsRunning.frm'
psa.BackupsScheduled
error    : Incorrect information in file: './psa/BackupsScheduled.frm'
psa.BackupsSettings
...


3) 不能通过 "SELECT" 语句正确查询一个表格。例如:

mysql> select * from psa.misc;
ERROR 1033 (HY000): Incorrect information in file: './psa/misc.frm'

mysql>


4. 该表格无法修复因为 InnoDB 引擎确实不支持修复。

mysql> repair table misc;
+-------------------------+--------+----------+---------------------------------------------------------+
| Table                   | Op     | Msg_type | Msg_text                                                |
+-------------------------+--------+----------+---------------------------------------------------------+
| psa.APSApplicationItems | repair | note     | The storage engine for the table doesn't support repair |
+-------------------------+--------+----------+---------------------------------------------------------+
1 row in set (0.01 sec)

mysql>

原因

InnoDB 数据库引擎已损坏。 

解决方案

若要解决此问题,建议您恢复 InnoDB 引擎。但是恢复可能会失败。如果这样的话,建议从备份恢复数据库。如要恢复 InnoDB 引擎,建议转储所有的数据库,移除数据库与损坏的 InnoDB 文件,重新创建一个基础的 mysql 引擎,并从转储恢复数据库。

根据以下说明执行恢复:

1) 停止 mysqld 并备份位于 /var/lib/mysql/ 所有的数据库文件:

~# /etc/init.d/mysqld stop
~# mkdir /root/mysql_backup
~# cp -r /var/lib/mysql/* /root/mysql_backup/


2) 添加选项 innodb_force_recovery  至 MySQL  配置文件中的 [mysqld] 部分。这个选项将允许您启动 mysql 与创建数据库转储。例如,在 /etc/my.cnf 中:

 /etc/my.cnf
---8<---
[mysqld]
innodb_force_recovery = 4
--->8---


注意:您可增加选项从 1 到 2、3 到 6,直到您收到合适的转储。请在此处查看详情 

3) 启动 mysqld 服务:

~# /etc/init.d/mysqld start

4) 为所有的数据库创建一个转储,例如:

~# mysqldump -uadmin -p`cat /etc/psa/.psa.shadow` -A > dump.sql

如果转储失败并出现错误(例如 "Incorrect information in file: './psa/APSApplicationItems.frm' when using LOCK TABLES"),请尝试增加 innodb_force_recovery 并重新转储数据库。

5) 现在重新创建主要的数据库 "mysql" 与 InnoDB 引擎。如要实现此操作,需停止 mysqld:

~# /etc/init.d/mysqld stop

6) 移除 /var/lib/mysql/ 的内容。(确定您有所有的实际转储或在第 1 部分备份的最近复制的目录副本):

~# rm -rf /var/lib/mysql/*

7) 移除  /etc/my.cnf  中的选项 innodb_force_recovery

8) 启动 mysqld:

~# /etc/init.d/mysqld start

这可重新创建主要的 MySQL 数据库 "mysql" 与 InnoDB 引擎数据库。您可看到在 /var/lib/mysql/ 中已创建了数据库文件。但是注意只重新创建了默认的 MySQL 配置。所有自定义数据库应该从备份恢复。

9) 从转储恢复数据库:

~# mysql -uadmin -p`cat /etc/psa/.psa.shadow` < dump.sql

如果损坏的无法通过 innodb_force_recovery 的最高值进行恢复,而且要创建转储,那么数据库应该从备份进行恢复。

Parallels Plesk Panel 数据库的日常备份保存于备份目录 DUMP_D 中。例如:

~# ls -l /var/lib/psa/dumps
total 1444
-rw------- 1 root   root   141960 Aug  8 01:03 mysql.daily.dump.0.gz
-rw------- 1 root   root   141925 Aug  7 01:03 mysql.daily.dump.1.gz
-rw------- 1 root   root   141883 Aug  6 01:03 mysql.daily.dump.2.gz
-rw------- 1 root   root   141990 Aug  5 01:04 mysql.daily.dump.3.gz
-rw------- 1 root   root   142114 Aug  4 01:03 mysql.daily.dump.4.gz
-rw------- 1 root   root   142113 Aug  3 01:03 mysql.daily.dump.5.gz
-rw------- 1 root   root   142350 Aug  2 01:03 mysql.daily.dump.6.gz
-rw------- 1 root   root   143188 Aug  1 01:03 mysql.daily.dump.7.gz
-rw------- 1 root   root   143208 Jul 31 01:03 mysql.daily.dump.8.gz
~#


使用以下命令从最新备份 mysql.daily.dump.0.gz 恢复数据库:

~# zcat /var/lib/psa/dumps/mysql.daily.dump.0.gz | mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa

其他信息

您在恢复数据库时可能会超时。添加选项 wait_timeout 至 /etc/my.cnf 中:

/etc/my.cnf
---8<---
[mysqld]
wait_timeout = 1800
--->8---


并重启 mysqld 服务:

~# /etc/init.d/mysqld restart

其他信息

也可查看文章 Parallels Plesk Panel cannot be opened with error "MySQL query failed: Incorrect information in file: './psa/misc.frm'"

56797cefb1efc9130f7c48a7d1db0f0c a914db3fdc7a53ddcfd1b2db8f5a1b9c caea8340e2d186a540518d08602aa065 e0aff7830fa22f92062ee4db78133079 400e18f6ede9f8be5575a475d2d6b0a6

Email subscription for changes to this article