微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 导入MySQL数据库时获取进度指示器

我经常导入MySQL数据库,这可能需要一段时间.没有任何进度指示器.不知何故可以展示一个吗?导入的记录,导入的MB或导入的表……任何事情都比等待更好.有人有什么想法吗?

我用这个命令:

MysqL -uuser -p -hhost数据库< largefile.sql 文件介于40-300 MB之间,主机位于本地网络中.

解决方法:

一个很好的工具叫做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

Please check UPDATE 2 for my latest version

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

更新:似乎上面的链接被打破,但我在这里找到了相同的文章http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html

更新2:使用FULL进度条更好的解决方案.要做到这一点,你需要在pv选项中使用2 build.一个是–progress指示进度条,第二个是–size告诉pv整个文件有多大.

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

..问题是.gz原始文件大小.您需要以某种方式获取解压缩的原始文件大小信息而无需自行解压缩,否则您将浪费宝贵的时间来解压缩此文件两次(第一次用于pv,第二次用于zcat).但幸运的是,您有gzip -l选项,其中包含有关我们的gziped文件的未压缩信息.不幸的是,你有表格格式,所以你需要在它可以使用之前提取.所有这些都可以在下面看到:

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

为了使它更好,你可以像这样添加进程名称

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文件.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