クエリによるMySQLダンプ


220

mysqldumpシングルでできSQL queryますか?

にエクスポートするときのように、データベース全体をダンプすることを意味しますphpmyadminSQL

回答:


285

mysqldumpではなく、mysql cli ...

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase

必要に応じて、ファイルにリダイレクトできます。

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt

更新:元の投稿で、クエリでデータベースからダンプできるかどうか尋ねられました。彼が尋ねたことと彼が意味したことは異なっていました。彼は本当にすべてのテーブルをmysqldumpにしたかったのです。

mysqldump --tables myTable --where="id < 1000"

22
このダンプされたtxtファイルを復元する方法?
Vivek S

3
mysql -eアプローチを試みる人向け。私のためにスクリプトを少しカスタマイズする必要がありました。これを実行するには、SQLパスワードを入力する必要があります。mysql -e "select * from table WHERE query = 'asdasd'" -u root -p --database = DBNAME> text.txt
RichardW11

13
クエリ用の新しいテーブルを作成し(CREATE TABLE SELECT)、mysqldumpでそのテーブルをダンプできます。そうすれば、後で簡単に復元できます。
quano 2012

1
mysqldumpを使用してファイルを復元したい場合は、こちらをご覧ください。stackoverflow.com
Syco

2
mysql -eでエクスポートされ、タブ区切りで出力されるデータをインポートするには、mysqlimport --ignore-lines = 1 --fields-terminated-by = '\ t'を実行します。参照:stackoverflow.com/a/17071108/1676044
Kevin Borders

259

これはうまくいくはずです

mysqldump --databases X --tables Y --where="1 limit 1000000"

4
より適切な例は、-where = "myColumn <1000"など、実際にはwhere句のように見えるものである可能性があります。すべてのテーブルの最初の100万行は、要求するのは奇妙なことのようです;)
ijw

@ijw簡単に再挿入できるテーブルのバックアップを作成する場合は、制限以外の場所の句はおそらく必要ありません。
トーマスアーレ

3
@サゴタラン:まあ、それはクエリではありません。それがおそらく理由です。
オービットでの軽さのレース'16年

79
!!警告!!mysqldumpは、エクスポートされたファイルの先頭に「DROP TABLE」コマンドを追加します。つまり、部分的なエクスポートを行ってから再度インポートすると、他のすべてが失われます。そうですね。
タムリン2012

34
はい、保存したデータファイルから復元するときにテーブル内のすべてのデータを削除ないようにするには、--no-create-infoオプションを追加してください。例については、私の回答を参照しください。
Gary、

71

次のようにクエリをcsvとしてダンプできます。

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

8
複数のテーブルをダンプしたい場合はどうすればよいですか。
SIFE、

10
これにより、MySQLデータベースが実行されているマシン上にファイルが作成されます。したがって、リモートコンソールからクエリを実行している場合、このメソッドは失敗します。リモートコンソールからもできる方法があれば教えてください。
dknight

2
それはどこにファイルを保存しますか?
Techlord 2013

1
@dknight端末コンソールを介したリモートコンソールを意味していると想定しています。この場合scp、接続が終了した後にダンプファイルを取得できます。ここに例があります。 scp user@remote-server.com:/tmp/querydump.csv ~/local.csv
ルーク

安全ではないようです:#1290-MySQLサーバーは--secure-file-privオプションで実行されているため、このステートメントを実行できません
mikep

64

whereクエリを使用してテーブルをダンプします。

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql

テーブル全体をダンプします。

mysqldump mydatabase mytable > data.sql

ノート:

  • 置き換えmydatabasemytable、、希望の値を持つところのステートメント。
  • デフォルトでmysqldumpは、出力にDROP TABLEand CREATE TABLEステートメントが含まれます。したがって、保存したデータファイルから復元するときにテーブル内のすべてのデータを削除ない場合は、--no-create-infoオプションを使用してください。
  • あなたは適切なを追加する必要があり-h-uおよび-pそれぞれ、ご希望のデータベースのホスト、ユーザー、およびパスワードを指定するために、上記の例のコマンドにオプション。

38

mysqldumpの--whereオプションを使用して、待機している出力を生成できます。

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql

test.t1の最大100行がデータベーステーブルからダンプされます。

乾杯、WB


6

最後のn個のレコードをファイルにエクスポートする場合は、次のコマンドを実行できます。

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql

上記は、エクスポート元のテーブルに自動インクリメントされたid列があると仮定して、最後の100レコードをexport_file.sqlに保存します。

ユーザー、ローカルホスト、データベース、テーブルの値を変更する必要があります。オプションで、id列とエクスポートファイル名を変更できます。


5

MySQL WorkbenchもGUIでこの機能をきれいに備えています。クエリを実行するだけで、エクスポート/インポートの横にある保存アイコンをクリックします。

ここに画像の説明を入力してください

次に、リストから「SQL INSERTステートメント(* .sql)」を選択します。

ここに画像の説明を入力してください

名前を入力して[保存]をクリックし、テーブル名を確認すると、ダンプファイルが作成されます。


3

上記の多くを組み合わせると、meteridとタイムスタンプの両方に基づいてレコードを選択する、実際の例になります。私は何年もこのコマンドを必要としてきました。非常に迅速に実行されます。

mysqldump -uuser -ppassword main_dbo trHourly --where="MeterID =5406 AND TIMESTAMP<'2014-10-13 05:00:00'" --no-create-info --skip-extended-insert | grep  '^INSERT' > 5406.sql

-1

mysqlクエリ結果のコマンドラインをエクスポートします:

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt

それはubuntuで私のために働いています、コマンド:mysql -h localhost -u root -p dbname -e "select * from users where id = 1; select * from staff where id = 1" --xml> / var / www / html / project / backups / db.xml
Ramesh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.