7ми дневный бэкап БД как организовать?

Главные вкладки

Лучший ответ

Комментарии

Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 17 мая в 20:30

я знаю этот модуль но он мне не поможет ввиду огромного размера сайта.
для себя я поставил задачу 7 дней бэкап БД и инкрементальный бэкап файлов.

Аватар пользователя Sinn Sinn 22 мая в 16:47

Делаем скрипт, который запускаем по крону:

#!/bin/bash

suffix=$(date +%w%a)

rm /var/www/backup/$suffix.sql.gz
mysqldump -uuser -ppass db | gzip > /var/www/backup/$suffix.sql.gz

mysqldump можно заменить на drush sql-dump --result-file=... если угодно. Дампы создаются каждый день и старые удаляются

Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 22 мая в 18:22

не совсем понятно. скрипт выдает имя которое удаляется и потом генерируется снова.
по 7ми дневным бэкапом я имею ввиду что есть файлы 1 2 3 4 5 6 7 а после герерации 8го удаляется 1й.

Аватар пользователя Sinn Sinn 22 мая в 19:41

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

Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 22 мая в 21:19

а теперь правильный ответ для 5 файлов:
ls -tp | grep -v '/$' | tail -n +6 | xargs -d '\n' -r rm --
или
rm `ls -t | awk 'NR>5'`
или
(ls -t|head -n 5;ls)|sort|uniq -u|sed -e 's,.*,"&",g'|xargs rm
там есть и другие варианты. мне нравится более короткий.
источник ответа https://stackoverflow.com/questions/25785/delete-all-but-the-most-recent...

Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 23 мая в 7:23

а само копирование файлов на другой сервер выглядит так:

#!/bin/bash
#to get and send db

filename=$( date +%H.%M_%d.%m.%Y ).sql
tmpfolder="tmp"
tmppath="/var/www/mysite.com"

cd  /var/www/mysite.com
vendor/bin/drush state:set system.maintenance_mode 1 --input-format=integer
vendor/bin/drush sql:dump --result-file=../$tmpfolder/$filename

scp $tmppath/$tmpfolder/$filename username@1.1.1.1:/var/mybackup/db
if [ $? -ne 0 ]
then
  echo "Error while transfer db."
  echo "Error while transfer db. getandsenddb.sh" | mail -s "Error while transfer db" user@yandex.ru
fi
rm $tmppath/$tmpfolder/$filename

vendor/bin/drush state:set system.maintenance_mode 0 --input-format=integer