web-dev-qa-db-ja.com

復元エラーに関するmysqldumpの問題:「インポートの前にテーブルスペースを破棄してください」

運用データベース(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

25行目でエラー1813(HY000)が発生しました。テーブル 'databasename.tablename'のテーブルスペースが存在します。 IMPORTの前に表領域を破棄してください。

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

 ALTER TABLE tbl_name DISCARD TABLESPACE;

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

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

エラーが発生すると、テーブルは読み取り不能になりますが、mysqldを再起動すると修正されます。

質問は、この問題を修正するのに役立つmysqlダンプオプションがありますか、それともエラーを防ぐデータをインポートする別の方法がありますか?

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

22
pgee70

Tablename.ibdはあるがtablename.frmはないようです。

チェックする:

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

    ls tablename。*

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

     tablename.ibd 
     tablename.frm 
    

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

    tablename.ibd

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

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

また:

  • Localhostのファイルにダンプする場合、net_buffer_length = 5000を使用する必要はありません。
  • その他のバックアップソリューション- Percona Xtrabackup
39
Dave

この問題をスキップする最も簡単な方法は、phpmyadminデータベースダンプを手動で編集し、問題のあるテーブルをINNODB以外のものに編集/変更することです。問題の表をENGINE=MyISAMと出来上がりに変更しました。インポートが機能しました。

CREATE TABLE IF NOT EXISTS `home3_acymailing_tag` (
    `tagid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(250) NOT NULL,
    `userid` int(10) unsigned DEFAULT NULL,
    PRIMARY KEY (`tagid`),
    KEY `useridindex` (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
8
SamTzu

また、スキーマを削除して再度作成しているときに、この問題が発生しました。 C:\ProgramData\MySQL\MySQL Server 5.6\data\my_database_nameおよび以前のデータベース作成から残ったテーブルを削除します。必要に応じて、データベース全体を削除することもできます。

3
ÖMER TAŞCI

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

0
Noman Hassan