2011-09-08 3 views
1

私は自分自身を足で撃って、ばかみたいに感じます。私のデータベースの一つにuserテーブルを追加すると同時に、MySQLデータベースの許可を取り消して取り消しをして遊んでいました。私のMySQLサーバーの管理者アカウントの代わりに、メインのMySQLデータベース上の私のデータベース固有の管理者アカウントで"ドロップテーブルのユーザー" == BAD

Drop table user; 

、および自動コミットがtrueに設定されました:とにかく、私は、実行中のミスを犯しました。今、もちろん私のようなエラーを取得:

SQL Error: Table 'mysql.user' doesn't exist 

は、私がまだ設定すべてのデータベースを持っていなかったので、それはあまりにも大したことではないのですが、私は私のユーザーテーブルを取得するためにcreate table user ..のステートメントを実行することができますどのような方法があります私は弾丸を噛んで、MySQLサーバを再インストールする必要がありますか?

ありがとうございます!

UPDATE:

ここで作成したスクリプトは、私は戻って私のmysql.userテーブルを取得するために使用することができたのです。このスクリプトを実行した後に手動でユーザーを作成する必要がありましたが、rootユーザーはまだそこにいて、データベースにアクセスできました。言うまでもなく、私の次の仕事は私のMySQLサーバのバックアップタスクをスケジュールすることになります:)

CREATE TABLE `user` (
    `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', 
    `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '', 
    `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '', 
    `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', 
    `ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '', 
    `ssl_cipher` blob NOT NULL, 
    `x509_issuer` blob NOT NULL, 
    `x509_subject` blob NOT NULL, 
    `max_questions` int(11) unsigned NOT NULL DEFAULT '0', 
    `max_updates` int(11) unsigned NOT NULL DEFAULT '0', 
    `max_connections` int(11) unsigned NOT NULL DEFAULT '0', 
    `max_user_connections` int(11) unsigned NOT NULL DEFAULT '0', 
    `plugin` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', 
    `authentication_string` text COLLATE utf8_bin NOT NULL, 
    PRIMARY KEY (`Host`,`User`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global 
privileges' 
+1

これはバックアップ用のものです。あなたはバックアップを持っていますよね? – JohnFx

+3

私はあなたに、ごくわずかな費用で非常に貴重な教訓を(うまくいけば)学んだと言います。 –

+0

@JohnFx:まだそれほど得られていなかった。 – Briguy37

答えて

4

あなたが「戻って私のユーザーテーブルを取得する」ことで何を意味するかによって異なります。同一のスキーマなどで同一のuserテーブルを作成することはできますが、元のテーブルのデータは完全に失われています。新しいテーブルを作成するときに再表示されるだけではありません。

ありがたいことに、これはではありません。では、MySQLサーバーなどを再インストールする必要があります。サーバーは正常です。あなたはテーブルを失ったばかりです。テーブルを削除しても、サーバーにいかなる影響も与えません。それを再作成すれば、あなたは行き​​たいです。 (もしあなたがテーブルの構造のレコードを持っていなければ、私はあなたがそれを理解することができると確信しています。)また、バックアップがあれば復元してください。そうでない場合は、今からバックアップを取っていると思います。

ご迷惑をおかけしましたが、今後このようなトラブルを避けることができれば幸いです。がんばろう!

+0

返事をありがとう。私はそれを再追加するためにユーザーテーブル構造を探していますが、まだそれを見つけていないので、私は見ていきます。 – Briguy37

2

あなたのテーブルをリカバリするための合理的な方法はありません。本当にする必要はありません。他のデータベースに保存したいデータがある場合は、以下の簡単な指示に従ってください。 (パスは標準的なlinuxのインストールを前提としています。実行する前に各コマンドをコピー・ペースト、読み込み、解釈、理解するだけではありません)。また、これはすべてメモリからのものですが、私はこれをテストしていません。

cd /var/lib/ 
mv mysql/mysql mysql/old_mysql_db 
mv mysql mysql_save 
mkdir mysql 
chown --reference=mysql_save mysql 
chmod --reference=mysql_save mysql 
mysql_install_db 
mv mysql/mysql mysql_save/ 
mv mysql ~/mysql_newinstall_deleteme 
mv mysql_save mysql 

MySQLサーバ・プロセスを停止するには、今すぐあなたのMySQLサーバ・プロセスを起動し、それに戻って行きます。すべてのユーザと権限で最初からやり直していますが、他のデータベースに変更しないでください。mysqlデータベースがinnodbを使用していなかったと仮定します。