MySQL:致命错误:无法打开和锁定特权表:表'mysql.host'不存在[关闭]


9

我的本地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 Server并重新安装它,在安装后的配置向导中,我收到一个错误消息:无法启动该服务。错误:0。

我如何从这里开始?


史蒂夫(Steve)是否在Windows,BSD,Linux,OSX或其他某些操作系统上运行此程序?如果您在Windows上运行它,则某些步骤的详细信息将有所不同。
里克·施耐德

@Rik Schneider:Rick,我在Windows笔记本电脑上运行MySQL。谢谢。
史蒂夫

Answers:


9

运行以下命令

mysql_install_db

顺便说一句,在(至少)Linux CentOS 7上进行安装时,这是必需的。否则,mysqld将不会启动。我在跑步时看到了systemctl status mysqld.service 2015-02-20 15:41:07 15160 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
Mike S

5

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

mysqld --initialize

我希望我可以不止一次投票。我一直在寻找这个简单的解决方案。谢谢!
Schiavini

1

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

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 5.0中不存在mysql.plugin。推测您以某种方式安装了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 ServerB:/ var / lib / mysql / mysql / * ServerA:/ var / lib / mysql / mysql /。
  5. 在ServerA上,cp /root/myusers/user.* / var / lib / mysql / mysql /。
  6. 服务mysql启动

而已。

如果您在Windows中运行此程序,则必须应用相同的原理。

试试看 !!!

更新2011-07-29 16:15 EDT

如果您的用户名具有DB特定特权,请执行以下步骤

  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 ServerB:/ var / lib / mysql / mysql / * ServerA:/ var / lib / mysql / mysql /。
  6. 在ServerA上,cp / root / myusers / * / var / lib / mysql / mysql /。
  7. 服务mysql启动

0

该服务无法启动。错误:0。

将MySQL路径添加到环境变量。


谢谢,但是它已经在Path变量中。
史蒂夫

0

看来您已经在运行mysql

尝试

ps ax|grep mysql

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

如果您看不到任何输出,请尝试运行mysqld而不进行妖魔化并查看输出。


0

我添加了一个Windows标记来帮助人们回答问题。

我的背景不是Windows,但适用原则。

是否已经在运行mysql进程?如果是这样,则需要在卸载之前将其杀死。如果在尝试卸载/重新安装时它仍在运行,则会挂起进程和文件,从而无法完全卸载。

打开服务窗口,在名称中查找带有mysql的所有内容,并确保将其设置为不尝试重新启动。然后打开正在运行的程序窗口的正在运行的进程选项卡(使用CTRL-ALT-DEL打开),并使用mysql作为名称查找并杀死正在运行的进程。

如果您对不再有正在运行的mysql进程感到满意,则可以继续。您可能需要重新启动,以确保不再有正在运行的mysql进程挂起。

这时您应该能够重新安装并启动mysql。


0

运行mysql-test-run,您应该看到以下输出:

./mysql-test-run
Logging: ./mysql-test-run  
2013-09-14 03:39:32 2566 [Warning] Setting lower_case_table_names=2 because file system for /var/folders/fr/sn4l2f393_v_ytcwkb0lx7_40000gp/T/_M2mZFQPjV/ is case insensitive
2013-09-14 03:39:32 2566 [Note] Plugin 'FEDERATED' is disabled.
2013-09-14 03:39:32 2566 [Note] Binlog end
2013-09-14 03:39:32 2566 [Note] Shutting down plugin 'MyISAM'
2013-09-14 03:39:32 2566 [Note] Shutting down plugin 'CSV'
MySQL Version 5.6.13
Checking supported features...
 - SSL connections supported
Using suites: main,sys_vars,binlog,federated,rpl,innodb,innodb_fts,perfschema,funcs_1,opt_trace,parts,auth_sec
Collecting tests...
 - adding combinations for binlog



 - adding combinations for rpl
Removing old var directory...
Creating var directory '/Users/das/mysql/mysql-5.6.13-osx10.7-x86_64/mysql-test/var'...
Installing system database...
Using server port 50409

==============================================================================

TEST                                      RESULT   TIME (ms) or COMMENT
--------------------------------------------------------------------------

0

如果移动数据目录,则不仅需要赋予新的数据目录权限,还需要确保所有父目录都具有权限。

我将datadir移到了一个安装在Ubuntu中的硬盘驱动器上,如下所示:

/media/*user*/Data/

而我的datadir是Databases

我必须将每个媒体,用户和数据目录的权限设置为771 :

sudo chmod 771 *DIR*

如果这不起作用,则可以使mysql工作的另一种方法是将/etc/mysql/my.cnf中的用户更改为root。尽管从安全角度来看,这样做无疑存在一些问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.