MySQLデータベースのインポート時に進行状況インジケーターを取得する


21

私は頻繁にMySQLデータベースをインポートしますが、これには時間がかかる場合があります。進行状況インジケーターは一切ありません。なんとなく見せることはできますか?インポートされたレコード、MBインポートされたレコード、またはインポートされたテーブルのいずれか。誰でもいいの?

私はこのコマンドを使用します:

mysql -uuser -p -hhost database < largefile.sql

ファイルは40〜300 MBで、ホストはローカルネットワーク内にあります。



@sr_ pv質問者がまさに検索するものだと思います。rpmforgeを介してCentOSにインストールしました。sizeパラメーターを指定すると、ETAも表示されます。
ニルス

pv確かにトリックをしました!誰かがこれを答えにすることができれば、私はこれを受け入れることができます!
モニカの復活

回答:


31

という素敵なツールがあります pv

# On Ubuntu/Debian system
$ sudo apt-get install pv

# On Redhat/CentOS
$ sudo yum install pv

次に、例えば、あなたはこのようにそれを使用することができます

$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname

最新バージョンについては、アップデート2を確認してください

ps:このブログをチェックhttp://blog.larsstrand.org/2011/12/tip-pipe-viewer.html

更新:上記のリンクが壊れているようですが、ここで同じ記事を見つけましたhttp://blog.larsstrand.no/2011/12/tip-pipe-viewer.html

更新2:FULLプログレスバーによるさらに優れたソリューション。それを行うには、2つのビルドインpvオプションを使用する必要があります。一つは、--progressプログレスバーを表示するために第二で--size伝えるためにpv、全体のファイルがどのように大規模な。

pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES

..問題は.gz元のファイルサイズにあります。あなたは、そうでなければ、二度(初めてこのファイルを解凍するために貴重な時間を失うことになる、それを自己を開梱せずに解凍し、元のファイルサイズ情報を取得何とか必要pvとする第二の時間zcat)。しかし、幸いなことにgzip -l、gzipされたファイルに関する非圧縮情報を含むオプションがあります。残念ながらテーブル形式であるため、使用する前に抽出する必要があります。すべて一緒に以下に見ることができます:

gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'

Uff ..最後に行う必要があるのは、すべてを一緒に結合することです。

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname

さらに良くするには、次のようにprogres NAMEを追加できます

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass dbname

最終結果:

Importing.. : [===========================================>] 100%

更新3:すばやく使用するために、カスタム関数を作成します。

mysql_import() {
  zcat $2 | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass $1
}

使用法:

mysql_import dbname /path/to/our/database.sql.gz

どこに置くべきかわからない場合は、この答えを読んでくださいhttps : //unix.stackexchange.com/a/106606/20056

エイリアス間に関数を追加できます。したがって、たとえば~/.bash_aliasesファイルを使用できます。


これはすごい。
デイブ

1
より良い結果に1つのライナーがこのことができます:pv --progress --name 'DB Import in progress' -tea /path/to/our/database.sql.gz | zcat | mysql -h db_host -u db_user -pdb_password db_name
デニスPitzalis

16

なぜそんなに複雑なのですか?

これはうまくいきます:

pv dump.sql.gz | zcat | mysql -u user -ppasswd database

はるかにシンプルでクリーン!
ドンキホーテ

7

私は常にMySqlシェルからデータベースをインポートします。進行状況インジケーターは提供されませんが、実行中のアクションを(すばやく)スクロールするため、機能していることがわかります。

# mysql -u user -p -h host database
> source /path/to/some/largefile.sql;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.