Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Резервное копирование по расписанию  (Прочитано 4818 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн oXiOn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Всем привет! Имеется сервер lamp. Нужно настроить резервное копирование баз данных по такой схеме:

1)производится раз в сутки с заменой предыдущей копии;
2)резервные копии архивируются в папку dropbox.

Подскажите, пожалуйста, как реализовать. Заранее спасибо!

Оффлайн pe4enbk

  • Новичок
  • *
  • Сообщений: 48
    • Просмотр профиля
Re: Резервное копирование по расписанию
« Ответ #1 : 26 Июля 2015, 17:26:34 »
Вот мой скрипт, правда старые копии не удаляются и архивирует на Яндекс, но как отправная точка думаю поможет.
#!/bin/bash
db_user="USER"
db_pass="PASS"
db_name[1]="NAME1"
db_name[2]="NAME2"
patch="/path/to/backups"
date=`date +%F_%H%M`;
wd_login="YANDEX_LOGIN";
wd_pass="YANDEX_PASS";
wd_url="https://webdav.yandex.ru/";
wd_fold="/path/to/folder/in/yandex";
##############
mkdir "$patch""$date";
for DB in "${db_name[@]}"; do
        mysqldump --user=$db_user --host=localhost --password=$db_pass ${DB} > "$patch""$date""/""${DB}"".sql";
done
cd "$patch"
tar -cvzf "$date"".tar.gz" $date
rm -rf $date
curl --user $wd_login:$wd_pass -T "{"$patch""$date"".tar.gz"}" $wd_url;
curl --user $wd_login:$wd_pass --request MOVE -H "Destination: ""$wd_url""$wd_fold""$date"".tar.gz" -XMOVE "$wd_url""$date"".tar.gz"
Можно добавлять любое число баз. Работает по WebDav
У меня по крону в 8 вечера и 8 утра срабатывает.

Оффлайн oXiOn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Резервное копирование по расписанию
« Ответ #2 : 29 Июля 2015, 09:16:52 »
Вот мой скрипт, правда старые копии не удаляются и архивирует на Яндекс, но как отправная точка думаю поможет.
#!/bin/bash
db_user="USER"
db_pass="PASS"
db_name[1]="NAME1"
db_name[2]="NAME2"
patch="/path/to/backups"
date=`date +%F_%H%M`;
wd_login="YANDEX_LOGIN";
wd_pass="YANDEX_PASS";
wd_url="https://webdav.yandex.ru/";
wd_fold="/path/to/folder/in/yandex";
##############
mkdir "$patch""$date";
for DB in "${db_name[@]}"; do
        mysqldump --user=$db_user --host=localhost --password=$db_pass ${DB} > "$patch""$date""/""${DB}"".sql";
done
cd "$patch"
tar -cvzf "$date"".tar.gz" $date
rm -rf $date
curl --user $wd_login:$wd_pass -T "{"$patch""$date"".tar.gz"}" $wd_url;
curl --user $wd_login:$wd_pass --request MOVE -H "Destination: ""$wd_url""$wd_fold""$date"".tar.gz" -XMOVE "$wd_url""$date"".tar.gz"
Можно добавлять любое число баз. Работает по WebDav
У меня по крону в 8 вечера и 8 утра срабатывает.

Интересный скрипт, но для моего сервера функциональность излишняя.

Для себя проблему решил так:


cd /home/server/rspz/Dropbox/BackUP/
rm ./mysql.7z
cd /var/lib/mysql/
7z a -t7z -mx9 /home/server/rspz/Dropbox/BackUP/mysql.7z


Может кому пригодится. В моем случае (Debian) пакет p7zip-full уже был установлен, в случае с Ubuntu, возможно придется установить.

Остается добавить в системный cron от имени root и радоваться жизни :)

P.S.: а скрипт твой сохраню для домашней машины, есть там кое-какие variable файлы =)

Оффлайн Karl500

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2267
    • Просмотр профиля
Re: Резервное копирование по расписанию
« Ответ #3 : 29 Июля 2015, 09:30:15 »
Резервное копирование живой базы простым копированием файлов БД - несколько сомнительное решение. Есть ненулевая вероятность, что в результате получите "битый" резервный файл без возможности восстановления (ну или, как вариант, перед таким копированием нужно останавливать БД).
Гораздо правильнее (как Вам и предлагали) копировать дамп БД.

Оффлайн oXiOn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Резервное копирование по расписанию
« Ответ #4 : 29 Июля 2015, 20:40:31 »
Резервное копирование живой базы простым копированием файлов БД - несколько сомнительное решение. Есть ненулевая вероятность, что в результате получите "битый" резервный файл без возможности восстановления (ну или, как вариант, перед таким копированием нужно останавливать БД).
Гораздо правильнее (как Вам и предлагали) копировать дамп БД.

Коль так, то тогда да, лучше через дамп.

Привожу код ниже, вдруг кому пригодится:


#!/bin/bash
db_user="USER"
db_pass="PASS"
db_name[1]="NAME1"
db_name[2]="NAME2"
patch="/patch/to/backup"
patch2="/patch/to/temp/directory"
for DB in "${db_name[@]}"; do
        mysqldump --user=$db_user --host=localhost --password=$db_pass ${DB} > "$patch2""/""${DB}"".sql";
done
rm $patch/mysql.7z
cd "$patch2"
7z a -mx9 "$patch"mysql.7z
rm $patch2/*


Спасибо всем за помощь! Тему можно закрывать.
« Последнее редактирование: 29 Июля 2015, 20:42:09 от oXiOn »

Оффлайн jura12

  • Старожил
  • *
  • Сообщений: 1472
  • 24.04 lubuntu
    • Просмотр профиля
Re: Резервное копирование по расписанию
« Ответ #5 : 30 Июля 2015, 21:04:13 »
минуточку. есть ньюансы.
  • надо сайт во время копирования переводить в режим обслуживания.
  • надо проверять успешность завершения операции слива дампа и архивирования. в случае неудачи писать в лог или отправлять емейл.
« Последнее редактирование: 30 Июля 2015, 21:05:55 от jura12 »
сопротивление бесполезно

Оффлайн oXiOn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Резервное копирование по расписанию
« Ответ #6 : 31 Июля 2015, 07:48:16 »
минуточку. есть ньюансы.
    минуточку. есть ньюансы.
    • надо сайт во время копирования переводить в режим обслуживания.
    • надо проверять успешность завершения операции слива дампа и архивирования. в случае неудачи писать в лог или отправлять емейл.
    • надо сайт во время копирования переводить в режим обслуживания.
    • надо проверять успешность завершения операции слива дампа и архивирования. в случае неудачи писать в лог или отправлять емейл.

    1)Растолкуйте, если не сложно, зачем?
    2)Логирование нужная штука, но я не знаю, как его реализовать

    Оффлайн jura12

    • Старожил
    • *
    • Сообщений: 1472
    • 24.04 lubuntu
      • Просмотр профиля
    Re: Резервное копирование по расписанию
    « Ответ #7 : 31 Июля 2015, 09:14:55 »
    в mysql транзакции не работают. поэтому можно получить неработающую базу. код возврата проверяется через $? .
    How can I log a message to the systemd journal from the command line?
    « Последнее редактирование: 31 Июля 2015, 09:39:02 от jura12 »
    сопротивление бесполезно

    Оффлайн AnrDaemon

    • Заслуженный пользователь
    • Старожил
    • *
    • Сообщений: 28511
      • Просмотр профиля
    Re: Резервное копирование по расписанию
    « Ответ #8 : 10 Сентября 2015, 23:54:37 »
    в mysql транзакции не работают.


    oXiOn,
    Не надо хранить логин-пароль в скрипте, это вредно для здоровья.
    Тем более логин-пароль рутового пользователя.
    Для бэкапа вполне достаточно враппера
    #!/bin/sh
    /usr/bin/mysqldump --defaults-extra-file=/etc/mysql/debian.cnf "$@"
    Логирование - man logger

    P.S.
    А сайт в обслуживание переводить - чтобы в процессе бэкапа не изменялось состояние копируемого объекта.
    Иначе бэкап получается неполный -> к использованию непригодный.
    Если остановка сайта не вариант, и нет возможности перевести сайт в режим "только для чтения", тогда
    1. СНАЧАЛА делаем копию БД,
    2. ПОТОМ копируем контент.
    Лучше даже разделить контент на программы и пользовательский аплоад.
    Бэкап всё равно МОЖЕТ быть неполным, но он, по крайней мере, будет рабочим, ибо база снимается в одной транзакции.

    И в абсолютно любом случае, совершенно необходимо хранить несколько резервных копий за разные даты.
    Пользователь может удалить файлы, а через два дня прийти к тебе и требовать их восстановить.
    Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

    Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

     

    Страница сгенерирована за 0.018 секунд. Запросов: 22.