26

本番データベース (mysql バージョン 5.1.66) の毎日のバックアップ mysqldump バックアップを実行します。

mysqldump --user=username --password=secret -C -e --create-options --hex-blob --net_buffer_length=5000 databasename > file

また、開発マシン (mysql バージョン 5.6.12) でそのデータベースを毎日復元しています。

mysql --user=username --password=secret databasename < file

次のエラーが表示されます: ERROR 1813 (HY000) at line 25: Tablespace for table ' databasename. tablename」が存在します。IMPORT の前にテーブルスペースを破棄してください。

私の読書は、これがmysql innodbデータベースがコマンドを必要とするためであることを示しています:

 ALTER TABLE tbl_name DISCARD TABLESPACE;

テーブルが削除される前に実行される - テーブルを削除するだけでは、インデックスを削除するには不十分なようです。(私の開発サーバーは innodb_file_per_table オプションを使用しています)

本番データベースで削除されたデータが開発データベースにある可能性があるため、「置換」オプションを使用したくありません。

ところで、エラーの後、テーブルは読み取れませんが、mysqld を再起動すると修正されます。

問題は、この問題を解決するのに役立つ mysql ダンプ オプションがあるか、またはエラーを防ぐデータをインポートする別の方法があるかということです。

読んでくれてありがとう。

4

4 に答える 4

43

tablename.ibd はありますが、tablename.frm はないようです。

チェックする:

  1. cd を mysql データ ディレクトリに移動してから、データベース名を指定します。
    cd /var/lib/mysql/データベース名
  2. エラーが発生しているテーブル名を検索します。

    ls テーブル名.*

    次の 2 つのファイルが表示されます。

    テーブル名.ibd
    テーブル名.frm
    

    しかし、私はあなたが見ていないだけだと思います

    テーブル名.ibd

修正するには、いくつかのオプションがあります。

  1. 以下を mysqldump に追加します。これにより、復元前にデータベースが削除され、データ ディレクトリがクリーンアップされます。
    --add-drop-データベース
  2. tablename.frm を prod から dev にコピーしてから、delete table ステートメントを発行します。

また:

  • ローカルホスト上のファイルにダンプする場合、net_buffer_length=5000 を使用する必要はありません。
  • その他のバックアップ ソリューション - Percona Xtrabackup
于 2013-07-29T02:29:53.973 に答える
0

XAMPP を使用している場合は、まず (「停止」) MySQL 次に C:\xampp\mysql\data\dnb に移動します。私の場合、dnb はデータベース名フォルダーです。それを開いて .ibd ファイルを削除するため、既に MYsql を停止している場合にのみ削除できます。次に、phpmyadmin に移動します。 1 phpmyadmin をクリックします。2 下に表示されるデータベースをクリックします (あなたの場合は server.127.0.0.1 が変更される可能性があります)。 3 次に、削除するデータベースを確認し、[削除] をクリックします。4 次に、同じ名前でデータベースを作成し、データベースを正常にインポートできます。ここでは、phpmyadmin からデータベースを削除する方法を確認できます

于 2016-01-20T23:15:12.587 に答える