Skip to content

Instantly share code, notes, and snippets.

@andronex
Created December 18, 2018 18:02
Show Gist options
  • Save andronex/73e28c91507312f018c6729d11c75ae6 to your computer and use it in GitHub Desktop.
Save andronex/73e28c91507312f018c6729d11c75ae6 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