A MySQL dump is a file that contains SQL commands, which, when executed, would lead to the recreation of the MySQL database at the moment of the dump’s export. Essentially, a MySQL dump database is a logical MySQL backup database.
mysqldump
is a utility that creates a MySQL dump. It is part of MySQL and MariaDB and gets installed alongside the MySQL client.
Basic mysqldump Command
To simply create a database dump, you can use the following command:
mysqldump db_name
Executing this command will output an SQL script to the console. However, this is not usually very useful. What you would probably need to do is to dump the MySQL database to a file. Therefore, we redirect the command’s output (stdout) to a file:
mysqldump db_name > db_name.sql
Without parameters, the mysqldump
utility creates a logical backup of the entire database. This backup will include the database creation command, table creation commands, and commands to populate these tables.
mysqldump Authentication
To connect to the DB, you need to specify the connection data. By default, you need to specify the login and password for connection in the parameters.
mysqldump -u user -ppassword db_name > db_name.sql
The -p
parameter is used to specify the password for the user passed with -u
. If nothing is specified after -p
, the mysqldump
utility will request the password during execution. If you want to specify the password directly in the command, you need to append it directly to the -p
flag without any space, as shown above. However, for security reasons, specifying the password in this manner can be unsafe as it shows up in the process list. The password can be passed via an MYSQL_PWD and a special file to maintain security.
On Linux
For Linux, you can interact with the DB as a superuser.
sudo mysqldump db_name > db_name.sql
In the examples below, user parameters will be omitted.
Useful mysqldump parameters
The mysqldump
utility has about 125 parameters, most of them are specialized and almost never used.
However, there is a whole set of notable parameters, the use of which can be useful in most cases, and yet they are not enabled by default.
–single-transaction vs –lock-tables
The --lock-tables
option is enabled by default. This parameter locks the database to prevent modifications during the dump process. Such locking assists in creating a transactionally consistent backup but at the cost of database downtime.
The --single-transaction
option allows for a hot backup of MySQL, meaning there’s no need to lock database queries during the dump process. This parameter only works for tables on the InnoDB engine. However, since InnoDB is the default engine, it’s likely you can use it.
Therefore, if you did not specify a table engine when creating your tables, you should definitely use --single-transaction
.
If you have engines other than InnoDB (for example, MyISAM or MEMORY), you can use the --skip-lock-tables
parameter, but in this case, there’s a risk of getting an inconsistent dump, which may lead to foreign key errors during the dump restore.
You can find out which engines your tables are using with the following query:
SELECT TABLE_NAME, ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_database_name';
–routines and –events
By default, routines and events are not included in the dump. If you have any in your database, they will be lost during the restore, and you will likely not notice this immediately. To prevent their loss, it is advisable to always use these parameters, which are not enabled by default for some reason.
–default-character-set=utf8mb4
The utf8mb4 character set ensures maximum compatibility with all possible symbols in your database. If this character set is not specified, any Unicode symbols can trigger errors like:
ERROR 1366 (HY000) at line XXX: Incorrect string value: '\xF0\x9F\x98\x80' for column 'column_name' at row 1
–hex-blob
This option encodes all BLOB fields into their hexadecimal representation. This helps avoid any issues that might arise due to encoding or special characters in binary data.
mysqldump backup Example
dump full database
To create a dump of an entire database, use the following command structure:
mysqldump --single-transaction --routines --triggers --events --hex-blob --default-character-set=utf8mb4 database_name > database_name.sql
mysqldump large database
When dealing with a large database, you might want to use the --quick
and --compress
options to speed up the process and reduce the size of the output file:
mysqldump --single-transaction --quick --compress --routines --triggers --events --hex-blob --default-character-set=utf8mb4 [database_name] > [output_file].sql
- The
--quick
option forces themysqldump
to retrieve rows for a table from the server a row at a time rather than retrieving the entire row set and buffering it in memory before writing it out. This can help deal with the memory limitations that might be encountered when dealing with large databases. - The
--compress
option compresses all information sent between the client and the server, reducing the amount of data sent over the network, which can be highly beneficial for large databases. However, keep in mind that this might increase the CPU usage due to the need to perform compression/decompression operations.
mysqldump Backup Data Only
To generate a backup that solely contains data (only INSERT
statements) without any additional information such as table structure, routines, triggers, or events, you can use the --no-create-info
, --skip-triggers
, --skip-routines
, and --skip-events
, --skip-comments
options. Here’s the revised command:
mysqldump --single-transaction --no-create-info --skip-triggers --skip-routines --skip-events --hex-blob --skip-comments --default-character-set=utf8mb4 database_name > output_file.sql
Export Specific MySQL Tables with mysqldump
To dump a specific MySQL table, use this command:
mysqldump database_name table_name > table_name.sql
To dump multiple tables, extend the command as follows:
mysqldump database_name table_name1 table_name2 table_name3 > backup.sql
This command exports table_name1, table_name2, and table_name3, storing the data in a single backup.sql file. For data transfer, mysqldump provides valuable options like --where
and --insert-ignore
:
-
--where
filters records that are included in the dump -
--insert-ignore
replaces ‘INSERT INTO’ with ‘INSERT IGNORE’, preventing errors from duplicate entries by ignoring them. Here’s an example of using these options:
mysqldump database_name table_name --where="date > '2023-01-01'" --insert-ignore > table_name.sql
This command exports data from table_name where the date is later than January 1, 2023, and ignores duplicate entries.
Other Useful Uses of mysqldump
mysqldump All Databases
Typically, you need to backup not just one DB, but all DBs in the DBMS at once. To do this, use the following command:
mysqldump --all-databases > all_databases.sql
mysqldump gzip
Since mysqldump
outputs the dump to stdout, it can be intercepted and immediately archived using gzip:
mysqldump -u username -p database_name | gzip > backup.sql.gz
On Windows, this process is a bit more complex, but it can still be accomplished using third-party utilities such as 7-Zip.
mysql restore dump
The easiest way to restore a dump is with the mysql utility, by simply redirecting the file directly to the utility, like so:
mysql -u user -p < all-database.sql
Depending on how the dump was created, you may need to specify the name of the DB into which the data is being loaded:
mysql -u user -p database_name < database_name.sql
MySQL Automatic Backup
Linux
Use crontab -e
and add the following line for the backup to run daily at 1 AM:
0 1 * * * mysqldump -u username -p password --all-databases > /path/to/backup/all_databases.sql
Windows
Use Windows Task Scheduler to schedule the execution of mysqldump at a specific time. For this, create a batch file with the mysqldump command and set up Task Scheduler to run it according to schedule.
Here’s a simple example of what the batch file could look like:
@echo off set MYSQL_DIR=C:\Program Files\MySQL\MySQL Server 5.7\bin set BACKUP_DIR=D:\backups set DB_NAME=database_name set DB_USER=username set DB_PASSWORD=password "%MYSQL_DIR%\mysqldump.exe" -u %DB_USER% -p%DB_PASSWORD% %DB_NAME% > "%BACKUP_DIR%\%DB_NAME%_backup.sql"
Automating MySQL Backups with Timestamps
Linux
To generate a backup file with a timestamp in its name in Linux, you can use the date
command within the mysqldump
command like so:
mysqldump -u username -p password --all-databases > /path/to/backup/all_databases_$(date +%Y%m%d_%H%M%S).sql
This command will create a backup with a name like all_databases_20230601_010000.sql
, where the timestamp is in the format YYYYMMDD_HHMMSS.
Now, add this command to your crontab:
0 1 * * * mysqldump -u username -p password --all-databases > /path/to/backup/all_databases_$(date +\%Y\%m\%d_\%H\%M\%S).sql
Windows
In Windows, you can use the %date%
and %time%
environment variables to add a timestamp to your backup file. Here’s how you could modify the batch script:
@echo off set MYSQL_DIR=C:\Program Files\MySQL\MySQL Server 5.7\bin set BACKUP_DIR=D:\backups set DB_NAME=database_name set DB_USER=username set DB_PASSWORD=password for /f "tokens=1-4 delims=/-. " %%i in ('date /t') do ( set DATE=%%k%%j%%i ) for /f "tokens=1-4 delims=/:." %%i in ('time /t') do ( set TIME=%%i%%j ) "%MYSQL_DIR%\mysqldump.exe" -u %DB_USER% -p%DB_PASSWORD% %DB_NAME% > "%BACKUP_DIR%\%DB_NAME%_backup_%DATE%_%TIME%.sql"
The modified script now creates a backup file with a name like database_name_backup_20230601_0100.sql
, where the timestamp is in the format YYYYMMDD_HHMM.
Graphic utilities based on mysqldump
MySQL Workbench
MySQL Workbench provides an intuitive interface for working with MySQL, including the ability to use mysqldump
to create backups. Here are the basic steps to create a backup using MySQL Workbench:
- Launch MySQL Workbench and connect to your database server.
- Under the Management section, select Data Export.
- Select the database or tables that you wish to backup.
- Specify your export options, including file format and location for the save.
- Click on Start Export to create your backup.
phpMyAdmin
phpMyAdmin is a web interface for managing MySQL databases, which also allows you to create backups using mysqldump. Here’s how to do it:
- Login to phpMyAdmin and select the database you wish to backup.
- Go to the Export tab.
- In the Export method section, select Custom to be able to customize export parameters.
- Select the tables for export and other options as needed.
- Click on Go to create your backup.
SqlBak
SqlBak is a service that allows you to backup and restore MySQL Server databases, as well as other DBMS, according to a predefined schedule. It utilizes the mysqldump tool to create backups specifically for MySQL databases and can be used on both Windows and Linux operating systems. Below is a concise tutorial on how to install the SqlBak App and configure a backup job.
- After creating an SqlBak account, please proceed to the Download page. Select the operating system (OS) that you are using, and then follow the provided instructions to install the SqlBak App.
- The next step is to establish a connection to your MySQL Server.
-
If you are running SqlBak on Linux, you can establish the connection by using the following command:
sudo sqlbak --add-connection --db-type=mysql --user=root
- If you are using the Windows version, click on the “+ Add” button and select “MySQL Server (TCP/IP)” as the DBMS type from the drop-down list. Then, provide the necessary credentials to establish a connection with your MySQL Server.
-
- Once you have successfully established the connection, navigate to the “Dashboard” page. To create a backup job, click on the “Add new job” button located in the upper right corner of the screen.
- In the settings window that appears, follow the step-by-step configuration process, which is designed to be intuitive and easy to understand. Once you have completed the configuration, click on the “Save” button located in the upper right corner of the window.
Conclusion
In conclusion, mysqldump
is a valuable tool for backing up MySQL databases, yet it requires deep expertise and constant monitoring. For a more convenient and automated backup management, consider using SqlBak. This service provides automation, monitoring and convenience, allowing you to focus on the core aspects of your business. Regular and reliable data backup is the key to successful and secure business operation.