web-dev-qa-db-ja.com

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。

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

9
Steve

次のコマンドを実行します

mysql_install_db
9
Mike

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

mysqld --initialize
5
tvrcgo

最初に行う必要があるのは、次のコマンドを実行することです。

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で実行している場合は、同じ原則を適用する必要があります。

試してみる !!!

PDATE 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開始
1
RolandoMySQLDBA

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
Arunabh Das

Datadirを移動する場合は、新しいdatadir権限を付与するだけでなく、すべての親ディレクトリに権限を付与する必要があります。

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

/media/*user*/Data/

そして私のdatadirはデータベースでした。

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

Sudo chmod 771 *DIR*

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

0
Kohjah Breese

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

試す

ps ax|grep mysql

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

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

0
arheops

サービスを開始できませんでした。エラー:0。

MySQLパスを環境変数に追加します。

0
quanta

人々が質問に答えるのを助けるために、windowsタグを追加しました。

私の背景は窓ではありませんが、原則が適用されます。

Mysqlプロセスはすでに実行されていますか?もしそうなら、アンインストールする前にそれを殺す必要があります。アンインストール/再インストールを試みたときにまだ実行中だった場合、プロセスとファイルがぶら下がって完全にアンインストールできなくなります。

サービスウィンドウを開き、名前にmysqlが含まれるものを探し、再起動で起動しないように設定されていることを確認します。次に、実行中のプログラムウィンドウの[実行中のプロセス]タブを開き(CTRL-ALT-DELを使用して開きます)、名前にmysqlが含まれている実行中のプロセスを探して強制終了します。

実行中のmysqlプロセスがなくなったことに満足したら、続行できます。再起動して、実行中のmysqlプロセスが停止していないことを確認してください。

この時点で、mysqlを再インストールして起動できるはずです。

0
Rik Schneider