Для того, чтобы ежедневно (на ваше усмотрение) создавать резервные копии баз MySQL в отдельные файлы мы должны создать на сервере простенький скрипт, например, в корне раздела:

sudo nano /backup_mysql.sh 

После чего нам нужно вставить в него следующее содержимое:

### SETUP MYSQL LOGIN ###
MUSER='root'
MPASS='*******'
MHOST="127.0.0.1"

### Set to 1 if you need to see progress while dumping dbs ###
VERBOSE=0

### Set bins path ###
GZIP=/bin/gzip
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
RM=/bin/rm
MKDIR=/bin/mkdir
MYSQLADMIN=/usr/bin/mysqladmin
GREP=/bin/grep

### Setup dump directory ###
BAKRSNROOT=/backup_mysql

#####################################
### ----[ No Editing below ]------###
#####################################
### Default time format ###
TIME_FORMAT='%Y.%m.%d_%H:%M:%S%P'

### Make a backup ###
backup_mysql_rsnapshot(){
local DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
local db="";
[ ! -d $BAKRSNROOT ] && ${MKDIR} -p $BAKRSNROOT
${RM} -f $BAKRSNROOT/* >/dev/null 2>&1
[ $VERBOSE -eq 1 ] && echo "*** Dumping MySQL Database ***"
[ $VERBOSE -eq 1 ] && echo -n "Database> "
for db in $DBS
do
if [ $db = "information_schema" ]
then :
elif [ $db != "performance_schema" ]
then


local tTime=$(date +"${TIME_FORMAT}")
local FILE="${BAKRSNROOT}/${db}-${tTime}.sql.gz"
[ $VERBOSE -eq 1 ] && echo -n "$db.."
${MYSQLDUMP} -u ${MUSER} -h ${MHOST} -p${MPASS} $db | ${GZIP} -9 > $FILE

fi
done

[ $VERBOSE -eq 1 ] && echo ""
[ $VERBOSE -eq 1 ] && echo "*** Backup done [ files wrote to $BAKRSNROOT] ***"
}

### Die on demand with message ###
die(){
echo "$@"
exit 999
}

### Make sure bins exists.. else die
verify_bins(){
[ ! -x $GZIP ] && die "File $GZIP does not exists. Make sure correct path is set in $0."
[ ! -x $MYSQL ] && die "File $MYSQL does not exists. Make sure correct path is set in $0."
[ ! -x $MYSQLDUMP ] && die "File $MYSQLDUMP does not exists. Make sure correct path is set in $0."
[ ! -x $RM ] && die "File $RM does not exists. Make sure correct path is set in $0."
[ ! -x $MKDIR ] && die "File $MKDIR does not exists. Make sure correct path is set in $0."
[ ! -x $MYSQLADMIN ] && die "File $MYSQLADMIN does not exists. Make sure correct path is set in $0."
[ ! -x $GREP ] && die "File $GREP does not exists. Make sure correct path is set in $0."
}

### Make sure we can connect to server ... else die
verify_mysql_connection(){
$MYSQLADMIN  -u $MUSER -h $MHOST -p$MPASS ping | $GREP 'alive'>/dev/null
[ $? -eq 0 ] || die "Error: Cannot connect to MySQL Server. Make sure username and password are set correctly in $0"
}

### main ####
verify_bins
verify_mysql_connection
backup_mysql_rsnapshot

В этом содержимом нужно обязательно заменить два параметра:

MPASS='*****' - заменяем звездочки на ваш пароль root пользователя mysql
BAKRSNROOT=/backup_mysql - заменяем /backup_sql на вашу директорию для архивов mysql

Создаем указанную выше директорию для бекапов mysql:

sudo mkdir /backup_mysql

После чего можно для теста запустить скрипт из консоли:


sudo sh /backup_mysql.sh

После чего можно проверить, создались ли резервные копии:

sudo ls -l /backup_mysql 

В ответ на эту команду в консоли вы должны увидеть список созданных архивов бд вида:

DB_NAME-YYYY.MM.DD_HH_MM_SSpm.sql.gz
....
DB_NAME2-YYYY.MM.DD_HH_MM_SSpm.sql.gz 

где DB_NAME - имя базы данных

а YYYY.MM.DD_HH_MM_SSpm - время создания резервной копии

Автоматизируем создание бекапов созданием задания в кроне:


sudo crontab -e

Вставляем соответствующее задание, например:

0 3 * * *       sh      /backup_mysql.sh

В итоге мы получим ежедневное создание бекапов mysql в три часа ночи в папку /backup_mysql.

Правильным будет сделать ещё перенос файлов на внешние сервера и удаление слишком старых копий, но этот моменты мы разберем когда-нибудь потом =)