每周一次,我需要在我的本地开发环境中运行一个巨大的数据库更新,如下所示:
$ 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 &
我试图在一夜之间运行这些,因为它可能需要几个小时才能完成。
你能帮我提出一个方法来展示这些任务的进展吗?
以下是一些猜测:
show processlist
以查看它当前正在插入的表(我当前的方法,但是有些表很大,而且我的至少一个数据库只有一个巨大的表,因此大部分进程都停留在这个表,留下这个选项不是很有帮助)所有db.sql.gz文件都是标准的gzip压缩mysqldumps,所以我认为我不能在转储中构建任何内容来为我提供更新。 (但如果我遗漏了某些东西,我会对此持开放态度)
赏金规则
答案必须:
scp
(首选!)或通过可轻松访问的简单进度数据库表。)mysqldump
导出或定期gunzip ... | mysql
导入(对于其他可能不会使用您提出的内容的工程师)mysqldump
或其他mysql分支请求上保持轻松。答案 0 :(得分:107)
您可以在命令中使用-v:详细模式(显示进度),或者使用管道查看器(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
答案 1 :(得分:2)
我想我会在加载数据之前执行一个drop数据库,在它发生之后我可以在数据库目录中运行一个连续的“du -sh”。如果我知道原始数据库目录的大小(为什么不呢?)那么我可以将它用作进度监视器。 数据库是否可以删除?