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

$ 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只有一个巨大的表,所以大部分进程都被困在这个表中,使得这个选项没有什么帮助)

所有的数据库.sql.gz文件是标准的gzipped mysqldumps,所以我不认为我可以在转储中构建任何东西来更新.(但如果我错过了什么,我愿意接受)


Bounty Rules

答案必须:

  1. 提供有用且合理准确的进度(如scp(首选!)或者通过一个简单的进度数据库表(可以轻松访问).
  2. 不 destruct 常规mysqldump出口或常规gunzip ... | mysql进口(适用于其他工程师,他们可能不会使用你提出的任何东西)
  3. 不要让我的DBA心脏病发作——所以在特殊的mysqldump或其他mysql分支请求上保持轻松.

推荐答案

您可以在命令中使用-v:Verbose模式(show progress),也可以使用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 的

brew install pv

Mysql相关问答推荐

同一类型对象之间的多对多关系

S优化联接更新的最佳方式是什么?

如何将左联接的小计/总计行中的所有列作废

子查询是否可以按主查询中的列进行分组?

为什么用PyMySQL构建的json返回结果会出现重复?

实体内约束的唯一增量 ID 生成

替代对多个表执行 FULL OUTER JOIN?

MySql SELECT 查找包含数字的区间的时间复杂度是多少?

MySQL CHECK 约束以确保记录不使用自动增量 ID 引用自身?

如何在 mysql 的 group by 子句中 Select 最后创建的记录?

检索按键列值分组的最新日期 (MySql)

为什么这个查询需要超过 5 秒才能运行?

MySQL 8 - MBRContains 不使用空间索引

使用数据表的直方图(SQL 查询)

如何在 MYSQL 中使用多个表进行插值

phpMyAdmin - 无法连接 - 无效设置 - 自从我添加了 root 密码 - 被锁定

MySQL术语约束与外键的区别?

我可以在 PHP 中使用 PDO 创建数据库吗?

MySQL DAYOFWEEK() - 我的一周从星期一开始

SELECT INTO 和未声明的变量错误