When started with the --log-update=file_name option, mysqld
writes a log file containing all SQL commands that update data. The file is
written in the data directory and has a name of file_name.#, where
# is a number that is incremented each time you execute
mysqladmin refresh or mysqladmin flush-logs, the FLUSH
LOGS statement, or restart the
server.
If you use the --log or -l options, mysqld writes a
general log with a filename of `hostname.log', and restarts and
refreshes do not cause a new log file to be generated (although it is closed
and reopened). By default, the mysql.server script starts the
MySQL server with the -l option. If you need better
performance when you start using MySQL in a production environment,
you can remove the -l option from mysql.server.
Update logging is smart since it logs only statements that really update
data. So an UPDATE or a DELETE with a WHERE that finds no
rows is not written to the log. It even skips UPDATE statements that
set a column to the value it already has.
If you want to update a database from update log files, you could do the
following (assuming your update logs have names of the form
`file_name.#'):
shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
ls is used to get all the log files in the right order.
This can be useful if you have to revert to backup files after a crash
and you want to redo the updates that occurred between the time of the backup
and the crash.
You can also use the update logs when you have a mirrored database on
another host and you want to replicate the changes that have been made
to the master database.