If you are running MySQL on Linux and need to back up your databases, you can use Bash commands from the terminal to accomplish the task. A simple script could even make daily backups. In this guide, we’ll show you how to backup your MySQL databases and restore data from those backups.
Make a Backup With mysqldump Command
mysqldump command will export your databases to a
.sql file that can be easily imported back into MySQL later if you need to restore a backup.
You can back up a single database, multiple databases, or every database inside MySQL. No matter what you choose, you only need to execute a single command.
Back Up a Single Database
To back up a particular database inside MySQL, you can specify its name in your
$ mysqldump -u root -p my_database > my_database_backup.sql
In the example above, the
-u option allows us to specify a MySQL username (root) in our command.
-p tells MySQL to prompt us for a password. The name of our database is
my_database and we are exporting it into a file named
mysqldump command doesn’t give us any exciting output. If your terminal remains empty, that means it didn’t encounter any errors and you should end up with the
.sql backup file.
If your MySQL user is the same as your Linux username, you won’t need to specify the
$ mysqldump my_database > my_database_backup.sql
You can also avoid the password prompt by specifying the password with the
--password parameter within the
mysqldump command. This is inherently less secure for obvious reasons, but it could be fine for certain situations:
$ mysqldump -u root --password="pass" my_database > my_database_backup.sql
Back Up to a Specific Location
.sql file can be saved wherever you’d like; just specify the full path in your
$ mysqldump -u root -p my_database > /home/user/backups/my_database_backup.sql
Create a Timestamped Backup
Timestamp your MySQL backups by utilizing the
date command within your
$ mysqldump -u root -p my_database > backup_$(date +"%Y_%m_%d").sql
Automatically Compress Backups
Text is easily compressed, so piping the
mysqldump command to a compression utility could allow you to store your MySQL backup at a fraction of its usual size.
On Linux, gzip is probably the most popular option for data compression, so let’s pipe our command to gzip.
$ mysqldump -u root -p my_database | gzip > my_database_backup.sql.gz
Back Up Multiple Databases
To back up more than one MySQL database, use the
--database option and specify each of the databases you’d like to back up. This will still back up the databases into a single file.
$ mysqldump -u root -p --databases first_db second_db > db_backup.sql
Back Up All Databases
If you want to do a complete backup of MySQL by exporting every database, use the
--all-databases option. This will still only generate a single
$ mysqldump -u root -p --all-databases > my_databases.sql
How to Restore a MySQL Backup
If you need to restore one of your MySQL backups, you can do so with a single
mysql command and the MySQL dump file you created earlier. The only prerequisite is that the database needs to already exist.
In this example, we will restore the
1. First, create the database if it doesn’t already exist.
$ mysql -u root -p -e "create database my_database";
2. After the database is created, import your backup with this command:
$ mysql -u root -p my_database < my_database_backup.sql
Restore a Single Database
.sql file contains multiple databases and you only need to restore a particular database, you can use the
--one-database option and specify the name of the database that needs restored.
$ mysql --one-database my_database < multiple_databases.sql
Automate MySQL Backups With Cron
What you really want to do to keep your MySQL data safe is have automatic backups. These can be configured directly through cron, Linux’s built-in job scheduler.
1. Open up cron for editing with the following command. You’ll want to use your root user so you can avoid being prompted for a password when cron runs
sudo crontab -e
2. Pasting the following line into cron will create daily backups at midnight and put a timestamp in the file name.
0 0 * * * mysqldump my_database > /home/user/backup_$(date +"%Y_%m_%d").sql
3. If you’d prefer to compress your daily backups, pipe the command to
$ 0 0 * * * mysqldump my_database | gzip > /home/user/backup_$(date +"%Y_%m_%d").sql.gz