web-dev-qa-db-ja.com

MySQLデータベースを削除できないのはなぜですか?

問題

Mac OS 10.8.2MySQL 5.5.23を実行しています特定のデータベースを削除することはできませんが、他のデータベースを削除することはできます。

特定のテーブルを削除しようとすると、次のエラーが発生します。

_#1548 - Cannot load from mysql.proc. The table is probably corrupted
_

修正の試み

  • システムを再起動しました
  • CLIを介してMySQLを再起動しようとしました
    • _$ Sudo /usr/local/mysql/support-files/mysql.server stop_
    • しかし、このエラーを受け取りました_ERROR! MySQL server PID file could not be found!_
  • Mysql.procテーブルを修復しました。
    • _REPAIR TABLE mysql.proc_
    • _REPAIR TABLE mysql.proc USE_FRM_
  • すべてのmysql。*テーブルを修復しました。
    • _REPAIR TABLE mysql.*_
  • コマンドラインからmysqlcheckを実行する場合
    • _mysqlcheck --repair --all-databases_
    • _mysqlcheck --repair specific-db_
      • このエラーを受け取りました:mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) when trying to connect

現在の状態

元の特定のデータベースを削除することはできませんが、他のデータベースを削除することはできます。

更新[1] 2013-01-05 11:15 am [ニューヨーク]

ログとフィードバック(コメントの@Thomasごと)すべてのログを見つけるために、(cli)を実行しました:

_$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* \([^ ]*mysqld\) .*/\1/;p;}') --verbose --help|grep '^log'
_

このフィードバックを受け取りました:

_130105 11:35:21 [Warning] Can't create test file /usr/local/mysql-5.5.23-osx10.6-x86_64/data/wills-mbp.lower-test
130105 11:35:21 [Warning] Can't create test file /usr/local/mysql-5.5.23-osx10.6-x86_64/data/wills-mbp.lower-test
130105 11:35:21 [Note] Plugin 'FEDERATED' is disabled. /usr/local/mysql/bin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
130105 11:35:21 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
_

_mysql_upgrade_を調べています。

更新[2] 2013-01-05 4:04 pm [ニューヨーク]

私はこれを実行しました:

_Sudo /usr/local/mysql/support-files/mysql.server stop
_

そして、このエラーを受け取りました:

_ERROR! MySQL server PID file could not be found!
_

更新[2.1] 2013-01-05 5:37 pm [ニューヨーク]

_ps auxww | grep mysql_を実行し、mysqldプロセスを見つけて強制終了しました(_Sudo kill [process id]_)。その後、mysqlを正常に再起動することができました。しかし、私はまだ上記の特定のデータベースを削除する運がありません。

解決済み

破損とここにリストされている提案やその他の回答の多くを手動で修復しようとした後、mySQLを再インストールすることが私の問題を解決した唯一のことでした。

Mac(10.8.2を実行)では、クリーンインストールのために手動で削除する必要もありました。

_Sudo rm /usr/local/mysql
Sudo rm -rf /usr/local/mysql*
Sudo rm -rf /Library/StartupItems/MySQLCOM
Sudo rm -rf /Library/PreferencePanes/My*
Sudo rm -rf /Library/Receipts/mysql*
Sudo rm -rf /Library/Receipts/MySQL*
Sudo rm /etc/my.cnf
_

相談した記事

16
Will Nielsen

私は試してみます:

  • 重要なデータがあるデータベースをバックアップ/保存します。
  • MySQLを削除する
  • MySQLを再インストールします
  • バックアップしたデータベースを復元します。
2
Michael Durrant

データベース(名前:caloriecalculator)のクエリに時間がかかりすぎて、まったくドロップしないという問題が発生しました。以下の手順に従って、問題を修正しました。

  1. すべてのMySQLプロセスを参照してください:mysqladmin processlist -u root -p

mysql processes

  1. 次のクエリの実行をブロックしていたため、caloriecalculatorに関連するすべてのプロセスを強制終了します。 mysqladmin -u root -p kill 4

  2. 今すぐ実行:データベースcaloriecalculatorを削除します。

enter image description here

3

Linuxサーバーでこれが発生しましたが、原因はデータベースディレクトリの破損でした。

