Mac OS 10.8.2でMySQL 5.5.23を実行しています特定のデータベースを削除することはできませんが、他のデータベースを削除することはできます。
特定のテーブルを削除しようとすると、次のエラーが発生します。
_#1548 - Cannot load from mysql.proc. The table is probably corrupted
_
$ Sudo /usr/local/mysql/support-files/mysql.server stop
_ERROR! MySQL server PID file could not be found!
_REPAIR TABLE mysql.proc
_REPAIR TABLE mysql.proc USE_FRM
_REPAIR TABLE mysql.*
_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
元の特定のデータベースを削除することはできませんが、他のデータベースを削除することはできます。
ログとフィードバック(コメントの@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
_を調べています。
私はこれを実行しました:
_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
_
私は試してみます:
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
の対象となる可能性のあるものをすべて停止、再起動、修復しようとした後):
私の説明では、データベースを削除するように求められると、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)
私は同じ問題を抱えていました、そして私がしたすべてはmysqlデータディレクトリからデータベースディレクトリを削除することでした。