подготовка регулярных бэкапов форума

phpBB но не только...

Модераторы: Olej, adminn

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: подготовка регулярных бэкапов форума

Непрочитанное сообщение Olej » 30 дек 2019, 17:11

Olej писал(а):
30 дек 2019, 16:37
Olej писал(а):
29 дек 2019, 16:23
Нужно себе ответить на вопросы:
1. какие объекты бэкапить для 100% успешного восстановления?
2. как именовать бэкапы для их лёгкой идентификации?
3. каким архиватором пользоваться для сжатия?
Всё предыдущее собираю, для локального экземпляра форума, в единый скрипт:
Точно то же самое, но естественно с учётом специфики-отличий (здесь содержимое не буду приводить - не нужны всем серверные пароли :lol: ) подготовил и проделываю на боевом сервере, для вот этого форума:

Код: Выделить всё

root@277938:~# time ./backup

real	4m24,603s
user	2m59,132s
sys	2m13,893s

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/rus.linux.net.admin/local$ ls -l /var/www/backup*
-rw-r--r-- 1 root root   48330690 дек 30 10:09 /var/www/backup-30.12.2019_10-09.sql
-rw-r--r-- 1 root root 1076992942 дек 30 10:10 /var/www/backup-30.12.2019_10-09.tgz

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: подготовка регулярных бэкапов форума

Непрочитанное сообщение Olej » 02 янв 2020, 15:47

Olej писал(а):
30 дек 2019, 17:11
Точно то же самое, но естественно с учётом специфики-отличий (здесь содержимое не буду приводить - не нужны всем серверные пароли :lol: ) подготовил и проделываю на боевом сервере, для вот этого форума:
Проблема с такими бэкапами состоит в том, что:
1. мы сначала создаём бэкапы на арендуемом VDS сервере...
2. потом их планируем перегрузить в облако ... или на свой рабочий компьютер стационарный
3. после чего бэкапы на VDS удаляются.
Но в таком способе присутствует очень серьёзный недостаток: на то время, пока файлы-бэкапы создаются не сервере VDS, для них там нужно иметь свободное место, и этого свободного места нужно иметь достаточно много, как минимум порядка 35% от общего размера HDD VDS.
Вот такой суммарный размер:

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/rus.linux.net.admin/timeweb$ ls -l backup-*
-rw-r--r-- 1 olej olej   45841690 янв  2 01:50 backup-02.01.2020_01-50.sql
-rw-r--r-- 1 olej olej 1083868714 янв  2 01:55 backup-02.01.2020_01-50.tgz
При вот таких вот раскладах свободного места на диске сервера:

Код: Выделить всё

root@277938:~# df | grep ^'/dev/'
/dev/vda1          5092992      3616284  1198284           76% /

При этом файлы бэкапов, даже при очень кратковременном размещении, занимают практически всё свободное место на 100%.
Размер самого WEB-сайта, его файлов:

Код: Выделить всё

root@277938:~# du -hs /var/www/linux-ru.ru/
1,2G	/var/www/linux-ru.ru/
Т.е. нам нужен практически 2-кратный запас места на диске для размещения там же ещё и бэкап файлов!

А переход на следующий больший тариф хостинга от провайдера стоит бОльших денег.
VPS / VDS хостинг
CPU 2 x 2.4 ГГц
RAM 0.5 ГБ
SSD 5 ГБ
171 руб. в мес.
CPU 1 x 2.4 ГГц
RAM 0.5 ГБ
SSD 15 ГБ
189 руб. в мес.
CPU 2 x 2.4 ГГц
RAM 1 ГБ
SSD 30 ГБ
351 руб. в мес.
и т.д.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: подготовка регулярных бэкапов форума

Непрочитанное сообщение Olej » 02 янв 2020, 16:07

Olej писал(а):
02 янв 2020, 15:47
Т.е. нам нужен практически 2-кратный запас места на диске для размещения там же ещё и бэкап файлов!
Такого легко избежать, если поток данных создаваемых бэкапов сразу направлять в открытый сокет, нацеленный на сетевое место конечного сохранения файлов бэкапов. Один из способов это сделать - использовать Netcat.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: подготовка регулярных бэкапов форума

Непрочитанное сообщение Olej » 02 янв 2020, 16:14

