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サーバーをアンインストールして再インストールしました。インストール後の構成ウィザードで、次のエラーが表示されます。サービスを開始できませんでした。エラー:0。

ここからどのように進めますか?


スティーブは、これをWindows、BSD、Linux、OSX、またはその他のOSで実行していますか?Windowsで実行している場合、一部の手順の詳細は異なります。
Rik Schneider

@Rik Schneider:Rick、MySQLをWindowsラップトップで実行しています。ありがとう。
スティーブ

回答:


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
マイクS

5

Windowsで起動する前にmysqlを初期化します。

mysqld --initialize

私はこれを複数回賛成できればいいのにと思います。私はこの簡単な解決策を探してきました。ありがとう!
Schiavini 2016年

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.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. MySQL 5.5をServerBにインストールする
  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で実行している場合は、同じ原則を適用する必要があります。

試してみる !!!

UPDATE 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. MySQL 5.5をServerBにインストールする
  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パスを環境変数に追加します。


おかげで、それはすでにパス変数にありました。
スティーブ

0

あなたはすでにmysqlを実行しているようです

試す

ps ax|grep mysql

出力が表示された場合は、おそらく停止する必要があります(またはボックスを再起動します)。

出力が表示されない場合は、デーモン化せずにmysqldを実行して、出力を確認してください。


0

私は人々が質問に答えるのを助けるために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を移動する場合は、新しいdatadir権限を付与するだけでなく、すべての親ディレクトリに権限を付与する必要があります。

私はdatadirをハードドライブに移動し、Ubuntuに次のようにマウントしました。

/media/*user*/Data/

私のdatadirはDatabasesでした。

メディア、ユーザー、およびデータディレクトリのそれぞれにアクセス許可を771に設定する必要がありました。

sudo chmod 771 *DIR*

これが機能しない場合、mysqlを機能させる別の方法は、/ etc / mysql / my.cnfのユーザーをrootに変更することです。ただし、セキュリティの観点からすると、いくつかの問題があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.