Рубрики
backup \ crontab \ tar \ zip \ архивация \ архиваторы

borg / borgbackup / systemd / systemd timer / tar / rsync

Ссылки:

как ставить сам borg можно посмотреть тут:
borgbackup / backup / borg debian 10 / без шифрования репозитория

backup files

0. Создаем каталоги:
mkdir -p /root/backup/{etc,www,sql}
1. Создаем скрипт для бэкапа и вносим изменения для переменных
cat > /root/backup/backup.sh << "EOF"
----------------------------
#!/bin/bash
#VAR
TIMESTAMP=`date +%m-%d-%y-%H%M`
HOST=localhost
DBNAME="dbname"
USER="dbuser"
PASSWORD="dbPassw0rd"
DUMP_PATH=/root/backup/sql
BACK_PATH=/root/backup/www
BACK_PATH_ETC=/root/backup/etc
 
# BACKUP
cd /root/backup
 
# Backup mysql
mysqldump --opt -c -e -Q -h${HOST} -u${USER} -p${PASSWORD} ${DBNAME} > ${DBNAME}.sql
tar czpf ${DUMP_PATH}/${DBNAME}.${TIMESTAMP}.tar.gz ${DBNAME}.sql
rm -f ${DBNAME}.sql
 
# Backing up files
#tar cvzpf $BACK_PATH/www.$TIMESTAMP.tar.gz --same-owner  --exclude=/var/www/site/gruzims/* /var/www
tar cvzpf ${BACK_PATH}/www.${TIMESTAMP}.tar.gz /var/www/html
tar cvzpf ${BACK_PATH_ETC}/etc.${TIMESTAMP}.tar.gz /etc
 
# CLEAN FOLDER BACKUP
# выполняем только если файлов в каталогах для бекапа больше двух 
delfiles(){
for i in $1 $2 $3 $4 $5 $6; do
        calc=$(ls ${i} | wc -l) 
        if ((${calc} > 2)); then true ; else false ; fi && find ${i} -name "*.tar.gz" -mtime +15 -delete
done
}
delfiles ${DUMP_PATH} ${BACK_PATH} ${BACK_PATH_ETC}
EOF
 
 
2. Создаем сервис в systemd
cat > /etc/systemd/system/backup-wp.service << "EOF"
[Unit]
Description=backup
 
[Service]
Type=oneshot
ExecStart=/root/backup/backup.sh
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
EOF
 
3. Создаем таймер в systemd для будем бэкапить в 2 часа ночи
cat > /etc/systemd/system/backup.timer << "EOF"
[Unit]
Description=backup
 
[Timer]
OnCalendar=02:00:00
 
[Install]
WantedBy=timers.target
EOF
 
4. Активируем сервисы для бекапа
systemctl daemon-reload
systemctl enable backup-wp.service
systemctl enable backup-wp.timer 
systemctl status backup-wp.service
systemctl status backup-wp.timer 
systemctl list-timers backup-wp.timer 
 
5. Может пригодится:
#HINT
# SYSTEMCTL
# systemctl status backup-wp.service
# systemctl status backup-wp.timer
# Clean DB erase
# mysqldump -uuser -ppassword --add-drop-table --no-data databasename | grep ^DROP | mysql -uuser -ppassword databasename
# Clean not work
# drop databases mydatabasedump.sql;
# create databases mydatabasedump.sql;
# RESTORE
# mysql -u root -p -f mydatabase < /home/myname/mydatabasedump.sql
# RSYNC to remote server
# sync -avz /root/backup-wp user@YOU-server-IP-DNS:/home/user/backup-wp

ssh ssh-keygen ssh-copy

Создать пользователя "USRER_NAME" с домашним каталогом "/backup/USRER_CATALOG_BACKUP": 
adduser --home /backup/USRER_CATALOG_BACKUP --disabled-password borg USRER_NAME
Подключится пользователем 
sudo -i -u USRER_NAME

ssh - поддержка авторизация без пароля с помощью RSA ключей

Выполнять на клиенте с которого будем подключатся к серверу.
ssh-keygen - создаем пару ключей на сервере с которого будем подключатся.
ssh-copy-id sammy@IP_адрес_вашего_сервера - копирование открытого ключа

На сервере куда будем класть бэкапы, пользователю в домашнем каталоге добавляем публичные ключи:
.ssh/authorized_keys

Если нет каталога .ssh можно его создать
mkdir .ssh
touch .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

borgbackup

1. Создаем сервис в systemd
cat > /etc/systemd/system/borg-backup.service << "EOF"
[Unit]
Description=borg-backup
 
[Service]
Type=oneshot
ExecStart=/root/borg-backup.sh
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
EOF
 
