MySQL:致命错误:无法打开和锁定权限表:表'mysql.host'不存在

MySQL:致命错误:无法打开和锁定权限表:表'mysql.host'不存在

突然间,我的本地 MySQL 5.5 服务器在 Windows XP SP3 上停止运行。

我还安装了 WAMP Apache 和 WAMP MySQL,但 WAMP MySQL 没有运行。错误日志显示:

  • 无法启动服务器:绑定在 TCP/IP 端口上:没有此文件或目录
  • 您是否已经在端口 3306 上运行另一个 mysqld 服务器?

我尝试将端口从 3306 更改为 3307,但服务仍然无法启动,并出现错误:

事件查看器显示:

  • 致命错误:无法打开和锁定权限表:表'mysql.host'不存在
  • 无法打开 mysql.plugin 表。请运行 mysql_upgrade 来创建它。

显然,我只能在服务器运行时运行 mysql_upgrade。如果服务无法启动,我该如何创建“mysql.host”?

我卸载了 MySQL 服务器并重新安装它,在安装后的配置向导中,我收到一个错误:无法启动服务。错误:0。

我下一步该怎么做?

答案1

运行以下命令

mysql_install_db

答案2

在 Windows 上启动之前初始化 mysql。

mysqld --initialize

答案3

您需要做的第一件事是运行以下命令:

use mysql
show tables;

请注意差异

MySQL 5.0 在 mysql 模式中有 17 个表

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| procs_priv                |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

MySQL 5.1 在 mysql 模式中有 23 个表

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

MySQL 5.5 在 mysql 模式中有 24 个表

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

请注意,mysql.plugin 在 MySQL 5.0 中不存在。可以推测,您以某种方式安装了 MySQL 5.0,并导致 MySQL 5.5 的重要表消失。

这是个好消息。你可以尝试一下。

对于此示例

  • ServerA 是 MySQL 5.5 数据所在位置
  • ServerB 是创建单独 MySQL 5.5 环境的地方

以下是您的步骤

  1. 在 ServerA 上,mkdir /root/myusers
  2. 在 ServerA 上,cp /var/lib/mysql/mysql/user.* /root/myusers/。
  3. 在ServerB上安装MySQL 5.5
  4. scp 服务器B:/var/lib/mysql/mysql/* 服务器A:/var/lib/mysql/mysql/。
  5. 在 ServerA 上,cp /root/myusers/user.* /var/lib/mysql/mysql/。
  6. 服务 mysql 启动

就是这样。

如果您在 Windows 中运行它,则必须应用相同的原则。

试一试 !!!

更新时间:2011-07-29 16:15 EDT

如果你的用户名有数据库特定权限,请按照以下步骤操作

  1. 在 ServerA 上,mkdir /root/myusers
  2. 在 ServerA 上,cp /var/lib/mysql/mysql/user.* /root/myusers/。
  3. 在 ServerA 上,cp /var/lib/mysql/mysql/db.* /root/myusers/。
  4. 在ServerB上安装MySQL 5.5
  5. scp 服务器B:/var/lib/mysql/mysql/* 服务器A:/var/lib/mysql/mysql/。
  6. 在 ServerA 上,cp /root/myusers/* /var/lib/mysql/mysql/。
  7. 服务 mysql 启动

答案4

看起来你已经在运行 mysql

尝试

ps ax|grep mysql

如果您看到一些输出,可能您需要停止它(或重新启动盒子)。

如果您没有看到任何输出,请尝试运行不使用 demonize 的 mysqld 并查看输出。

相关内容