完全なmysqlmysqldumpファイルから単一のテーブルを復元できますか?

2009年06月19日に質問されました。  ·  閲覧回数 194.3k回  ·  ソース

Mobius picture
2009年06月19日

約440メガバイトのすべてのテーブルで構成されるmysqlデータベースのmysqldumpバックアップがあります。 mysqldumpからテーブルの1つだけの内容を復元したいと思います。 これは可能ですか? 理論的には、必要なテーブルを再構築するセクションを切り取ることができますが、そのサイズのテキストドキュメントを効果的に編集する方法すらわかりません。

回答

uloBasEI picture
2009年06月19日
297

必要なテーブルのみを抽出するためにsedを使用してみることができます。

テーブルの名前がmytableで、ファイルmysql.dumpが巨大なダンプを含むファイルであるとします。

$ sed -n -e '/CREATE TABLE.*`mytable`/,/Table structure for table/p' mysql.dump > mytable.dump

これにより、 CREATE TABLE mytableと次のテーブルに対応する次のCREATE TABLE間にあるものがファイルmytable.dumpコピーされます。

次に、テーブルmytableの構造とデータ( INSERTリスト)を含むファイルmytable.dumpを調整できます。

bryn picture
2013年04月07日
126

uloBasEIのsedコマンドの修正バージョンを使用しました。 これには、前述のDROPコマンドが含まれ、mysqlがデータをテーブルにダンプするまで読み取ります(UNLOCK)。 私のために働いて、 wp_usersをたくさんのWordpressサイトに(再)インポートし

sed -n -e '/DROP TABLE.*`mytable`/,/UNLOCK TABLES/p' mydump.sql > tabledump.sql
Martijn Kools picture
2013年04月25日
50

これはもっと簡単にできますか? これは私がそれをした方法です:

一時データベースの作成(復元など):

mysqladmin -u root -p create restore

一時データベースに完全なダンプを復元します。

mysql -u root -p restore <fulldump.sql

回復するテーブルをダンプします。

mysqldump restore mytable> mytable.sql

別のデータベースにテーブルをインポートします。

mysql -u root -p database <mytable.sql

Brom558 picture
2013年08月08日
11

簡単な解決策は、個別に復元したいテーブルだけのダンプを作成することです。 mysqldumpコマンドを使用して、次の構文でこれを行うことができます。

mysqldump -u [user] -p[password] [database] [table] > [output_file_name].sql

次に、通常どおりにインポートすると、ダンプされたテーブルのみがインポートされます。

JCCyC picture
2009年06月19日
9

いずれにせよ、それを行うプロセスは、ダンプのテキスト全体を調べて、何らかの方法で解析する必要があります。 私はただgrepしたい

INSERT INTO `the_table_i_want`

出力をmysqlにパイプします。 前にダンプの最初のテーブルを見て、INSERTが正しい方法で取得されていることを確認してください。

編集:OK、今回は正しいフォーマットになりました。

Maxime Biette picture
2013年09月18日
7

@brynコマンドを試す必要がありますが、 `区切り文字を使用すると、プレフィックスまたはサフィックスを持つテーブルも抽出されます。これは私が通常行うことです。

sed -n -e '/DROP TABLE.*`mytable`/,/UNLOCK TABLES/p' dump.sql > mytable.sql

また、テストの目的で、インポートする前にテーブル名を変更することをお勧めします。

sed -n -e 's/`mytable`/`mytable_restored`/g' mytable.sql > mytable_restored.sql

インポートするには、mysqlコマンドを使用できます。

mysql -u root -p'password' mydatabase < mytable_restore.sql
y.tk picture
2015年02月23日
7
  1. バックアップ

    $ mysqldump -A | gzip > mysqldump-A.gz
    
  2. 単一のテーブルを復元する

    $ mysql -e "truncate TABLE_NAME" DB_NAME
    $ zgrep ^"INSERT INTO \`TABLE_NAME" mysqldump-A.gz | mysql DB_NAME
    
Tim Hoolihan picture
2009年06月19日
4

これに対処する1つの可能な方法は、一時データベースに復元し、一時データベースからそのテーブルだけをダンプすることです。 次に、新しいスクリプトを使用します。

user1097790 picture
2011年12月14日
3

このツールはあなたが望むものかもしれません:tbdba-restore-mysqldump.pl

https://github.com/orczhou/dba-tool/blob/master/tbdba-restore-mysqldump.pl

例:データベースダンプファイルからテーブルを復元します。

tbdba-restore-mysqldump.pl -t yourtable -s yourdb -f backup.sql

Weston Ganger picture
2016年07月13日
3
sed -n -e '/-- Table structure for table `my_table_name`/,/UNLOCK TABLES/p' database_file.sql > table_file.sql

すべてのSQLダンプにDROP TABLEステートメントが含まれているわけではないため、これは上記の他のいくつかよりも優れたソリューションです。 これは、あらゆる種類のダンプで機能します。