有没有办法在`gunzip <database.sql.gz |上显示进度 mysql ...`进程?

Rya*_*yan 40 mysql sql progress gunzip sql-insert

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

$ 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 &
Run Code Online (Sandbox Code Playgroud)

我试图在一夜之间运行这些,因为它可能需要几个小时才能完成.

你能帮我提出一个方法来展示这些任务的进展吗?

以下是一些猜测:

  1. 获取数据库的未压缩文件大小,并与我的本地数据库大小进行比较
  2. show processlist在mysql中运行以查看它当前正在插入的表(我当前的方法,但是一些表是巨大的,并且我的至少一个数据库只有一个巨大的表,因此该过程的大部分都停留在此表中,使此选项小于有用)

所有db.sql.gz文件都是标准的gzip压缩mysqldumps,所以我认为我不能在转储中构建任何内容来为我提供更新.(但如果我遗漏某些东西,我会对此持开放态度)


赏金规则

答案必须:

  1. 提供有用且合理准确的进度(可视化scp(首选!)或通过可轻松访问的简单进度数据库表).
  2. 不打破常规mysqldump出口或定期gunzip ... | mysql进口(对于其他工程师,可能不会使用你想出的任何东西)
  3. 不给我的DBA心脏病发作 - 所以保持对特殊mysqldump或替代mysql分支请求的轻松.

Ali*_*Ali 111

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

$ pv database1.sql.gz | gunzip | mysql -u root -p database1
Run Code Online (Sandbox Code Playgroud)

这将输出类似于scp的进度:

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

您还可以使用Pipe Viewer监视mysqldump:

mysqldump -uroot -p database1 | pv | gzip -9 > database1.sql.gz
Run Code Online (Sandbox Code Playgroud)

如果您还没有pv,可以使用以下命令安装:

yum install pv
Run Code Online (Sandbox Code Playgroud)

或者使用macports

sudo port install pv
Run Code Online (Sandbox Code Playgroud)

  • #pv gunzip </path/to/database1.sql.gz | mysql -uUSER -p database1; 这将显示如下进度条:96.8MB 0:00:17 [5.51MB/s] [==>] 11%ETA 0:02:10 (4认同)