web-dev-qa-db-ja.com

MariaDBを使用したデータベースの破損:エンジンにテーブルが存在しません

私はMariaDB 10.0.12-MariaDB HomebrewでOSXを実行している環境設定にいます

インストールを台無しにしてしまったので、セットアップからMySQLとMariaDBを完全に削除して、再び開始しました。

MariaDBのインストールが完了した後、運用サーバーからDBダンプ経由でデータベース(innoDB)を再インポートしました。うまくいきました。リブート後、翌日、データベースにアクセスできなくなりました。

Table 'my.table' doesn't exist in engine

これの原因と解決策は何ですか?データベースの構造はわかりますが、アクセスしようとすると、このエラーメッセージが表示されます。

mysql-upgrade --forceを試し、rm ib_logfile1 ib_logfile0を削除しました

ここでは、データの損失は問題ではありません。問題は、再起動するたびに各データベースの再インストールに30分を費やすことができないことです。

ここにいくつかのログがあります:

140730  9:24:13 [Note] Server socket created on IP: '127.0.0.1'.
140730  9:24:14 [Note] Event Scheduler: Loaded 0 events
140730  9:24:14 [Warning] InnoDB: Cannot open table mysql/gtid_slave_pos from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
140730  9:24:14 [Warning] Failed to load slave replication state from table mysql.gtid_slave_pos: 1932: Table 'mysql.gtid_slave_pos' doesn't exist in engine
140730  9:24:14 [Note] /usr/local/Cellar/mariadb/10.0.12/bin/mysqld: ready for connections.
Version: '10.0.12-MariaDB'  socket: '/tmp/mysql.sock'  port: 3306  Homebrew
140730 16:26:28 [Warning] InnoDB: Cannot open table db/site from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.
9
sf_tristanb

InnoDBが辞書を保持しているibdata1ファイルが何かによって削除されました。間違いなくそれを行うのはMySQLではありません。

12
akuzminsky

わかりました、今週の週末にOpenStack環境がクラッシュしたときにこの問題に遭遇しました。それについての別の投稿は、すぐに回復する方法について来ます。

Fedora 25サーバーをホストとして、Ver 15.1 Distrib 10.1.21-MariaDBの下で実行されているSQL Serverインスタンスで動作するソリューションを見つけました。 古いmariadb-serverの/ var/lib/mysqlディレクトリを完全にコピーし、コピーするデータベースがまだ破損していない場合、データベースが破損していると言う他のすべての投稿を聞かないでください。このプロセスはOSは破損したが、ファイルはまだアクセス可能だったシステム

ここに私が従った手順があります。

  1. 新しいサーバー上でのみ、現在のバージョンのSQLを完全にアンインストールしたことを確認してください。また、次のコマンドを実行して、新しいサーバーと古いサーバー上のすべてのmysql-serverまたはmariadb-serverプロセスが停止していることを確認します。

    service mysqld stopまたはservice mariadb stop。

  2. 新しいSQLサーバーで/ var/lib/mysqlディレクトリに移動し、このディレクトリにファイルがまったくないことを確認します。このディレクトリにファイルがある場合、データベースサーバーを新しいマシンから削除するプロセスは機能せず、破損している可能性があります。新しいマシンから完全にアンインストールされていることを確認してください。

  3. OLD SQLサーバー:

    mkdir/OLDMYSQL-DIR cd/OLDMYSQL-DIR tar cvf mysql-olddirectory.tar/var/lib/mysql gzip mysql-olddirectory.tar

  4. OLDサーバーとNEWサーバーの両方でsshdが実行されていることを確認してください。 2つのサーバー間にネットワーク接続があることを確認してください。

  5. 新しいSQLサーバー:

    mkdir/NEWMYSQL-DIR

  6. OLD SQLサーバー:

    cd/OLDMYSQL-DIR scp mysql-olddirectory.tar.gz @:/ NEWMYSQL-DIR

  7. 新しいSQLサーバー:

    cd/NEWMYSQL-DIR gunzip mysql-olddirectory.tar.gz OR tar zxvf mysql-olddirectory.tar.gz(tar zxvfが機能しない場合)tar xvf mysql-olddirectory.tar.gz

  8. これで、NEWMYSQL-DIRに「mysql」ディレクトリファイルが配置されます。スイッチなしで単独で「cp」コマンドを実行する衝動に抵抗します。うまくいかないだろう。次の「cp」コマンドを実行して、同じスイッチを使用していることを確認します。

    cd mysql/cp -rfp */var/lib/mysql /

  9. これで、新しいサーバーに古いSQLサーバーファイルのすべてのコピーがあり、tactの権限が必要です。新しいSQLサーバー:

    cd/var/lib/mysql /

非常に重要なステップ。スキップしないでください

> rm -rfp ib_logfile*
  1. 次に、新しいSQLサーバーにmariadb-serverまたはmysql-serverをインストールします。既にインストールおよび/または実行している場合は、指示に従っていないため、これらの手順は失敗します。

MARIADB-SERVERおよびDNFの場合:

> dnf install mariadb-server
> service mariadb restart

MYSQL-SERVERおよびYUMの場合:

> yum install mysql-server
> service mysqld restart
5
lvto2000

MariaDB/InnoDBでこの問題が発生したばかりで、次の方法で修正できました。

  • 別のMySQL/MariaDBインスタンスの正しいデータベースに必要なテーブルを作成します
  • 両方のサーバーを停止します
  • .ibd、.frmファイルを元のサーバーにコピーする
  • 両方のサーバーを起動します
  • 両方のサーバーに問題テーブルをドロップします
0
hexten

これは本当にひどかった。

ここで提案されているすべての解決策を試しましたが、機能したのは

  • 新しいデータベースを作成する
  • 実行ALTER TABLE old_db.{table_name} RENAME new_db.{table_name}すべての機能しているテーブル
  • 実行DROP old_db
  • 作成old_dbもう一度
  • 実行ALTER TABLE new_db.{table_name} RENAME old_db.{table_name}のすべてのテーブルでnew_db

それが完了したら、最後に以前持っていたテーブルを再び作成することができます。

0
Chad Scira

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

  • c:\ xampp\mysql\dataからデータベースフォルダーをバックアップします(テーブル名にのみ対応する.frmおよび.ibdファイル)
  • xamppを再インストールし、C:\ xampp\mysql\dataにあるDBフォルダーを再コピーします
  • my.ini addを変更します

    [mysqld]
    innodb_file_per_table = on
    
  • 次にphpmyadmin(またはNavicatやMYSQL Workbenchなどの他のDBビューアー)を開いて実行します

    ALTER TABLE tbl_name IMPORT TABLESPACE 
    

    各テーブル用

  • テーブルを開くことができたら、完全なmysqlダンプを作成します

  • すべてを削除し、クリーンインストールを行います

あなたがそれを必要としないことをするための多くの仕事を知っています。

0
Adrian P.