2013-05-24 4 views
20

1つのデータベースと約150個のテーブルを持つ大きなSQLファイルがあります。そのデータベースをインポートするのにmysqlimportを使用したいと思いますが、インポートプロセスが無視したり、いくつかのテーブルをスキップしたりしたいと思います。すべてのテーブルをインポートするための正しい構文は何ですか?しかし、それらの一部を無視しますか?ありがとうございました。MySQLインポートデータベースですが、特定のテーブルを無視します

+0

可能かどうかわかりません。あなたは.sqlのバックアップを作成し、テキストでそれらを探し出し、それらを壊すことができますか、これはあなたが何度も何度も何度もやっていることでしょう。 REM stmtを見つけて置き換えるためのCTRL-Hや、最後に「table1からの削除」を実行することができます。 "table2から削除"ソートスクリプト – Drew

+0

省略が必要な部分はありますか?そして、彼らはどのように識別されていますかたぶん、すべてのものをインポートし、削除したいテーブルにdeleteテーブルを置いておきます。 – lurker

+0

私は、インポートプロセスが完了しないように、SQLファイル内のテーブルの1つに問題があると思われます。コマンドラインからのインポートプロセスの使用がMySQL Workbenchからのインポートユーティリティの使用と異なるのかどうか知っていますか? – DanielAttard

答えて

5

mysqlimportは、SQL文をインポートするための適切なツールではありません。このツールは、CSVなどの書式付きテキストファイルをインポートするためのツールです。

bash > mysql -D your_database < your_sql_dump.sql 

どちらmysqlmysqlimportはあなたが必要とする機能を提供します。あなたがやりたいことは、このようなコマンドでmysqlクライアントに直接SQLダンプを養うです。あなたのベストチャンスは、ダンプ全体をインポートし、あなたが望まないテーブルをドロップすることです。

ダンプの元のサーバーにアクセスできる場合は、mysqldump --ignore-table=database.table_you_dont_want1 --ignore-table=database.table_you_dont_want2 ...で新しいダンプを作成できます。

+0

コメントありがとうございます。私の問題は、MySQL Workbench内からimportコマンドを使用すると、このプロセスは動作しますが、テーブルの約3分の1しかインポートされず、特定のテーブルにハングすることになります。問題テーブルのためにインポートされたすべてのテーブルを取得できません。 – DanielAttard

+1

ダンプをコマンドラインから直接インポートしてみてください。あなたは同じ問題を抱えていますか?少なくとも、何らかのエラーメッセージが表示されることがあります。 – RandomSeed

1

必要であれば、一度にこの一つのテーブルを行うことができます。

mysqldump -p sourceDatabase tableName > tableName.sql 
mysql -p -D targetDatabase < tableName.sql 
85

RandomSeedによって受け入れられた答えは長い時間がかかることがあります!テーブルをインポートすると(後でドロップするだけで)、サイズによっては無駄になることがあります。ファイルの場合

は、私は現在、7ギガバイト、私はそこに「必要」はありません、ログテーブルのデータとなっている6ギガバイト程度のファイルを取得する

mysqldump -u user -ppasswd --opt --routines DBname > DBdump.sql 

を使用して作成しました。このファイルをリロードするには数時間かかります。私は(開発目的のために、またはこれまでにライブの回復のために必要な場合)再ロードする必要がある場合は、私は、このようにファイルをスキムミルク:

sed '/INSERT INTO `TABLE_TO_SKIP`/d' DBdump.sql > reduced.sql 

としてリロードします。

mysql -u user -ppasswd DBname < reduced.sql 

これは私の完全なデータベースを提供し、 「望ましくない」テーブルが作成されていて空です。実際にテーブルを必要としない場合は、ロードが完了した後に空のテーブルをドロップするだけです。 - 「TABLE_TO_SKIPのINSERT INTO」含まれている場合がありますあなたのダンプの手順に注意

sed '/INSERT INTO `TABLE1_TO_SKIP`/d' DBdump.sql | \ 
sed '/INSERT INTO `TABLE2_TO_SKIP`/d' | \ 
sed '/INSERT INTO `TABLE3_TO_SKIP`/d' > reduced.sql 

「ガッチャ」をあります:

複数のテーブルのためには、このような何かを行うことができます。

+4

これは天才で、1時間30秒です。 –

+3

よろしく!素晴らしい、私はちょうど1GBから72MBにバックアップを減らしました、私に多くの時間を節約していただきありがとう –

+1

受け入れられた答えよりも良い、 – Edgar

関連する問題