导入MySQL数据库时获得进度指示器


21

我经常导入MySQL数据库,这可能需要一段时间。没有任何进度指示器。能以某种方式显示出来吗?导入记录,导入MB或导入表...比等待更好。有人知道吗?

我使用以下命令:

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

文件介于40-300 MB之间,并且主机位于本地网络内。



@sr_我认为pv这正是发问者要搜索的内容。我只是通过rpmforge将它安装在CentOS上。如果给定大小参数,它甚至会显示ETA。
尼尔斯

pv确实做到了!如果有人可以回答这个问题,我可以接受!
恢复莫妮卡2012年

Answers:


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

请检查UPDATE 2以获取我的最新版本

ps:请查看此博客http://blog.larsstrand.org/2011/12/tip-pipe-viewer.html

更新:似乎上面的链接已损坏,但我在这里找到了同一篇文章http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html

更新2:带有完整进度条的更好的解决方案。为此,您需要使用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}'

那么,您要做的最后一件事就是将所有内容组合在一起。

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

为了使它更好,您可以像这样添加进度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
一个更好的结果的衬板可能是这样的: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
Denis Pitzalis

16

为什么这么复杂?

这工作正常:

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

更简单,更清洁!
donquixote

7

我总是从MySql shell导入数据库。它没有提供进度指示器,但是(确实)滚动了它正在执行的动作,所以我知道它正在工作。

# mysql -u user -p -h host database
> source /path/to/some/largefile.sql;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.