На днях столкнулся с задачей поставить на крон автобекап сайтов(файлов в директориях и базы данных).
Для начала сам скрипт, а ниже распишу подробней.
doc_root определяет рутовую директорию
name имя файла, в нашем случае будет backup+дата_создания
Если мы хотим добавлять в бекап еще и бд, то у нас есть два пути:
В данном случае папка backup в которой будут складываться бекапы и на самом сайте папка files, в которой хранятся тяжелые файлы.
Чтоб со временем у нас не закончилось место на хостинге, будем удалять архивы с бекапом старше 30 дней
Сохраняете этот скрипт например как backup.sh, на директорию выше чем ваш сайт.
Например ваш сайт лежит тут: /home/i/infoman/site/public_html/<файлы сайта>
Скрипт будет находиться: /home/i/infoman/site/backup.sh
Бекапы будут сохранятся в: /home/i/infoman/site/backup/
Самому скрипту надо дать права 700, через SSH это делается так: chmod +x backup.sh
Теперь вы можете поставить данный скрипт на cron, либо запускать руками ./backup.sh
Для начала сам скрипт, а ниже распишу подробней.
Код:
#!/bin/sh
doc_root=/home/i/infoman/site
name=backup_`date +\%Y\%m\%d`
dbconn=$doc_root/public_html/library/config.php
readcfg() {
grep $1 $dbconn | sed 's/.*"\(.*\)".*/\1/'
}
host1=`readcfg host`
username=`readcfg username`
password=`readcfg password`
database=`readcfg dbname`
utf=`grep 'BX_UTF' $dbconn | grep true`
if [ -z "$utf" ]; then
charset=cp1251
else
charset=utf8
fi
backup_dir=$doc_root/backup
if [ ! -e $backup_dir ]; then
mkdir $backup_dir
fi
cd $doc_root &&
mysqldump -h$host1 -u$username -p$password --default-character-set=$charset $database > $backup_dir/$name.sql &&
tar -cf $backup_dir/$name.tar $backup_dir/$name.sql &&
rm $backup_dir/$name.sql &&
tar -rf $backup_dir/$name.tar --exclude '*backup/*' --exclude '*public_html/files/*' . &&
gzip -f -9 $backup_dir/$name.tar &&
find $backup_dir -ctime +30 -exec rm {} \; &&
echo OK && exit
echo Error
doc_root определяет рутовую директорию
name имя файла, в нашем случае будет backup+дата_создания
Код:
doc_root=/home/i/infoman/site
name=backup_`date +\%Y\%m\%d`
Если мы хотим добавлять в бекап еще и бд, то у нас есть два пути:
- Прописываем данные для соединения с базой руками
- Указываем в dbconn путь до файла с конфигом и функция readcfg() сама все сделает.
Приведу пример пары конфигов
Система управления сайтом Bitrix
Код:dbconn=$doc_root/bitrix/php_interface/dbconn.php host1=`readcfg DBHost` username=`readcfg DBLogin` password=`readcfg DBPassword` database=`readcfg DBName`
PHP:define("DBPersistent", false); $DBType = "mysql"; $DBHost = "localhost"; $DBLogin = "root"; $DBPassword = "1Bdy&idPd9lKy"; $DBName = "infomanbd"; $DBDebug = false; $DBDebugToFile = false;
Для xenforo
Код:dbconn=$doc_root/public_html/library/config.php host1=`readcfg host` username=`readcfg username` password=`readcfg password` database=`readcfg dbname`
PHP:$config['db']['host'] = "localhost"; $config['db']['port'] = "3306"; $config['db']['username'] = "infomanbd"; $config['db']['password'] = "13I^bCeUdyDHdfrFF"; $config['db']['dbname'] = "infomanbd";
Код:
tar -rf $backup_dir/$name.tar --exclude '*backup/*' --exclude '*public_html/files/*' . &&
Чтоб со временем у нас не закончилось место на хостинге, будем удалять архивы с бекапом старше 30 дней
Код:
find $backup_dir -ctime +30 -exec rm {} \; &&
Сохраняете этот скрипт например как backup.sh, на директорию выше чем ваш сайт.
Например ваш сайт лежит тут: /home/i/infoman/site/public_html/<файлы сайта>
Скрипт будет находиться: /home/i/infoman/site/backup.sh
Бекапы будут сохранятся в: /home/i/infoman/site/backup/
Самому скрипту надо дать права 700, через SSH это делается так: chmod +x backup.sh
Теперь вы можете поставить данный скрипт на cron, либо запускать руками ./backup.sh