web-dev-qa-db-ja.com

mysqlデータベースを回復する-mysql / mysqldumpが「テーブル<データベース>。<テーブル名>が存在しない(1146) "を返す

バックストーリー

Ubuntuが停止し(起動しません)、修正できませんでした。ライブCDを起動して重要なものを復元し、NASに保存しました。私がバックアップしたものの1つは/ var/lib/mysqlでした。

Ubuntu 10.0.4を使用していたため、Linux Mintを再インストールしました。これは、新しいディストリビューションを試す良い機会でした(Unityは好きではありません)。古いメディアウィキを回復したいので、mysqlデーモンcp -R /media/NAS/Backup/mysql/mediawiki@002d1_19_1 /var/lib/mysql/をシャットダウンし、ファイルの所有権と権限を正しく設定して、mysqlをバックアップします。

問題

データベースをエクスポートする をしようとしています データベースを復元する ができますが、mysqldumpを実行するとエラーが発生します:

$ mysqldump -u mediawikiuser -p mediawiki-1_19_1 -c | gzip -9 > wiki.2012-11-15.sql.gz
Enter password:
mysqldump: Got error: 1146: Table 'mediawiki-1_19_1.archive' doesn't exist when using LOCK TABLES

私が試したもの

私は--skip-lock-tablesを使用してみましたが、次のようになりました:

Error: Couldn't read status information for table archive ()
mysqldump: Couldn't execute 'show create table `archive`': Table 'mediawiki-1_19_1.archive' doesn't exist (1146)

Mysqlにログインしてみて、そこにあるはずのテーブルを一覧表示できますが、それらからdescribeまたはselectをしようとすると、ダンプと同じ方法でエラーが出力されます。

mysql> show tables;
+----------------------------+
| Tables_in_mediawiki-1_19_1 |
+----------------------------+
| archive                    |
| category                   |
| categorylinks              |

...

| user_properties            |
| valid_tag                  |
| watchlist                  |
+----------------------------+
49 rows in set (0.00 sec)

mysql> describe archive;
ERROR 1146 (42S02): Table 'mediawiki-1_19_1.archive' doesn't exist

Mediawikiはinnodbとバイナリデータを使用してインストールされたと思います。

私はねじ込まれていますか、これを回復する方法はありますか?

5
Matthew

同様の質問をしている人が見つかりました: MySQL>テーブルは存在しません。しかし、存在します(または存在するはずです)

Mike Dacre 私の問題を解決する答えがありました。問題は、ib_logfile0とib_logfile1(およびmysql /ルートディレクトリにある他のib *ファイルの一部)が、mysqlの新規インストールと一致しないことでした。古いmysql /ディレクトリーからdbファイルをドロップインして、それが機能することを期待することはできません。

データベースをリカバリするために行ったのは、現在の/ var/lib/mysql /を新規インストールでバックアップすることでした。

$ Sudo service mysql stop # Stop mysql. Command could be different on different distros
$ Sudo mv /var/lib/mysql ~/mysql.bku

次に、緊急バックアップディレクトリを/ var/libにコピーします。

$ Sudo cp -R /media/NAS/Backup/mysql /var/lib/

次に、権限を適切に設定します(必要に応じて、参照のために〜/ mysql.bku /を参照してください)。これにはより効率的なコマンドがあるかもしれませんが、経験の少ない人が必要とする可能性がある場合に備えて、完全性について私が知っていることを含めています。

$ Sudo chown -R mysql:mysql /var/lib/mysql
$ Sudo find /var/lib/mysql/ -type d -exec chmod 700 {} \;
$ Sudo find /var/lib/mysql/ -type f -exec chmod 660 {} \;
$ Sudo chmod 644 /var/lib/mysql/debian-5.1.flag # Not sure what this is but the permissions were a bit different so include it just in case

Mysqlをもう一度起動します

$ Sudo service mysql start # Again command might be different on different distros

次に、必要なデータベースをバックアップしました。

$ mysqldump -u root -p mediawiki-1_19_1 -c | gzip -9 > wiki.2012-11-15.sql.gz

終了したら、mysql /ディレクトリを元に戻し、ダンプファイルからデータベースをインポートしました。

$ Sudo service mysql stop
$ Sudo mv /var/lib/mysql ~/mysql-discard # Too nervous to start typing "Sudo rm -r /" for /var/lib/mysql, so move it away instead
$ Sudo mv ~/mysql.bku /var/lib/mysql
$ Sudo service mysql start

問題は解決しました。データベースを適切にエクスポートし、mysqlも適切に実行しています。あとは Wikiをバックアップから復元する ガイドに従ってください。

2
Matthew

あなたが試すことができます:

  1. テーブルのデータファイルが実際に/var/db/mysql、または特定のインストール/ディストリビューションが配置する場所に存在することを確認します。
  2. Mysqlエラーログをよく調べます。通常は上記のディレクトリにあります。
  3. mysqlcheck --repairを使用します。
  4. MySQLをオフラインにして、 myisamchk を実行します。
  5. 別の場所に適切なバックアップがあるか、アーカイブテーブルがそれほど重要ではなかったことを願っています。
0
Sammitch