Бэкап на удаленный сервер по SSH

На удаленный сервер

sshpass -p "password" scp -P 7855 /root/backup_new/20240215.sql user@135.158.151.28:/volume2/backup/

password — пароль к удаленному серверу
7855 — порт удаленного сервера
/root/backup_new/20240215.sql — файл на текущем сервере
user — пользователь удаленного сервера
135.158.151.28 — IP удаленного сервера
/volume2/backup/ — путь на удаленном сервере куда бэкапим

Локально

zip -r -0 /root/backup_new_`date +"%Y%m%d"`.zip /var/www/b2b

zip -r -0 — не использовать сжатие, архивируем с помощью zip
/root/backup_new/backup_new_`date +"%Y%m%d"`.zip — создать файл в директории /root/backup_new/ с названием backup_new_ + текущая дата

Пример реального скрипта что используется на сервере

#!/bin/bash

#Бэкап базы данных
mysqldump --single-transaction  --user=root --password=123456 b2b > /root/backup_new/b2b_`date +"%Y%m%d"`.sql
sleep 10
sshpass -p "password" scp -P 7855 /root/backup_new/b2b_`date +"%Y%m%d"`.sql user@135.158.151.28:/volume2/backup

#Бэкапим сайт
zip -r -0 /root/backup_new/backup_new_`date +"%Y%m%d"`.zip /var/www/b2b
sleep 60
sshpass -p "password" scp -P 7855 /root/backup_new/b2b_`date +"%Y%m%d"`.zip user@135.158.151.28:/volume2/backup/

# Удаление файлов .zip и .sql что старше 10 дней
# Директория, в которой находятся файлы
directory="/root/backup_new"

# Перейти в директорию
cd "$directory" || exit
# Удаление файлов .zip и .sql старше 5 дней
find . -maxdepth 1 -type f \( -name "*.zip" -o -name "*.sql" \) -mtime +10 -exec rm {} \;

Когда что то не работает

Включаем режим отладки

sshpass -p "password" scp -P 7855 -v /root/backup_new/20240215.sql user@135.158.151.28:/volume2/backup/
Для этого добавляем -v
Также можно просто команду scp -P 7855 -v /root/backup_new/20240215.sql user@135.158.151.28:/volume2/backup/, она предложит сохранить ключи в память сервера

Наверх