Бекап сайта на сервере CentOS на удалённый FTP-сервер

Категории: Скрипты
Комментарии: 5 комментариев
Опубликовано: 09.01.2014

бекапЧтобы делать бекап сайта нам потребуется другой сервер или хотя бы свой домашний компьютер. Нет смысла делать бекапы и хранить их на этом же сервере Если полетит сервер, то и все данные на нём удалятся.

Для начала создадим ФТП-сервер на другом сервере, VDS или компьютере. Для этого можно использовать любое подходящее ПО ФТП-сервера подходящее для операционной системы устройства, куда будут копироваться бекапы.

Потом создадим папку на нашем сервере, где у нас будут создаваться, храниться и откуда будут отправляться наши бекапы. Назовём её, например backup.

Так, как мы будем бекапить не только файлы сайта но и базу данных, то нам будет ещё и необходимо знать логин и пароль нашей базы данных.

И так, создадим небольшой скрипт, который мы назовём так же backup (можно и по другому, например назвать названием сайта) и положим этот скрипт в папку cron.daily, чтобы этот скрипт запускался ежедневно автоматически. Ну, не интересно будет каждый день запускать этот скрипт в ручную :-).

Скрипт:

#! /bin/sh
to_cat=/путь/до/папки/backup
web_cat=/путь/до/папки_сайта/*
date_time=`date +"%Y-%m-%d_%H-%M-%S"`
/usr/bin/mysqldump -u имя_пользователя_базы_mysql -pпароль_базы_mysql название_базы_mysql > $to_cat/mysql_$date_time.sql
/bin/tar -czf $to_cat/arh_$date_time.tar.gz $web_cat $to_cat/mysql_$date_time.sql > /dev/null 2>&1
rm $to_cat/mysql_$date_time.sql
# Удаляем копии, которые старше 7 дней
find $to_cat -name '*.gz' -mtime +7 -delete
# Копирование резервного архива на удаленный FTP-сервер
ftpuser='ФТП_пользователь'
password='ФТП_пароль'
ftpserver='ФТП_сервер'
file=arh_$date_time.tar.gz
ftp -n $ftpserver << EOF
user $ftpuser $password
binary
put $to_cat/$file /папка_куда_будет_сохранятся_архив_сайта/$file
bye
EOF

Вот вроде и всё. Если мы всё сделали правильно, то архив нашего сайта будет ежедневно создаваться на нашем сервере, а потом копироваться на другой сервер по ФТП и ещё архивы старше 7 дней будут удалятся сами.

Но, архивы старше 7 дней удалятся будут только на нашем сервере, где сайт. А на другом не будут. Это можно решить просто, достаточно на другом сервере создать задание для cron:

5 1 * * * find /путь/до/папки/с/архивами -name '*.gz' -mtime +7 -delete

Данное задание обозначает, что ежедневно в 01.05 будет запускаться поиск архивов, которые старше 7 дней и при нахождений таких они будут удаляться.





5 комментариев - Добавить комментарии
  1. Andrei:

    Привет,
    Я использовал Ваш Скрипт и столкнулися с проблемой.
    при запуске не дает никакой ошибки но на FTP нет ни один из файлов.

    #! /bin/sh
    to_cat=/home/backup/tmp
    web_cat=/var/www/site1
    date_time=`date +»%Y-%m-%d_%H-%M-%S»`
    /usr/bin/mysqldump -u backup-p backup123 site1 > $to_cat/mysql_$date_time.sql
    /bin/tar -czf $to_cat/arh_$date_time.tar.gz $web_cat $to_cat/mysql_$date_time.sql > /dev/null 2>&1
    rm $to_cat/mysql_$date_time.sql
    # Удаляем копии, которые старше 7 дней
    find $to_cat -name ‘*.gz’ -mtime +2 -delete
    # Копирование резервного архива на удаленный FTP-сервер
    ftpuser=’ftp_bk’
    password=’ххххх’
    ftpserver=’192.168.4.87′
    file=arh_$date_time.tar.gz
    ftp -n $ftpserver << EOF
    user $ftpuser $password
    binary
    put $to_cat/$file /tmp/$file
    bye
    EOF

    помогите мне разобраца пожалуйста

    • Люцифер:

      А права все правильно выставлены? Папки предварительно созданы? Точно уверены, что cron запускался?

      • Andrei:

        Да, все папки созданы! запускю вручную!
        права все выставел
        На мой взгляд, ошибка здесь
        binary
        put $to_cat/$file /tmp/$file
        bye
        EOF

        • Люцифер:

          У меня данный скрипт успешно работает.

          На мой взгляд, ошибка здесь
          binary
          put $to_cat/$file /tmp/$file
          bye
          EOF

          Если бы была ошибка там, то FTP что-нибудь написал бы.
          А на сервере, где файлы сайта лежат, там бэкап создаётся?

  2. Игорь:

    У меня заработало только с добавлением строчки passive

    «ftp -n $ftpserver << EOF
    user $ftpuser $password
    binary
    passive
    put $to_cat/$file /backup/$file
    bye
    EOF"

Добавить комментарии

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Привет, , сегодня Среда, 24.05.2017