35

私のデータベースには、table1、table2、table3の3つのテーブルがあります。

このデータベースで次の条件でmysqldumpを実行したいと思います。

  • すべてのテーブルのダンプ構造
  • table1とtable2のデータのみをダンプし、table3のデータは無視します

現在、私は2つのmysqldumpステートメントでこれを行います

mysqldump -u user -p -d db > db_structure.sql
mysqldump -u user -p db --ignore-table=db.table3 > table1_and_table2_data.sql

ダンプされたのと同じ順序でそれらをインポートします(構造、次にtable1とtable2からのデータ)

これを単一のmysqldumpコマンドに組み合わせる方法はありますか?

4

5 に答える 5

44

これらを1つのコマンドにまとめることはできませんが、両方のコマンドを同時に実行して同じファイルに出力することはできます。

mysqldump -u user -p --no-data db > structure.sql; mysqldump -u user -p db table1 table2 >> structure.sql

パスワードを2回入力する必要がないようにするためです-ppassword(スペースが不足していることに注意してください)。また--no-data、最初のコマンドで使用するか、データも使用することになります。-データベースを1つだけ実行する場合は、dは必要ありません。

于 2009-11-19T16:10:01.980 に答える
7

私が行ったように、ファイルにリダイレクトして次のコマンドでそのファイルに追加するのではなく、出力を別のコマンドにパイプしたい場合は、次のことを試してください(staskの例から変更)。

(mysqldump -u $1 -p$2 -d db && mysqldump -u $1 -p$2 db --ignore-table=db.table3) |\
your_command

... 私の場合:

(mysqldump -u $1 -p$2 -d db && mysqldump -u $1 -p$2 db --ignore-table=db.table3) |\
gzip -9 > filename.sql.gz

2つのmysqldumpコマンドを括弧で囲むと、サブシェルが作成され、その出力がgzipにパイプされてから、ファイルにリダイレクトされます。

PS:しかし、私はそれを1つのmysqldump呼び出しに結合することもできませんでした。

于 2011-04-03T15:30:31.603 に答える
1

1つのコマンドでそれを実行できるとは思いません。しかし、あなたは間違いなく出力を1つのファイルにマージすることができます。次のようなシェルスクリプトでラップしないのはなぜですか。

mysqldump -u $1 -p$2 -d db > dump.sql && mysqldump -u $1 -p$2 db --ignore-table=db.table3 >> dump.sql

このスクリプトは、ユーザー名とパスワードの2つのパラメーターを使用して実行します。

于 2009-11-19T16:11:54.820 に答える
0

これは実際には非常に単純です。データが不要なテーブルで--where句を使用し、常にfalseの条件を指定します。たとえば、fooとgahにデータをロードし、barにスキーマのみをロードします。

mysqldump -u ... -p... myDatabase foo bar --where='1=2' gah > myfile.sql

そうです、これは1行で実行できます。

于 2016-02-25T01:00:43.203 に答える
0

INSERT INTO ...パーツを削除できます。

mysqldump \
  --opt \
  -u ${DB_USER} -p${DB_PASS} \
  ${DB_NAME} \
  | grep -v 'INSERT INTO `table3`' \
  | grep -v 'INSERT INTO `table4`'
于 2016-11-04T13:33:16.943 に答える