Does mysqldump support a progress bar?

mysql show-progress
--show-progress-size
mysqldump --single-transaction
verbose mysql dump
how long does mysql dump take
mysqldump gzip
mysqldump timeout
mysqldump lock-tables

Is there any way to determine, while mysqldump is running, how much of the backup has completed or how much is remaining?

Yes, a patch was committed on March 27th, 2010:

This new patch has an extra parameter --show-progress-size which by default is set to 10,000. So when --verbose is used, every 10,000 lines you will get a regular status output of the number of rows for a particular table dumped.

So check your version, update if needed and enjoy.

How can I monitor the progress of an import of a large .sql file , which will show a progress bar as the program runs. It's very useful and you can also use it to get an estimate for mysqldump progress. table is InnoDB and you have innodb_file_per_table disabled, not even the OS point of view can help. The mysqldump-command doesn't really support viewing the progress of exporting a database. I guess it's because it gives overhead, and it's frankly quite difficult to generate a fluid progressbar. I guess it's because it gives overhead, and it's frankly quite difficult to generate a fluid progressbar.

Install and use pv (it is available as a yum package for CentOS)

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

PV ("Pipe Viewer") is a tool for monitoring the progress of data through a pipeline. It can be inserted into any normal pipeline between two processes to give a visual indication of how quickly data is passing through, how long it has taken, how near to completion it is, and an estimate of how long it will be until completion.

Assuming the expect size of the resulting dumpfile.sql file is 100m (100 megabytes), the use of pv would be as follows:

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

The console output will look like:

[===> ] 20%

Look at the man page man pv for more options. You can display the transfer rate, or how much time has elapsed, or how many bytes have transferred, and more.

If you do not know the size of your dump file, there is a way to obtain a size of the MySQL database from the table_schema - it will not be the size of your dump file, but it may be close enough for your needs:

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;

Update

In my experience, when dumping the entire MySQL server, the actual uncompressed size of the mysql dump (using the mysqldump --hex-blob option) is roughly between 75% to 85% of the live size of MySQL data obtained from information_schema. So for a general solution, I might try the following:

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

Mysqldump with progressbar, Mysqldump with progressbar mysqldump -command doesn't really support viewing the progress of echo "Actual filesize is "$realsize"MB." mysqldump: unknown option '--show_progress_size' I am unable to find any record of this option being removed from mysqldump. I am using version 5.1.58 of MySQL community server, with mysqldump at Ver 10.13. If this feature has indeed been removed, then I am looking for a way to implement an accurate progress bar for dumps and restores.

A complete version of the Russell E Glaue answer. Get rounded db size as pv accepts integer only and calculate data length without indexes, per @mtoloo comment:

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';")

Create a backup into timestamped filename:

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

Import MySql dump with progress indicator, If the file is larger, the timer can be off by a bit as slowdown happens. Anyhow, the import was faster than using a typical mysql import. Before  i'm developing an app for my company, using Python2.7 and MariaDB. I have created a functions which backups our main database server to another database server. I use this command to do it:mysqldum

I was looking for some similar tool (PV) but Im not dumping DBs. While merging two large databases, with some extra calculations and formulas, the process was not listed on TOP nor HTOP utilities, but only on the header as a io% (Only shows in the list at startup process then it disapears). Shows high usage all the time, but in this case is on IO side and its not listed in the bodylist on the utilities as other processes do display. I had to use IOSTAT instead to see writing progress of output database but couldnt figure if was actually doing the writing on the file (only displays xfer rates). I found out the old way, using Filezilla FTP, comparing source databases sizes, and since Im doing a merge, the output file had to showed up while the files were merged. I was able to watch the increment when refreshing filezilla directory contents until process ended succesfully, the size of the sum of both DBs merged as expected. (You can actually do a refresh per minute and calculate manually the time of your hardware io xfer and processing speed)

