Skip to content

Instantly share code, notes, and snippets.

@av-jok
Forked from andronex/backup.sh
Created October 27, 2021 08:22
Show Gist options
  • Save av-jok/c49b6653e42e1cf21f952c40e2d5449d to your computer and use it in GitHub Desktop.
Save av-jok/c49b6653e42e1cf21f952c40e2d5449d to your computer and use it in GitHub Desktop.
Скрипт для бэкапа

1. Залить выше корня сайта два файла: bash скрипт и php скрипт
2. Поменять настройки, пути в файлах там, где нужно
3. Повешать выполнение backup.sh на cron
4. Скрипт будет работать даже на shared хостингах, т.к. использован подход, позволяющий избежать заблокированных команд
5. Если используется VPS или dedicated server, то можно обойтиь без PHP скрипта, а добавить в файл backup.sh строки из ftp.sh, выполнив нужные настройки и прописав доступы
#!/bin/bash
#настройки для подключения к БД
USER="login" #логин для подключения к БД
PASS="pass" #пароль для подключения к БД
DB_NAME="db_name" #имя БД
#запускать для сохранения бэкапа
#переходим в директорию выше корня сайта
cd ~
#сохраняем дамп БД
mysqldump -uUSER -pPASS DB_NAME > DB_NAME.sql
#архивируем файлы сайта
tar czf back_up.tar.gz public_html
#если нужно исключить из архива директории или файлы
#tar czf back_up.tar.gz public_html --exclude=import --exclude='config.php' --exclude=cgi-bin --exclude={'*.jpg','*.png','*.bmp','*.gif','*.jpeg','*.GIF','.htaccess'} --exclude=PDOCrud/script/uploads --exclude=PDOCrud/script/downloads
echo 'Сохранено'
#запускаем файл PHP от имени интерпретатора PHP версии 7.0
#если на сервере основная версия PHP7, то можно написать команду просто: php ftp_backup.php
/opt/php70/bin/php ftp_backup.php
#!/bin/bash
#настройки для подключения по FTP
FTPD="/"
FTPU="login"
FTPP="pass"
FTPS="127.0.0.1"
FTP="$(which ftp)"
cd ~
#имена файлов
for f in back_up.tar.gz DB_NAME.sql
do
DUMPFILE=$f
$FTP -n $FTPS <<END_SCRIPT
quote USER $FTPU
quote PASS $FTPP
cd $FTPD
binary
mput $DUMPFILE
quit
END_SCRIPT
done
<?php
$files = ['back_up.tar.gz','DB_NAME.sql'];
$ftp_server = "127.0.0.1"; //ip сервера
$ftp_user_name = "login"; //ftp логин
$ftp_user_pass = "pass"; //ftp пароль
// установка соединения
$conn_id = ftp_connect($ftp_server);
// проверка имени пользователя и пароля
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, true);
$date = date('d_');
$path = dirname(__FILE__);
foreach($files as $file){
rename($path . '/' . $file, $path . '/' . $date . $file);
// загрузка файла
if (ftp_put($conn_id, $date . $file, $date . $file, FTP_BINARY)) {
echo "$date$file успешно загружен на сервер\n";
unlink($path . '/' . $date . $file);
}
else {
echo "Не удалось загрузить $date$file на сервер\n";
}
}
// закрытие соединения
ftp_close($conn_id);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment