Скрипт резервного копирования баз Mysql в локальную папку

Решил полностью отказаться от использования ispmanager, ибо ресурсы занимает, а используется только для одного — резервного копирования данных. Но раз это можно сделать собственноручно, то держать панель на сервере для десяти сайтов вообще нет смысла.

А потому первейшей задачей становится создание резервных копий баз данных mysql. Базы небольшие по размеру, поэтому будет использоваться самый простейший вариант бэкапов — создание архивов и размещение их в определённой папке сервера.

Конечно, куда надёжней было бы отправлять бэкап по sftp куда-нибудь на другой сервер в другом дата-центре (и стране, чего уж там), но поскольку мои сайты меняются пару раз в месяц, то скачивание бэкапов раз в два дня нельзя назвать тяжёлым занятием. :)

Опыта в написании скриптов на Bash у меня не было до этого момента. Но разобраться не составило труда, учитывая многочисленные примеры скриптов резервного копирования mysql на различных сайтах об администрировании серверов.

Сам скрипт mysqlbackup.sh:

#!/bin/bash
#Инициализируем переменные

TMPDIR="sqlfiles"
BACKUPDIR="/storage"
USER="root"
PASS="xxx"
TIMEY=$(date +%Y-%m-%d)

#Проверяем наличие папки для бэкапов

if [ ! -d "$BACKUPDIR" ]; then
  mkdir -m 0700 "$BACKUPDIR"
fi

#Проверяем наличие временного каталога

if [ ! -d "$BACKUPDIR/$TMPDIR" ]; then
  mkdir -m 0700 "$BACKUPDIR/$TMPDIR"
fi

#Сохраняем копии

cd "$BACKUPDIR/$TMPDIR"
for database in `mysql -s -r -e 'SHOW DATABASES' | grep -v Database | grep -v information_schema | grep -v performance_schema | grep -v mysql`;
do mysqldump $database > $database.sql;done

#Создаём архив

cd "$BACKUPDIR"
tar -cjf databases-"$TIMEY".tbz2 "$TMPDIR"
chmod 0600 databases-"$TIMEY".tbz2

#Удаляем временную папку

rm -r $TMPDIR
echo "Базы данных сохранены!"
exit 1

Работа с mysql выполняется непосредственно от пользователя root, так как он имеет доступ сразу ко всем базам данных.

Из бэкапа исключаются базы данных information_schema, mysql, performance_schema. Затем все базы помещаются в bzip2-архив и складируются в определённую папку, откуда их потом можно скачать.

В планировщике Cron прописывается задание на выполнение скрипта раз в сутки, например, в час ночи.

00 01 * * * sh ~/mysqlbackup.sh

Если в настройках крона задан верный email, то на почту придёт отчёт, в котором будут перечислены сохранённые базы данных.

P.S. Также можно создавать резервные копии и несколько раз в день. Для этого нужно в имени архива указывать ещё и время создания, чтобы файл не перезаписывался.

Как вы оцените статью?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (Пока оценок нет)
Загрузка...

4 Комментарии “Скрипт резервного копирования баз Mysql в локальную папку

    1. Верно, упущен момент. Но лишь потому, что у себя использую файл .my.cnf в домашней папке root. Там прописан логин и пароль в таком формате:

      [client]
      user=root
      password=12345qwerty

      Надо было добавить это в пост ранее. :)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *