4 题: mysqldump是否支持进度条?

在...创建的问题 Mon, Jan 7, 2019 12:00 AM

有没有办法确定,mysqldump正在运行,有多少备份已完成或剩余多少?

    
61
4个答案                              4 跨度>                         

是的,2010年3月27日提交了补丁

  

这个新补丁有一个额外的参数--show-progress-size by   default设置为10,000。因此,当使用--verbose时,每10,000个   您将获得一行的常规状态输出行数   倾销的特定表。

请检查您的版本,根据需要进行更新并享受。

    
44
2016-03-10 20:18:14Z
  1. 我正在使用mysqldump Ver 10.13 Distrib 5.5.11,对于Win32(x86),它似乎没有用这个补丁构建。如何确定此补丁是否已成为稳定版本?
    2011-05-02 14:31:12Z
  2. mysqldump --help | grep progress#not output mysqldump --version mysqldump Ver 10.13 Distrib 5.6.10,for Linux(x86_64)
    2013-05-06 23:09:45Z
  3. mysqldump --help | grep progressmysqldump Ver 10.13 Distrib 5.6.22, for osx10.10 (x86_64)为空白。
    2015-02-25 22:19:31Z
  4. 空白以及来自Percona的Ver 10.13 Distrib 5.5.43-37.2, for debian-linux-gnu (x86_64)
    2015-05-25 00:49:26Z
  5. 仍为空白Ver 10.13 Distrib 5.7.19, for Linux (x86_64)
    2017-08-02 09:18:31Z
  6. 醇>

安装并使用pv(它作为CentOS的yum包提供)

http://www.ivarch.com/programs/pv.shtml

  

PV(“Pipe Viewer”)是一种用于监控数据进度的工具   通过管道。它可以插入任何正常的管道   两个进程之间给出了数据快速的可视化指示   正在经过,已经花了多长时间,有多接近完成它   是,并估计完成前的时间。

假设生成的dumpfile.sql文件的预期大小为100米(100兆字节),则使用pv将如下所示:

mysqldump <parameters> | pv --progress --size 100m > dumpfile.sql

控制台输出如下所示:

[===> ] 20%

查看手册页man pv以获取更多选项。您可以显示传输速率,已经过了多长时间,传输了多少字节等等。

如果您不知道转储文件的大小,有一种方法可以从table_schema获取MySQL数据库的大小 - 它不会是您的转储文件的大小,但它可能足够接近您的需要:

 
SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema;

更新强>

根据我的经验,当转储整个MySQL服务器时,mysql转储的实际未压缩大小(使用mysqldump --hex-blob选项)大约是从MySQL数据获取的实时大小的75%到85%之间INFORMATION_SCHEMA。因此,对于一般解决方案,我可能会尝试以下方法:

SIZE_BYTES=$(mysql --skip-column-names <parameters> <<< 'SELECT ROUND(SUM(data_length) * 0.8) AS "size_bytes" FROM information_schema.TABLES;')

mysqldump <parameters> --hex-blob | pv --progress --size $SIZE_BYTES > dumpfile.sql

    
60
2018-05-04 16:20:54Z
  1. 由于转储中没有出现索引,因此应省略index_length
    2016-03-05 09:40:38Z
  2. 考虑删除--progress参数。在我的情况下(版本1.5.3),它表示只显示进度条 但是当我没有指定它时会有更多信息。
    2017-04-18 06:37:44Z
  3. 醇>

Russell E Glaue 答案的完整版本。 得到舍入的数据库大小,因为pv只接受整数并计算没有索引的数据长度,每 @ mtoloo 评论:

 
db_size=$(mysql  -h"$DB_HOST" \
    -u"$DB_USERNAME" \
    -p"$DB_PASSWORD" \
    --silent \
    --skip-column-names \
    -e "SELECT ROUND(SUM(data_length) / 1024 / 1024, 0) \
        FROM information_schema.TABLES \
        WHERE table_schema='$DB_NAME';")

创建时间戳文件名的备份:

 
mysqldump -h"$DB_HOST" \
    -u"$DB_USERNAME" \
    -p"$DB_PASSWORD" \
    --single-transaction \
    --order-by-primary \
    --compress \
    $DB_NAME | pv --progress --size "$db_size"m > "$(date +%Y%m%d)"_backup.sql
    
7
2017-07-13 16:29:17Z
  1. 这是不确切的,即使MySQL中的内部大小与您在备份文件中实际存在的内容完全不同。
    2018-03-14 13:42:12Z
  2. @ CorneliuMaftuleac有更好的方法来了解转储进度,我将非常感谢您的意见。
    2018-03-14 14:33:38Z
  3. 不幸的是我不认为有任何方法可以事先知道备份大小是什么。
    2018-03-14 20:05:03Z
  4. 醇>

我正在寻找一些类似的工具(PV),但我没有倾销DB。在合并两个大型数据库时,通过一些额外的计算和公式,该过程未在TOP或HTOP实用程序中列出,但仅在标题上列为io%(仅在启动过程中显示在列表中,然后消失)。始终显示高使用率,但在这种情况下是在IO端,并且未在其他进程显示的实用程序的bodylist中列出。我不得不使用IOSTAT来查看输出数据库的写入进度,但无法确定是否实际上正在对文件进行写入(仅显示xfer速率)。我发现了旧方法,使用Filezilla FTP,比较源数据库大小,因为我正在进行合并,输出文件必须在文件合并时出现。刷新filezilla目录内容时,我能够看到增量,直到进程成功结束,两个DB的总和大小按预期合并。 (实际上,您可以每分钟刷新一次并手动计算硬件时间和处理速度)

我去了MySQL目录(实际的数据库存储为文件,在我的情况下是../mysql/database/tablename.MYD ...(MYSQL中的文件与相应的.FRM文件一起保存,其中包含表格格式数据,以及作为数据库索引的.MYI文件),只需刷新页面即可查看输出合并文件的实际大小,实际上对我来说很有用。

顺便说一句,TOP和HTOP只显示MYSQLD做了一些背景过程但是主力转移到了de IO侧输出。我的两个合并数据库大约有2000万行,每个约5个演出,在我的CPU上,双核需要花费数小时才能合并,并且没有任何进展在任何地方显示(甚至phpmyadmin超时但过程仍在继续)。尝试使用PID数字使用PV,但由于我没有进行转储,因此没有转移到管道。无论如何只是为那些正在寻找有效且简单的方法来检查输出文件创建进度的人写出来。它也适用于转储和恢复。耐心,一旦它开始,它就会完成,这肯定,除非SQL sintax上的错误(之前发生过,在之前的试验中根本没有合并任何行,它花了很多时间但最后没有发生任何事情,没有工具,不可能知道什么是正在进行,它是时间的腰部),我建议您可以尝试使用一些小样本行,然后再进行耗时的实际操作,以验证您的SQL sintax。

在c ++程序上没有完全回答关于进度条的问题,但你可以用它来获取创建的MYD文件的文件大小,并使用源文件大小除以计算进度条xfer率来计算剩余时间。最诚挚的问候。

    
2
2018-11-25 11:20:32Z
  1. 顺便说一下,内存越多越好。为I /O和缓存缓冲区添加额外内存和配置 my.cnf 可以在合并,xfer,索引和转储方面提高很多。您可以为临时耗时任务设置临时超级内存服务器。我发现这个计算器对设置设置很有用。检查MySQL上的版本,因为参数可能不同。 mysqlcalculator.com
    2018-11-25 12:48:19Z
  2. 醇>
来源放置 这里