How to Backup & Restore MySQL Databases with mysqldump

In this article, we'll discover how to back up a MySQL database using the mysqldump utility in the command line. Then we'll quickly walk through restoring that database from the output file.

There are many options for backing up a database using this tool. We won't cover all of them in this article, but there are some very useful options that are good to know when creating quick backups.

Backing Up Your Entire MySQL Database

The most common backup approach I take is backing up an entire MySQL database into a single file. This approach backs up everything, including the database, table structure, and table data:

mysqldump -u [username] --password=[password] [database-name] > [filename].sql

The command is simple. Here, we define the database username and password using the -u and --password options so we can connect to our database without a credentials prompt. Then we define the name of our database and an output filename.

Backing Up Multiple Databases at Once

If you have multiple databases you'd like to back up into a single file, you can do so by adding the --databases option and a space-delimited list of database names:

mysqldump -u [username] --password=[password] --databases [database-name-1] [database-name-2] > [filename].sql

If you want to back up all of your databases without naming them individually, you can do so with the --all-databases option:

mysqldump -u [username] --password=[password] --all-databases > [filename].sql

Backing Up A Single Table Only

The command for backing up a single table and its data is almost identical to backing up an entire database. The only difference is you need to add the table name after the database name to the command:

mysqldump -u [username] --password=[password] [database-name] [table-name] > [filename].sql

Backing Up the Database Structure Only

If you want to back up your database and table structure only, omitting all table data from the database, this command will do the trick for you when adding the --no-data option:

mysqldump -u [username] --password=[password] --no-data [database-name] > [filename].sql

Date and Time Backups

There may be a scenario where you want to back up your MySQL databases on a schedule instead of doing it manually each time. This can be accomplished by creating scheduled tasks with Crontab in Linux.

If you need to create daily backups and need a file naming structure that differentiates each backup file, you can use this command:

mysqldump -u [username] --password=[password] [database-name] > mydb-$(date +\%Y\-\%m\-\%d).sql

This creates a database backup to a file with the name containing the current date, including year %Y, month %m, and day %d. In this case, the filename would be mydb-2022-01-08.sql.

If you need to create multiple backups at different times of each day, you can also include the current hour, minute, and second in your filename:

mysqldump -u [username] --password=[password] [database-name] > mydb-$(date +\%Y\-\%m\-\%d_\%H-\%M-\%S).sql

Restoring Your MySQL Database

When restoring your MySQL database, all you need to do is open the generated .sql backup file, and copy and paste the contents into your command prompt or MySQL Workbench if you're using that.

Before doing so, make sure you have a MySQL connection open and that you're using the correct database:

use [database-name];

Conclusion

That's all there is to it! These are the most common options I use when backing up databases and they've proven to be helpful time and time again.

If there are any other helpful backup options you know of, let us know in the comments below!

Created: January 08, 2022

Comments

There are no comments yet. Start the conversation!

Leave a Comment

  Wrap code in a <code> and </code> block.