Ссылки:
как ставить сам 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