[〜#〜] update [〜#〜] :1つのことは、MySQLデータベースディレクトリに移動してls -laを実行し、悪意のあるDBが権限、所有権などに関しては他の人と同じです。たとえば、ここでは「元の」データベースを削除できません(rootとして実行された愚かなツールによって作成されました)。

drwx------  2 mysql mysql      4096 Aug 27  2015 _db_graph
drwx------  2 mysql mysql      4096 Jul 13 11:58 _db_xatex
drwxrw-rw-  2 root  root      12288 May 18 14:27 _db_xatex_original
drwx------  2 mysql mysql     12288 Jun  9 08:23 _db_xatex_contab
drwx------  2 mysql mysql     12288 May 18 17:58 _db_xatex_copy
drwx------  2 mysql mysql      4096 Nov 24  2016 _db_xatex_test

chown mysql:mysql _db_xatex_original; chmod 700 _db_xatex_originalを実行すると問題が解決します(ただし、 inside ディレクトリをチェックして、アクセス許可と所有権が一致していることを確認してください)。


結局、私は次の醜いハックを採用しました(REPAIRの対象となる可能性のあるものをすべて停止、再起動、修復しようとした後):

  • データベース「scapegoat」を作成しました
  • mySQLサーバーを停止しました
  • mySQLサーバーによって作成されたディレクトリ/ var/lib/mysql/scapegoatを/ tmpにコピーしました
  • mySQLサーバーを再起動し、データベース「scapegoat」を削除し、サーバーを停止しました
  • これで、MySQLが何も知らなくなったクリーンで空のDBディレクトリのコピーができました。
  • 「evildb」ディレクトリを/ tmpに移動しました(問題が発生した場合に元に戻すことができるように)
  • 「scapegoat」ディレクトリを/ var/lib/mysqlに移動し、名前を「evildb」に変更しました
  • mySQLサーバーを起動しました
  • この時点でこれ以上修復を実行したかどうかわからない
  • そして「evildb」データベースはドロップ可能になりました!

私の説明では、データベースを削除するように求められると、MySQLServerは最初にデータベースディレクトリ内のファイルに対していくつかのチェックを実行します。これらのチェックが失敗すると、ドロップも失敗します。これらのチェックは、REPAIRによって実行されるチェックとは微妙に異なる必要があります。影響を受けたディレクトリに予期しないことがあるかもしれません。

これは、SuSE 11.2LinuxディストリビューションのMySQL5.1または5.2にあったと思います。それが役に立てば幸い。

更新

振り返ってみると、「proc」についてエラーが発生したことを覚えていません。したがって、問題がディレクトリにあるかどうかはわかりません。 procテーブルに接続されている可能性があります。テーブルが破損していません。邪悪なDBに属するものを見つけるために、procデータベーステーブルを視覚的に調べてみましたか?

USE mysql;
SELECT * FROM proc;

それ、またはそれからのエラーは、問題の解決に役立つ可能性があります。 db列が間違っている行があるかもしれません。ピンチでは、procテーブルをエクスポートし、クリーニング後に(SQLまたはディスクファイルを介して)再ロードできます。

テスト

上記のアップデートの部分的な検証があります。 意図的にprocテーブルにゴミを挿入することにより、新しく作成されたデータベースevilを適切に処理します、I 部分的に症状を再現しました(ドロップできないデータベース、MySQL接続が試行時にクラッシュします)。ただし、エラー番号は1548ではありません。しかし、おそらくそれは、rightのゴミをそのテーブルに挿入した場合です...とにかく、有用なビットはによるものですevil dbへのすべての参照を削除削除すると、後者は再びドロップ可能になりました。

mysql> drop database evil;
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql> use mysql;
No connection. Trying to reconnect...
Connection id:    1
Current database: *** NONE ***

Database changed
mysql> DELETE FROM proc WHERE db = 'evil';
Query OK, 2 rows affected (0.00 sec)

mysql> drop database evil;
Query OK, 0 rows affected (0.00 sec)
2
LSerni

Windowsでxamppを使用している場合

phpmyadminを使用してデータベースを削除することもできます

enter image description here

ホームに移動->データベース-> [データベース名]をクリック->ドロップ

[〜#〜]または[〜#〜]

データベースを手動で削除することもできます

xampp-> mysql->データ-> [データベース名]に移動します

[データベース名]を今すぐ削除してください。

1
Nisharg Shah

私は同じ問題を抱えていました、そして私がしたすべてはmysqlデータディレクトリからデータベースディレクトリを削除することでした。

0
amralieg