Here is a small, but quite useful shell script which creates a backup of all databases in a MySQL Server.
If there is no change to the content of a particular MySQL database, the original backup file is not modified either and it keeps its timestamp. Thus, it will not be unnecessarily copied if you make a backup of the file system.
And here is how it works:
#!/bin/bash PW= MYSQLDBDIR=/var/lib/mysql BACKUPDIR=/home/backups/mysql mkdir -p ${BACKUPDIR} cd ${MYSQLDBDIR} for db in `find * -type d -exec basename {} \;`; do echo mysqldump ${db} mysqldump --all --complete-insert --extended-insert=FALSE --add-drop-table --databases --flush-logs --lock-tables --quick --comments=0 \ --user=root --password=${PW} --host=localhost ${db} > ${BACKUPDIR}/${db}.new.sql if [ -f ${BACKUPDIR}/${db}.sql ]; then # echo diff -q ${BACKUPDIR}/${db}.sql ${BACKUPDIR}/${db}.new.sql diff -q ${BACKUPDIR}/${db}.sql ${BACKUPDIR}/${db}.new.sql > /dev/null 2>&1 result=$? if [ $result -eq 0 ]; then # echo rm ${BACKUPDIR}/${db}.new.sql rm ${BACKUPDIR}/${db}.new.sql elif [ $result -eq 1 ]; then echo mv ${BACKUPDIR}/${db}.new.sql ${BACKUPDIR}/${db}.sql mv ${BACKUPDIR}/${db}.new.sql ${BACKUPDIR}/${db}.sql fi else echo mv ${BACKUPDIR}/${db}.new.sql ${BACKUPDIR}/${db}.sql mv ${BACKUPDIR}/${db}.new.sql ${BACKUPDIR}/${db}.sql fi done |