Автор Гілка: Автоматизація резервного копіювання сайтів  (Прочитано 6282 раз)

Відсутній Sandr

  • Графоман
  • ****
  • дописів: 461
  • Карма: +0/-0
  • Мій вибір — Лінукс!
    • ФОП Осипенко
Підкажіть, як автоматизувати резервне копіювання сайтів: бази даних і файли.

На даний момент бази даних сайтів резервую у файл такою командою:
# mysqldump -u root sitebd > /root/backup/site/data/sitebd-2021.01.01.sql
Файли системи керування контентом архівую наступною командою:
# tar -cvzf /root/backup/site/files/site-2021.01.01.tar.gz /var/www/site.com
Хотілося б написати скрипти для автоматизації виконання цих команд.
« Змінено: 2021-02-16 04:44:16 від Sandr »
openSUSE + KDE

Миха́йло Даниленко

  • Гість
Залежить від того, що вам потрібно. Якщо просто копія деінде — то і так піде. Якщо є додаткові вимоги типу "потрібні щоденні бекапи на протязі останнього місяця", "...а також місячні бекапи на протязі року, і річні бекапи не вилучати", "в бекапи потрібно буде часто залазити" — то є різні варіанти на основі різних механізмів — git, rsync, zfs, тощо.

Миха́йло Даниленко

  • Гість
P.S. Ну і так, основне правило бекапів — бекап що лежить на тій же машині, що і дані — це не бекап.

Відсутній Sandr

  • Графоман
  • ****
  • дописів: 461
  • Карма: +0/-0
  • Мій вибір — Лінукс!
    • ФОП Осипенко
На даний час я придумав таку схему резервування сайтів. Вручну створюю резервні копії баз даних і файлів вище вказаними командами. Після чого отримую файли резервних копій на сервері. Потім за допомогою файлового менеджера копіюю ці файли резервних копій на свій комп'ютер. Далі створюю для кожного клієнта акаунт на Гуглі і через браузер записую ці файли резервних копій на відповідний обліковий запис Гугл Диска. Це такий алгоритм дій, які я виконую зараз вручну.

Як бачите, роботи тут досить багато. А оскільки сайтів більшає на сервері, то роботи стає ще більше. Відповідно й виникає потреба якось автоматизувати цей процес за допомогою скриптів. Тому й питаю поради, хто як цю задачу вже вирішував? Може будуть ще якісь ідеї по алгоритму чи по створенню самих скриптів. Раніше я не використовував скрипти для автоматизації роботи сервера, тому в цьому є ще початківцем. Навіть не знаю, з чого почати і як все оформити.

В ідеалі було б непогано, якби Гугл Диск можна було змонтувати на сервер і відразу на нього записувати скриптом резервні копії баз даних і файлів сайтів. Але такого я теж ще не робив.
openSUSE + KDE

Відсутній Sandr

  • Графоман
  • ****
  • дописів: 461
  • Карма: +0/-0
  • Мій вибір — Лінукс!
    • ФОП Осипенко
Якщо зібрати команди резервного копіювання в скрипт, то вийде ось таке:
#!/bin/bash
# Скрипт резервного копіювання сайту: site.com
mysqldump -u root sitebd > /root/backup/site/data/sitebd-2021.01.01.sql
tar -cvzf /root/backup/site/files/site-2021.02.16.tar.gz /var/www/site.com

Але виникає питання, як автоматизувати внесення дати в цей скрипт?
openSUSE + KDE

Миха́йло Даниленко

  • Гість
Генерація дати всередині аргумента:
Код: Bash
  1. echo "foobar-$( date +%Y.%m.%d ).tar.bz2"
  2.  

В залежності від того, наскільки систематично організовані дані клієнтів — всі бекапи можна зробити одним скриптом. Наприклад, якщо всі сайти на одній cms, і база вказується в одному й тому ж файлі, назву бази можна буде витягнути з цього файлу, і вийде щось типу
Код: Bash
  1. date="$( date +%Y.%m.%d )"
  2. for docroot in /var/www/*; do
  3.     sitename="${docroot##*/}"
  4.     dbname="$( sed -n -e 's/^.*DB_NAME.*\(['\''"]\)\(.\+\)\1.*/\2/p' "$docroot/wp-config.php" )"
  5.     mysqldump --skip-lock-tables --add-drop-table --skip-dump-date "$dbname" | bzip2 > /root/backup/${sitename}-${date}.sql.bz2
  6.     tar -cjvf "/root/backup/site/files/${sitename}-${date}.tar.bz2" "$docroot"
  7. done
  8.  

Миха́йло Даниленко

  • Гість
В ідеалі було б непогано, якби Гугл Диск можна було змонтувати на сервер і відразу на нього записувати скриптом резервні копії баз даних і файлів сайтів. Але такого я теж ще не робив.
Я з ним не працював, але rclone схожий на те що вам треба.

Відсутній cadca

  • Письменник
  • *****
  • дописів: 955
  • Карма: +0/-0
  • free like beer
Цитата
В ідеалі було б непогано, якби Гугл Диск можна було змонтувати на сервер і відразу на нього записувати скриптом резервні копії баз даних і файлів сайтів.
google-drive-ocamlfuse в поміч (я колись робив по інструкції)
але слід пам'ятати про такі речі:
1) періодично очищувати локальний кеш після копіювання, наприклад
google-drive-ocamlfuse -label me -cc2) якщо будете ротейтити/видаляти старі бекапи, то слід пам'ятати, що Гугл-диск не видаляє файли напряму і треба чистити "смітничок" або самому, або самописним скриптом [з script.google.com] на кшталт
function createTimeDrivenTriggers() {
  ScriptApp.newTrigger('emptyThrash')
      .timeBased()
      .everyHours(24)
      .create();
}

function emptyThrash()
{
  Drive.Files.emptyTrash();
}
Ubuntu 20.04/18.04; CentOS 7.x

Відсутній Sandr

  • Графоман
  • ****
  • дописів: 461
  • Карма: +0/-0
  • Мій вибір — Лінукс!
    • ФОП Осипенко
Додав у скрипт автоматичну вставку поточної дати. Вийшло тепер ось таке:
#!/bin/bash
# Скрипт резервного копіювання сайту: site.com
today=$(date +%Y.%m.%d)
mysqldump -u root sitebd > /root/backup/site/data/sitebd-$today.sql
tar -cvzf /root/backup/site/files/site-$today.tar.gz /var/www/site.com

Цей скрипт можна також запускати з локального комп'ютера командою:
# ssh root@site.com /root/scripts/backup-site.sh
« Змінено: 2021-02-16 20:37:11 від Олександр Осипенко »
openSUSE + KDE