有没有什么办法可以显示`gunzip <database.sql.gz |的进度 mysql …`进程?

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

$ 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来查看当前正在插入的表(我当前使用的方法,但是有些表是巨大的,至less有一个数据库只有一个巨大的表,所以这个表中的大部分都被卡住了,less于帮助)

所有的db.sql.gz文件都是标准的gzipped mysqldumps,所以我不认为我可以在转储中创build任何东西来给我一个更新。 (但是,如果我错过了某些东西,我会开放的)


赏金规则

答案必须:

  1. 提供有用且合理的准确进度(可视化如scp (首选!)或通过简单的进度数据库表,可轻松访问)。
  2. 不要打破常规mysqldump导出或常规gunzip ... | mysql 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 

我想我会加载数据之前执行一个数据库,发生后我可以在数据库目录中运行一个连续的“du -sh”。 如果我知道原始数据库目录的大小(为什么不是我?),那么我可以使用它作为进度监视器。 数据库是可以丢弃的吗?