web-dev-qa-db-ja.com

`gunzip <database.sql.gz |の進行状況を表示する方法はありますか? mysql ... `プロセス?

週に一度、次のようにローカル開発環境に巨大なデータベース更新を実行する必要があります。

$ gunzip < /path/to/database1.sql.gz | mysql -uUSER -p database1 &
$ gunzip < /path/to/database2.sql.gz | mysql -uUSER -p database2 &
$ gunzip < /path/to/database3.sql.gz | mysql -uUSER -p database3 &

完了するまでに数時間かかる可能性があるため、これらを一晩実行しようとしています。

これらのタスクの進捗状況を表示する方法を考え出すのを手伝ってもらえますか?

推測は次のとおりです。

  1. Dbの非圧縮ファイルサイズを取得し、ローカルのdbサイズと比較します
  2. 実行show processlist mysqlで現在挿入しているテーブルを確認します(現在のメソッドですが、一部のテーブルは巨大で、少なくとも1つのdbには巨大なテーブルが1つしかないため、プロセスの大部分はこのテーブルに残っています。役立つよりも)

Db.sql.gzファイルはすべて標準のgzip圧縮されたmysqldumpであるため、更新を提供するためにダンプに何かを組み込むことはできないと思います。 (しかし、私は何かを見逃しているなら、私はそれに対してオープンです)


バウンティルール

答えは:

  1. 有用で合理的に正確な進行状況を提供します(scpのような視覚的(推奨!)、または簡単にアクセスできる単純な進行状況データベーステーブルを通じて)。
  2. 通常のmysqldumpエクスポートまたは通常のgunzip ... | mysql import(あなたが思いついたものを使用しないかもしれない他のエンジニア向け)
  3. DBAに心臓発作を起こさないでください。特別なmysqldumpまたは別のmysqlブランチリクエストに簡単に対応してください。
40
Ryan

コマンドで-v:詳細モード(進行状況を表示)を使用するか、次のようにgzip、gunzipコマンドの進行状況を表示するPipe Viewer(pv)を使用する別の方法があります。

$ pv database1.sql.gz | gunzip | mysql -u root -p database1

これにより、scpと同様の進行状況が出力されます。

$ pv database1.sql.gz | gunzip | mysql -uroot -p database1
  593MiB 1:00:33 [ 225kiB/s] [====================>              ] 58% ETA 0:42:25

Pipe Viewerを使用してmysqldumpを監視することもできます。

mysqldump -uroot -p database1 | pv | gzip -9 > database1.sql.gz

pvがまだない場合は、次を使用してインストールできます。

yum install pv

またはmacportsを使用

Sudo port install pv
109
Ali

データをロードする前にドロップデータベースを実行し、それが発生した後、データベースディレクトリで継続的な「du -sh」を実行できると思います。元のデータベースディレクトリのサイズがわかっていれば(なぜだろうか?)、進捗モニターとして使用できます。データベースはドロップ可能ですか?

2
banyek