2. Создаем таймер в systemd для будем бэкапить в 3 часа ночи
cat > /etc/systemd/system/borg-backup.timer << "EOF"
[Unit]
Description=borg-backup.timer
 
[Timer]
OnCalendar=03:00:00
 
[Install]
WantedBy=timers.target
EOF

3. скрипт бэкапа
cat > /root/borg-backup.sh << "EOF"
#!/bin/bash
/usr/bin/borg create -C lz4 borg@IP_AND_HOSTNAME:FOLDER_BACKUP::system_$(date +%Y%m%d_%H%M%S) /root /home /etc
EOF
chmod +x /root/borg-backup.sh 


4. Активируем сервисы для бекапа
systemctl daemon-reload
systemctl enable borg-backup.service
systemctl enable borg-backup.timer 
systemctl start borg-backup.timer 
systemctl status borg-backup.service
systemctl status borg-backup.timer 
systemctl list-timers borg-backup.timer
systemctl start borg-backup.service



5. Чистилка бэкапов 
cat > /root/borg-prune.sh << "EOF"
#!/bin/bash
list_backup="linux linux2 linux3 linux4 linux5"
borg_purn_par="--force -v --list --keep-daily 10 --keep-weekly 5 --keep-monthly 8"
borg_backup_dir="/backup/"

#prune
for i in ${list_backup}; do
 borg prune ${borg_purn_par} ${borg_backup_dir}${i}/
done

#compact
for i in ${list_backup}; do
 echo "compact for folder ${i}"
 borg compact ${borg_backup_dir}${i}/
done

#print dir
for i in ${list_backup}; do
 echo ${i}
 borg list ${borg_backup_dir}${i}/
done

#retun user chown
for i in ${list_backup}; do
        chown borg:borg -R ${borg_backup_dir}${i}
        echo "done chown for borg ${i}"
done

EOF

chmod +x /root/borg-prune.sh


6. Таймеры для чистилки
Создаем сервис в systemd
cat > /etc/systemd/system/borg-prune.service << "EOF"
[Unit]
Description=borg-prune
 
[Service]
Type=oneshot
ExecStart=/root/borg-prune.sh
Restart=on-failure
 
[Install]
WantedBy=multi-user.target
EOF
 
Создаем таймер в systemd для будем бэкапить в 3 часа ночи
cat > /etc/systemd/system/borg-prune.timer << "EOF"
[Unit]
Description=borg-prune
 
[Timer]
OnCalendar=04:00:00
 
[Install]
WantedBy=timers.target
EOF

systemctl daemon-reload
systemctl enable borg-prune.service
systemctl enable borg-prune.timer 
systemctl start borg-prune.timer 
systemctl status borg-prune.service
systemctl status borg-prune.timer 
systemctl list-timers borg-prune.timer
systemctl start borg-prune.service



rsync systemd

0. Создаем сервис для rsync
cat > /etc/systemd/system/store_rsync.service << "EOF"
[Unit]
Description=store rsync

[Service]
Type=oneshot
ExecStart=/root/store_rsync.sh
User=root
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

1. Создаем таймер для запуска сервиса
cat > /etc/systemd/system/store_rsync.timer << "EOF"
[Unit]
Description=store_rsync

[Timer]
OnCalendar=6:00:00

[Install]
WantedBy=timers.target
EOF

2. Создаем скрипт для синхронизации, например такой
cat > /root/store_rsync.sh  <<"EOF"
#!/bin/bash
set +x
# Устанавливаем IP-адрес для проверки
HOST="192.168.15.10"

# Пингуем хост (1 раз с таймаутом 3 секунды)
ping -c 1 -W 3 $HOST > /dev/null 2>&1

# Проверяем результат пинга
if [ $? -ne 0 ]; then
  echo "Ошибка: Хост $HOST не доступен!"
  exit 1
else
  echo "Хост $HOST доступен, выполняем ниже стоящие команды."
fi

#/usr/bin/rsync -avz /kvm/datastore2/backup  hsrvrsync@192.168.15.100:/mnt/Storage3/backup-from-hsrv/
#/usr/bin/rsync -avz /kvm/datastore2/hsrv1/kvm/storage/toshibahdwd120  hsrvrsync@192.168.15.100:/mnt/Storage2/share-from-hsrv/
EOF

3. Запускаем демоны и выполняем первичный запуск
systemctl daemon-reload
systemctl enable store_rsync.service
systemctl enable store_rsync.timer
systemctl start store_rsync.timer
systemctl status borg-prune.service
systemctl status store_rsync.service
systemctl list-timers  store_rsync.timer
systemctl start store_rsync.service