База данных естественно рекомендует создания резервных копий. Мотивация проста – любой программный или аппаратный сбой может повредить БД.

Для однократного резервирования нам потребуется только mysql, для регулярного – любой планировщик (лучше всего – cron)

Для создания резервных копий служит утилита mysqldump (входит в состав mysql)

Синтаксис для создания копии всех баз данных:
Код

mysqldump -uпользователь -pпароль –all-databases > /путь/mysql_all.sql

где указываются параметры пользователя с правами на чтение всех баз данных и путь куда вы хотите ее сохранить.

Для резервного копирования по расписанию я рекомендую следующий код:
Код

mysqldump -uпользователь -pпароль –all-databases > /путь/mysql_all.sql

Код

tar czf /путь/mysqldump-`date +%d.%m.%y`.tgz /путь/mysql_all.sql

вторая строчка отвечает за создание архива, с именем mysql-текущая_дата.tgz
таким образом вы получаете ежедневную копию mysql и можете откатится на любой день.

Этот код можно добавить в cron двумя путями:
1)
создать текстовый файл в директории /etc/cron.daily/ , скопировать туда код и сделать его исполняемым (chmod +x имя_файла)

2) использовать crontab -e для редактирования расписания cron.
туда нужно ввести:
Код

0 0 * * * mysqldump -uпользователь -pпароль –all-databases > /путь/mysql_all.sql;tar czf /путь/mysqldump-`date +%d.%m.%y`.tgz /путь/mysql_all.sql

и сохранить файл :)

результат обоих методов одинаков

Единственное неудобство – все базы данных сохраняются в одном файле. Избежать этого можно используя создав следующий скрипт:
Код

databases=(`echo ’show databases;’ | mysql -uпользователь -pпароль | grep -v ^Database$`)
for d in “${databases[@]}”; do
if [[ $d != 'tmp' && $d != 'test' ]]
then
echo ${d}
mysqldump -uимя_пользователя -pпароль ${d} > /backup/mysql/mysql_day/${d}.sql
fi
done
tar czf /backup/mysql/mysqldump-`date +%d.%m.%y`.tgz /backup/mysql/mysql_day/

предполагается, что вы храните резервные копии в /backup/mysql и существует каталог /backup/mysq/mysql_day