Using mysqldump to create a copy of the database enables you to capture all of the data in the database in a format that allows the information to be imported into another instance of MySQL (see Section 4.5.4, “mysqldump — A Database Backup Program”). Because the format of the information is SQL statements, the file can easily be distributed and applied to running servers in the event that you need access to the data in an emergency. However, if the size of your data set is very large, mysqldump may be impractical.
When using mysqldump, you should stop replication on the slave before starting the dump process to ensure that the dump contains a consistent set of data:
Stop the slave from processing requests. You can stop replication completely on the slave using mysqladmin:
shell> mysqladmin stop-slave
Alternatively, you can stop processing the relay log files by stopping only the slave SQL thread:
shell> mysql -e 'STOP SLAVE SQL_THREAD;'
This allows the slave to continue to receive data change events from the master's binary log and store them in the relay logs via the I/O thread, but prevents the slave from executing these events and changing its data. Within busy replication environments, allowing the I/O thread to run during backup may speed up the catch-up process when you start the slave processing again.
Run mysqldump to dump your databases. You may either select databases to be dumped, or dump all databases. For example, to dump all databases:
shell> mysqldump --all-databases > fulldb.dump
Once the dump has completed, start slave operations again:
shell> mysqladmin start-slave
In the preceding example, you may want to add login credentials (user name, password) to the commands, and bundle the process up into a script that you can run automatically each day.
If you use this approach, make sure you monitor the slave replication process to ensure that the time taken to run the backup does not affect the slave's ability to keep up with events from the master. See Section 16.1.3.1, “Checking Replication Status”. If the slave is unable to keep up, you may want to add another slave and distribute the backup process. For an example of how to configure this scenario, see Section 16.2.4, “Replicating Different Databases to Different Slaves”.


User Comments
This is a half-question/half-tip (I welcome being corrected on this).
Wouldn't adding the --lock-all-tables command obviate the need for stop slave/start slave?
Add your own comment.