Для создания скрипта резервного копирования папки /var/www и базы данных MySQL на удаленный сервер через SSH с сохранением в папке с текущей датой, вы можете использовать следующий Bash-скрипт:
#!/bin/bash # Параметры для подключения к удаленному серверу REMOTE_USER="remote_username" # Замените на имя пользователя на удаленном сервере REMOTE_HOST="remote_server_ip" # Замените на IP-адрес удаленного сервера REMOTE_DIR="/path/to/backup/directory" # Замените на путь к папке на удаленном сервере # Создание папки с текущей датой BACKUP_DATE=$(date +"%Y-%m-%d") LOCAL_BACKUP_DIR="/path/to/local/backup/directory/$BACKUP_DATE" # Замените на локальный путь для сохранения бэкапа mkdir -p "$LOCAL_BACKUP_DIR" # Имя файла для резервной копии базы данных DB_BACKUP_FILE="$LOCAL_BACKUP_DIR/db_backup.sql.gz" # Резервное копирование MySQL базы данных DB_USER="mysql_username" # Замените на имя пользователя MySQL DB_PASS="mysql_password" # Замените на пароль MySQL DB_NAME="mysql_database" # Замените на имя базы данных MySQL # Резервное копирование базы данных MySQL mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$DB_BACKUP_FILE" # Резервное копирование папки /var/www WWW_DIR="/var/www" WWW_BACKUP_FILE="$LOCAL_BACKUP_DIR/www_backup.tar.gz" tar czf "$WWW_BACKUP_FILE" "$WWW_DIR" # Копирование резервных копий на удаленный сервер через SSH scp -r "$LOCAL_BACKUP_DIR" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR" # Удаление локальных резервных копий rm -r "$LOCAL_BACKUP_DIR"
После настройки скрипта сохраните его, сделайте исполняемым
chmod +x script.sh
и запустите. Он создаст резервную копию базы данных MySQL и папки /var/www, затем скопирует их на удаленный сервер через SSH. После этого локальные резервные копии будут удалены.
Этот скрипт подойдет вам в том случае, если вы собираетесь производить резервное копирование сайта запуском скрипта из командной строки без использования автоматизации (в этом случае вам придется постоянно вводить пароль пользователя SSH удаленного сервера).
Чтобы автоматизировать процесс резервного копирования сайта и базы данных MySQL на удаленный сервер SSH с использованием пароля пользователя SSH в скрипте Bash, нам понадобится утилита SSHPASS.
sshpass — полезный инструмент, используемый для запуска аутентификации ssh в неинтерактивном режиме. Применяя sshpass, вы можете использовать пароли для команды ssh или scp без взаимодействия, что помогает в shell-скриптах. Вместо этого мы рекомендуем использовать аутентификацию на основе ключей.
Установка sshpass
Пакет sshpass доступен в репозиториях пакетов по умолчанию для большинства современных операционных систем. Используйте следующие команды, чтобы установить его в вашей системе.
На Debian / Ubuntu:
sudo apt install sshpass
На CentOS:
yum --enablerepo=epel -y install sshpass
Использование sshpass
sshpass использует переменную среды SSHPASS для хранения пользовательских паролей. Сначала вам нужна переменная SSHPASS с паролем, а затем используйте команду, приведенную ниже. Вот простой shell-скрипт, использующий sshpass:
export SSHPASS=ry3AvbWO0oupYX9HCMzp0Axx sshpass -e scp testfile.csv user@example.com:/uploads/
Вы также можете запустить команду ssh следующим образом с помощью sshpass:
sshpass -e ssh user@example.com
Также нам необходимо изменить наш скрипт резервного копирования сайта и базы данных на удаленный сервер SSH следующим образом:
#!/bin/bash # Параметры для подключения к удаленному серверу REMOTE_USER="remote_username" # Замените на имя пользователя на удаленном сервере REMOTE_HOST="remote_server_ip" # Замените на IP-адрес удаленного сервера REMOTE_DIR="/path/to/backup/directory" # Замените на путь к папке на удаленном сервере export SSHPASS=PasSwOrd # Замените на свой пароль пользователя SSH удаленного сервера SSH # Создание папки с текущей датой BACKUP_DATE=$(date +"%Y-%m-%d") LOCAL_BACKUP_DIR="/path/to/local/backup/directory/$BACKUP_DATE" # Замените на локальный путь для сохранения бэкапа mkdir -p "$LOCAL_BACKUP_DIR" # Имя файла для резервной копии базы данных DB_BACKUP_FILE="$LOCAL_BACKUP_DIR/db_backup.sql.gz" # Резервное копирование MySQL базы данных DB_USER="mysql_username" # Замените на имя пользователя MySQL DB_PASS="mysql_password" # Замените на пароль MySQL DB_NAME="mysql_database" # Замените на имя базы данных MySQL mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$DB_BACKUP_FILE" # Резервное копирование папки /var/www WWW_DIR="/var/www" WWW_BACKUP_FILE="$LOCAL_BACKUP_DIR/www_backup.tar.gz" tar czf "$WWW_BACKUP_FILE" "$WWW_DIR" # Копирование резервных копий на удаленный сервер через SSH с использованием утилиты sshpass sshpass -e scp -r "$LOCAL_BACKUP_DIR" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR" # Удаление локальных резервных копий rm -r "$LOCAL_BACKUP_DIR"
Теперь автоматизируем процесс резервного копирования при помощи утилиты Сron
Cron (команда cron) — это стандартная утилита в операционных системах Linux и Unix, которая позволяет пользователю запускать задачи (команды, скрипты, программы) автоматически и периодически в заданное время или в определенные интервалы времени. Это очень полезный инструмент для автоматизации рутинных задач, планирования резервных копий, обслуживания серверов и многих других задач.
Система cron работает на основе конфигурационных файлов, таких как crontab (Cron Table), которые содержат расписание задач. Пользователи и администраторы могут создавать, редактировать и управлять своими crontab-файлами для запуска задач в нужное время.
Для запуска редактирования нашей автоматической задачи выполните в терминале команду:
crontab -e
При первом запуске утилита попросит выбрать редактор по умолчанию:
Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed
Выбрав нужный редактор нажатием соответствующей клавиши, откроется редактор задач Cron:
Добавим в конец файла нашу задачу. В этом примере резервное копирование будет проходить ежедневно в 3 часа 00 минут. Для этого добавим строку с указанием времени в специальном формате и путь к нашему скрипту резервного копирования сайта и базы данных MySQL:
0 3 * * * bash /path_to_script_dir_/script.sh
Сохраните и закройте редактор. ГОТОВО!
Теперь наш сайт будет автоматически копироваться в заданное время в папку с текущей датой.