MySQL:错误排序规则“正在使用”并且无法加载表

Posted

技术标签:

【中文标题】MySQL:错误排序规则“正在使用”并且无法加载表【英文标题】:MySQL: error collation "in use" and table could not be loaded 【发布时间】:2016-06-18 14:03:52 【问题描述】:

我的VPS 已安装cPanel。今天突然不行了,VPS上的所有Wordpress网站都显示错误:

This webpage has a redirect loop
ERR_TOO_MANY_REDIRECTS

并自动重定向到wp-admin/install.php。 我登录到 phpmyadmin,然后看到一些表有 collat​​ion "in use"(不是 "utf8_general_ci" 像通常那样)。错误无法加载:

#1286 - Unknown storage engine 'InnoDB'".

那么如何解决这个错误呢? 谢谢你的帮助!

【问题讨论】:

1.您的帖子中没有问题,只是一系列错误。 2. 如果昨天一切正常,而今天不再工作,那么您可能应该询问您的提供商/系统管理员他们对您的站点做了什么。 对不起,我的英语不好。但这是我的 VPS,所以提供商不支持。我自己安装的。现在上面有一些错误,但我不知道如何修复它。感谢您的帮助! 【参考方案1】:

我遇到了同样的问题,这个问题是因为您的 innoDB 已损坏,并且您使用 innoDB 表的所有数据库都显示正在使用中。

要解决此问题,您需要按照以下步骤操作

要获得 100% 干净的表空间,您需要使用 innodb_force_recovery=4 启动 mysql,使用 mysqldump 并在新的 InnoDB 实例上恢复它(我的意思是您必须删除 ibdata1 和所有数据库目录)。

更新:

此时 MySQL 以 innodb_force_recovery=x (x != 0) 启动

转储所有数据库:

mysqldump --skip-lock-tables -A > alldb.sql

检查 MySQL 保存文件的位置(在我的例子中是 /var/lib/mysql/):

mysql -NBe "SELECT @@datadir"

/var/lib/mysql/ 停止 MySQL

mysqladmin 关闭

将旧的 MySQL 文件移动到安全的地方

mv /var/lib/mysql /var/lib/mysql.old

新建系统数据库

mkdir /var/lib/mysql

mysql_install_db

启动 MySQL

/etc/init.d/mysql启动

恢复转储

mysql

如果数据库很大,恢复可能需要很长时间。

在这种情况下,另一个技巧可能会奏效。在每个 InnoDB 表上运行 ALTER TABLE ... ENGINE INNODB。它将重建所有 InnoDB 索引,因此错误将消失。

++++++++++++++++++++++++++++++++++++++++++++++++++ ++

另一个解决方案是从备份中恢复数据库。

为此,您首先需要删除 ibdata1 文件

cd /var/lib/mysql

rm -f ibdata1

然后使用以下命令一一恢复所有数据库

mysql -u 用户名 -p 数据库名

++++++++++++++++++++++++++++++++++++++++++++++++++ +++

【讨论】:

第一个 cmd mysqldump --skip-lock-tables -A > alldb.sql 显示错误:Could't execute 'show fields from 'wp_1_department_hours'': Can't create/write to file '/tmp/#sql_2128_0.MYI'(错误代码:13)。有什么错误,我该如何解决?感谢您的帮助! 你有数据库备份吗?

以上是关于MySQL:错误排序规则“正在使用”并且无法加载表的主要内容,如果未能解决你的问题,请参考以下文章

mysql 表导入向导无法导入 csv 文件

如何识别MySQL归类问题

mysql 字符集 utf 8 排序规则(dup 键)无法正常工作

MySQL - 错误 1071 阻止更改字符集/排序规则,“指定的键太长......”

错误 1728 (HY000): 无法从 mysql.user 加载。该表可能已损坏

解决MySQL联表时出现字符集不一样