Olej писал(а):
02 янв 2020, 16:07
Такого легко избежать, если поток данных создаваемых бэкапов сразу направлять в открытый сокет, нацеленный на сетевое место конечного сохранения файлов бэкапов. Один из способов это сделать - использовать Netcat.
Забегая вперёд, сразу скажу, что я убил уйму времени, борясь с тем Netcat, который по умолчанию установлен на Debian 10, на приёмном конце для сохранения, на стационарном домашнем компьютере на который уносится бэкап:

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/rus.linux.net.admin$ nc --version
Ncat: Version 7.70 ( https://nmap.org/ncat )
Но мне эта версия не годится!
Тем более, что в репозиториях есть традиционный Netcat:

Код: Выделить всё

olej@ACER:~$ aptitude search netcat
p   netcat                                                                          - инструмент для TCP/IP на все случаи жизни (переходный пакет)
p   netcat-openbsd                                                                  - инструмент для TCP/IP на все случаи жизни
p   netcat-traditional                                                              - инструмент для TCP/IP4 на все случаи жизни

Код: Выделить всё

olej@ACER:~$ sudo apt install netcat
[sudo] пароль для olej:
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
  netcat-traditional
Следующие НОВЫЕ пакеты будут установлены:
  netcat netcat-traditional
Обновлено 0 пакетов, установлено 2 новых пакетов, для удаления отмечено 0 пакетов, и 84 пакетов не обновлено.
Необходимо скачать 75,9 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 156 kB.
Хотите продолжить? [Д/н] y
Пол:1 http://deb.debian.org/debian buster/main amd64 netcat-traditional amd64 1.10-41.1 [66,9 kB]
Пол:2 http://deb.debian.org/debian buster/main amd64 netcat all 1.10-41.1 [9 034 B]
Получено 75,9 kB за 0с (265 kB/s)
Выбор ранее не выбранного пакета netcat-traditional.
(Чтение базы данных … на данный момент установлено 424410 файлов и каталогов.)
Подготовка к распаковке …/netcat-traditional_1.10-41.1_amd64.deb …
Распаковывается netcat-traditional (1.10-41.1) …
Выбор ранее не выбранного пакета netcat.
Подготовка к распаковке …/netcat_1.10-41.1_all.deb …
Распаковывается netcat (1.10-41.1) …
Настраивается пакет netcat-traditional (1.10-41.1) …
Настраивается пакет netcat (1.10-41.1) …
Обрабатываются триггеры для man-db (2.8.5-2) …
Но этого ещё мало!
Нужно в альтернативах системы переключиться на дефаултное использование команды nc.
Например так:

Код: Выделить всё

olej@nvidia ~/2017_WORK $ apt install galternatives
...
Вложения
nc1.png

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: подготовка регулярных бэкапов форума

Непрочитанное сообщение Olej » 02 янв 2020, 16:47

Olej писал(а):
02 янв 2020, 16:14
Нужно в альтернативах системы переключиться на дефаултное использование команды nc.
Проверяем:

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/rus.linux.net.admin$ update-alternatives --display nc
nc - ручной режим
  link best version is /usr/bin/ncat
  ссылка сейчас указывает на /bin/nc.traditional
  link nc is /bin/nc
  slave nc.1.gz is /usr/share/man/man1/nc.1.gz
  slave netcat is /bin/netcat
  slave netcat.1.gz is /usr/share/man/man1/netcat.1.gz
/bin/nc.traditional — приоритет 10
  подчинённый nc.1.gz: /usr/share/man/man1/nc.traditional.1.gz
  подчинённый netcat: /bin/nc.traditional
  подчинённый netcat.1.gz: /usr/share/man/man1/nc.traditional.1.gz
/usr/bin/ncat — приоритет 40
  подчинённый nc.1.gz: /usr/share/man/man1/ncat.1.gz
  подчинённый netcat: /usr/bin/ncat
  подчинённый netcat.1.gz: /usr/share/man/man1/ncat.1.gz

Код: Выделить всё

olej@ACER:~$ which nc
/usr/bin/nc

Код: Выделить всё

olej@ACER:~$ nc -h
[v1.10-41.1]
connect to somewhere:   nc [-options] hostname port[s] [ports] ...
listen for inbound:     nc -l -p port [-options] [hostname] [port]
options:
    -c shell commands   as `-e'; use /bin/sh to exec [dangerous!!]
    -e filename         program to exec after connect [dangerous!!]
    -b                  allow broadcasts
    -g gateway          source-routing hop point[s], up to 8
    -G num                      source-routing pointer: 4, 8, 12, ...
    -h                  this cruft
    -i secs                     delay interval for lines sent, ports scanned
        -k                      set keepalive option on socket
    -l                  listen mode, for inbound connects
    -n                  numeric-only IP addresses, no DNS
    -o file                     hex dump of traffic
    -p port                     local port number
    -r                  randomize local and remote ports
    -q secs                     quit after EOF on stdin and delay of secs
    -s addr                     local source address
    -T tos                      set Type Of Service
    -t                  answer TELNET negotiation
    -u                  UDP mode
    -v                  verbose [use twice to be more verbose]
    -w secs                     timeout for connects and final net reads
    -C                  Send CRLF as line-ending
    -z                  zero-I/O mode [used for scanning]
port numbers can be individual or ranges: lo-hi [inclusive];
hyphens in port names must be backslash escaped (e.g. 'ftp\-data').
Вот!: мне нужна версия 10-41, а не 7.70. С опцией -q.
(Хотя, вообще то говоря, можно, пожалуй, использовать и Ncat от https://nmap.org/ncat, но на обоих компьютерах! И с опцией -i0.5, например, вместо -q0)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

подготовка регулярных бэкапов форума

Непрочитанное сообщение Olej » 02 янв 2020, 17:03

Olej писал(а):
02 янв 2020, 16:07
Такого легко избежать, если поток данных создаваемых бэкапов сразу направлять в открытый сокет, нацеленный на сетевое место конечного сохранения файлов бэкапов.
Чтобы долго не объяснять промежуточных шагов в отладке этого пути - показываю только конечный результат:

1. Скрипт приёма бэкапов на локальном компьютере, стоящем за NAT провайдера, с серым/локальным IP 192.168.1.X:

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/rus.linux.net.admin/timeweb$ cat backreqv 
PREFIX=$(prefix)

nc -q0 185.178.47.95 6666 | pv -b -a  > $PREFIX.sql
nc -q0 185.178.47.95 6666 | pv -b -a  > $PREFIX.tgz


2. Скрипт создания и отправки бэкапов, на глобальном хосте, VDS провайдера, с IP 185.178.47.95 6666:

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/rus.linux.net.admin/timeweb$ host linux-ru.ru
linux-ru.ru has address 185.178.47.95
linux-ru.ru mail is handled by 10 mx2.timeweb.ru.

Сам скрипт:

Код: Выделить всё

root@277938:~# cat ./bacsend 
PREFIX=$(prefix)
cd /var/www 

mysqldump -uxxxx -pyyyyyy forum | pv -b -a |  nc -q0 -l -p 6666
tar -czf- linux-ru.ru | pv -b -a |  nc -q0 -l -p 6666
И никаких sudo ! :lol:

3. Порт TCP для обмена я выбрал наугад - 6666, но чтобы это работало, его нужно открыть на файерволе ufw:

Код: Выделить всё

root@277938:/var/www# ufw allow 6666
Rule added

Код: Выделить всё

root@277938:/var/www# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
WWW Full                   ALLOW       Anywhere
6666                       ALLOW       Anywhere

SMTP                       ALLOW OUT   Anywhere

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: подготовка регулярных бэкапов форума

Непрочитанное сообщение Olej » 02 янв 2020, 17:11

4. И как это выглядит "в натуре"...
- запускаем (по SSH) на VDS хосте скрипт создания и отсылки бэкапов:

Код: Выделить всё

root@277938:~# time ./bacsend 
40,2MiB [2,33MiB/s]
1,01GiB [3,16MiB/s]

real	5m44,008s
user	1m17,166s
sys	0m47,270s
- запускаем скрипт приёма на локальном компьютере:

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/rus.linux.net.admin/timeweb$ time ./backreqv
40,2MiB [3,29MiB/s]
1,01GiB [3,17MiB/s]

real	5m38,720s
user	0m3,483s
sys	0m23,328s
Характерно, и это очень важно и на пользу, что если мы перепутаем последовательности 2-х предыдущих операций, запустим 1-м приёмный скрипт на локальном хосте, то получим ошибку, и ничего не будет попорчено:
olej@ACER:~/2019_WORK/own.WORK/rus.linux.net.admin/timeweb$ ./backreqv
(UNKNOWN) [185.178.47.95] 6666 (?) : Connection refused
0,00 B [0,00 B/s]
(UNKNOWN) [185.178.47.95] 6666 (?) : Connection refused
0,00 B [0,00 B/s]
5. Смотрим у себя на локальном хосте:

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/rus.linux.net.admin/timeweb$ ls -l backup-*
-rw-r--r-- 1 olej olej   42163973 янв  2 16:12 backup-02.01.2020_16-11.sql
-rw-r--r-- 1 olej olej 1083973464 янв  2 16:17 backup-02.01.2020_16-11.tgz
Свежие бэкапы здесь!

6. Проверяем на VDS хосте, убеждаемся что промежуточные файлы бэкапов, занимающие много места, на сервере не создавались и не сохранялись:

Код: Выделить всё

root@277938:~# uptime
 17:24:12 up 5 days, 23:28,  5 users,  load average: 0,00, 0,18, 0,23

Код: Выделить всё

root@277938:~# df | grep ^'/dev/'
/dev/vda1          5092992      3617220  1197348           76% /

root@277938:~# du -hs /var/www/linux-ru.ru/
1,2G	/var/www/linux-ru.ru/

root@277938:~# ls -l /var/www/
итого 8
drwxr-xr-x  2 root     root     4096 дек 20 23:20 html
drwxr-xr-x 25 www-data www-data 4096 дек 22 22:16 linux-ru.ru

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: подготовка регулярных бэкапов форума

Непрочитанное сообщение Olej » 14 янв 2020, 23:58

Olej писал(а):
02 янв 2020, 17:03
Сам скрипт:
Как показал опыт эксплуатации, передавать и .sql и .tgz по одному порту 6666 - не хорошая идея ... потому что если "на том конце" сервера что-то зависнет (скрипт передачи, его экземпляр), то можно принять совсем не то, что ожидаешь... :-o

В конечном итоге - использовал 2 разных порта, 6665 и 6666.
Скрипт передачи (на сервере) теперь выглядит так:

Код: Выделить всё

olej@277938:~$ cat bacsend 
SPORT=6665
ZPORT=6666
mysqldump -uroot -p'mmMAcE9Z' forum > tmp.sql
cat tmp.sql | pv -b -a |  nc -q0 -l -p $SPORT
rm -f tmp.sql

sleep 0.2
cd /var/www 
sudo tar -czf- linux-ru.ru | pv -b -a |  nc -q0 -l -p $ZPORT
А скрипт приёма (на моём локальном хосте):

Код: Выделить всё

olej@ACER:~/2020_WORK/rus.linux.net.hist/timeweb$ cat backreqv 
PREFIX=$(prefix)
SPORT=6665
ZPORT=6666
nc -q0 185.178.47.95 $SPORT | pv -b -a  > $PREFIX.sql
sleep 1
nc -q0 185.178.47.95 $ZPORT | pv -b -a  > $PREFIX.tgz
P.S. Есть и ещё изменения (я показываю не регулярно):
- бэкап БД MySQL создаётся как локальный файл, и только после этого перегоняется по сети...
- при этом время собственно бэкапа БД уменьшилось с 1 мин. до 2 сек., что уменьшает вероятность изменений в БД за этот интервал (я делаю бэкапы не останавливая Apache).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: подготовка регулярных бэкапов форума

Непрочитанное сообщение Olej » 15 янв 2020, 00:01

Olej писал(а):
02 янв 2020, 17:03
Чтобы долго не объяснять промежуточных шагов в отладке этого пути - показываю только конечный результат:
Но этого мало, потому что в предыдущей технике требуется:
1. зайти по SSH на удалённый сервер...
2. запустить там скрипт передачи bacsend...
3. запустить здесь скрипт приёма backreqv...
... и ждать.

Хотелось бы, чтобы всё удалённое запускалось с локального компьютера в фоновом режиме...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: подготовка регулярных бэкапов форума

Непрочитанное сообщение Olej » 15 янв 2020, 00:05

Olej писал(а):
15 янв 2020, 00:01
Хотелось бы, чтобы всё удалённое запускалось с локального компьютера в фоновом режиме...
Пожалуйста... :-D

Код: Выделить всё

olej@ACER:~/2020_WORK/rus.linux.net.hist/timeweb$ cat remote_backup 
rm -f backup-*
sshpass -p zzzzzz ssh -l olej 185.178.47.95 'sudo killall -9 nc &2>/dev/null'

sshpass -p zzzzzz ssh -l olej 185.178.47.95 'bacsend' & 
sleep 3
backreqv

ls -l backup-*.*
Выполняется это как-то так:

Код: Выделить всё

olej@ACER:~/2020_WORK/rus.linux.net.hist/timeweb$ ./remote_backup
40,5MiB [2,14MiB/s]
1,01GiB [2,11MiB/s]
-rw-r--r-- 1 olej olej   42456040 янв 13 16:23 backup-13.01.2020_16-23.sql
-rw-r--r-- 1 olej olej 1088499388 янв 13 16:31 backup-13.01.2020_16-23.tgz
Всё это - только на локальном компьютере и в одном терминале.

Ответить

Вернуться в «Управление WEB ресурсами»

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и 1 гость