I went to the MySQL directory (Where the actual database is stored as files, in my case ../mysql/database/tablename.MYD ... (files in MYSQL are saved with a corresponding .FRM file that contains the table format data, and an .MYI file, which serves as the database index) and just refresh the page to be able to see actual size of output merged file and indeed, worked out for me.

By the way, TOP and HTOP only showed MYSQLD doing some backgroud process but the workhorse was transfered to de IO side for output. Both of my merging DBs were of about 20 million rows about 5 gigs each, on my CPU dual Core was taking hours to merge, and no progress at all were showed anywhere (Even phpmyadmin timed out but the process continued). Tried to use PV using PID numbers but since Im not doing dumping there is no transfer to pipe. Anyway just write this out for someone that is looking for effective and easy way to check progress of creation of output file. It should work also for dumps and restores. Be patience, once it starts, it will finish, thats for sure, unless error on SQL sintax (Happened to me before, no rows were merged at all on previous trials, it took its sweet time but nothing happened at the end, and without tools, impossible knowing whats going on, its a waist of time), I suggest you can try with some small sample rows before commit to the time consuming real operation, to validate your SQL sintax.

Not completely answering your question on progress bar on a c++ program, but you can take this to grab file size of the MYD file created and calculate a progress bar using source file size divided by xfer rate to calculate remaining time. Best Regards.

Show mysqldump progress using pv – Mozinc, mysqldump | pv --progress --size 100m > dumpfile.sql The console output You can display the transfer rate, or how much time has elapsed, or how -to-have-​mysqldump-progress-bar-which-shows-the-users-the-status-o  Let’s look at how to show progress of mysqldump and other mysql utilities. Bar (Command Line Progress Bar) The Bar utility, or in full terms Command Line Progress Bar can be downloaded from Sourceforge. If you are running Ubuntu, it’s as simple as running ‘ sudo apt-get install bar ’ to install it. You then simply pipe your MySQL import

Adventures in implementing a MySQL dump/restore progress bar , One of the requirements is to be able to dump the contents of the But I still can't implement an accurate progress bar because mysqldump I understand your frustration, perhaps http://linux.die.net/man/1/pv could help? monitor progress of command line operations. possible duplicate of is there a way to have mysqldump progress bar which Does mysqldump support a progress bar?

A Linux Tool to Monitor Progress of MySQL Data Imports and , As, importing and exporting of databases is one of the most frequent tool that could help me check the approximate progress of import and the progress bar cannot indicate how close to completion the transfer is, [root@vm1 vagrant] mysqldump --login-path=mypath sbtest sbtest4 | pv --progress --size  which will show a progress bar as the program runs. It's very useful and you can also use it to get an estimate for mysqldump progress. pv dumps the sqlfile.sql and passes them to mysql (because of the pipe operator). While it is dumping, it shows the progress.

Monitor MySQL command line imports and exports on Ubuntu using , WORK WITH ME mysqldump -udbuser -p dbname > dbfile.sql By default the tools don't output any progress indicator (or anything at Fortunately, there is a way you can run imports and exports and show a progress bar,  mysqldump: unknown option '--show_progress_size' I am unable to find any record of this option being removed from mysqldump. I am using version 5.1.58 of MySQL community server, with mysqldump at Ver 10.13.

Comments
  • I'm using mysqldump Ver 10.13 Distrib 5.5.11, for Win32 (x86), and it doesn't appear to have been built with this patch. How do I determine if this patch has made it into a stable release?
  • mysqldump --help | grep progress # Not output mysqldump --version mysqldump Ver 10.13 Distrib 5.6.10, for Linux (x86_64)
  • mysqldump --help | grep progress is blank for mysqldump Ver 10.13 Distrib 5.6.22, for osx10.10 (x86_64).
  • blank as well for Ver 10.13 Distrib 5.5.43-37.2, for debian-linux-gnu (x86_64) from Percona
  • still blank Ver 10.13 Distrib 5.7.19, for Linux (x86_64)
  • Since indexes are not appeared in dump, index_length should be omitted.
  • Consider removing the --progress argument. In my case (version 1.5.3), it means displaying the progress bar only but there is more information when I don’t specify it.
  • this is not exact, not even close internal size in MySQL is completely different from what you actually will have in the backup file.
  • @CorneliuMaftuleac is there a better way to get sense of the dump progress, I will appreciate your input.
  • Unfortunately I dont think there is any way to know in advance what the backup size will be.
  • By the way, more memory the better. Adding extra memory and configuring my.cnf for I/O and cache buffers can improve a lot on the merge, xfer, indexing and dumping. You can setup temporary super memory server for temporary time consuming task. I found this calculator useful to setup the settings. Check your version on MySQL as parameters maybe different. mysqlcalculator.com