gpt4 book ai didi

mysql - 有什么方法可以显示 `gunzip < database.sql.gz | mysql ...` 进程的进度吗?

转载 作者:IT老高 更新时间:2023-10-28 12:58:34 25 4
gpt4 key购买 nike

每周一次,我需要在本地开发环境中运行一次大型数据库更新,如下所示:

$ 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. 获取数据库的未压缩文件大小并与我的本地数据库大小进行比较
  2. 在 mysql 中运行 show processlist 以查看它当前正在插入哪个表(我目前的方法,但有些表很大,而且我的至少一个 db 只有一个巨大的表,所以大部分进程卡在此表中,因此此选项无济于事)

所有 db.sql.gz 文件都是标准 gzip 压缩的 mysqldump,所以我认为我无法在转储中构建任何内容来提供更新。 (但如果我遗漏了什么,我愿意接受)


赏金规则

答案必须:

  1. 提供有用且相当准确的进度(无论是像 scp(首选!)这样的视觉效果,还是通过可以轻松访问的简单进度数据库表)。
  2. 不破坏常规 mysqldump 导出或常规 gunzip ... | mysql 导入(对于可能不会使用你想出的任何东西的其他工程师)
  3. 不要让我的 DBA 心脏病发作——所以请在特殊的 mysqldump 或替代 mysql 分支请求上保持轻松。

最佳答案

您可以在命令中使用 -v : 详细模式(显示进度),或者使用 Pipe Viewer (pv) 显示 gzip、gunzip 命令的进度的另一种方法如下:

$ 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

或使用自制软件

brew install pv

关于mysql - 有什么方法可以显示 `gunzip < database.sql.gz | mysql ...` 进程的进度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19598797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com