Linux скрипт бэкапа файлов

Простой способ резервного копирования Linux-сервера с выгрузкой файлов по FTP

Здравствуйте.
О важности регулярного резервного копирования уже сказано очень много слов. В этой статье мы предлагаем вниманию читателей примеры простых скриптов для бэкапа файлов и баз данных MySQL с последующей выгрузкой архивов на удаленный FTP-сервер.
Несмотря на то что мы в NQhost предлагаем решения по сохранению snapshot’ов VPS-контейнеров, процесс бэкапа собственными силами — безусловно важнейшая вещь.

Хозяйство

Виртуальный или физический сервер с установленной Linux-ОС, веб-сервером и базами данных MySQL.
Файлы веб-сервера располагаются в директориях
/home/site1
/home/site2
/home/site3

Задача

Создание скрипта для резервного копирования файлов и баз данных с сохранением на удаленном FTP-сервере и запуск его каждый день.

Решение

Для простоты примера работать мы будем из-под root`а, директория для хранения бэкапов файлов — /root/backup/server, а для дампов MySQL — /root/backup/mysql

Backup файлов

Здесь приводится пример скрипта для бэкапа файлов, для наглядности пояснения даны в квадратных скобках на русском языке.

#!/bin/sh
### System Setup ###
BACKUP=/root/backup/server

### FTP ###
FTPD=»/»
FTPU=»username» [имя пользавателя (логин) удаленного ftp-cервера]
FTPP=»megapassword» [пароль доступа к удаленному ftp-серверу]
FTPS=»my_remote_backup.ru» [собственно, адрес ftp-сервера или его IP]

### Binaries ###
TAR=»$(which tar)»
GZIP=»$(which gzip)»
FTP=»$(which ftp)»

## Today + hour in 24h format ###
NOW=$(date +%Y%m%d) [задаем текущую дату и время, чтобы итоговый файл выглядел в виде server-YYYYMMDD.tar.gz]

mkdir $BACKUP/$NOW
$TAR -cf $BACKUP/$NOW/etc.tar /etc [c целью сохранения настроек для простоты копируем весь /etc ]
$TAR -cf $BACKUP/$NOW/site1.tar /home/site1/
$TAR -cf $BACKUP/$NOW/site2.tar /home/site2/
$TAR -cf $BACKUP/$NOW/site2.tar /home/site3/

$TAR -zcvf $ARCHIVE $ARCHIVED

### ftp ###
cd $BACKUP
DUMPFILE=server-$NOW.tar.gz
$FTP -n $FTPS quote USER $FTPU
quote PASS $FTPP
cd $FTPD
mput $DUMPFILE
quit
END_SCRIPT

Результатом работы данного скрипта будет созданный файл в директории /root/backup/server вида server-ГГГГММДД.tar.gz содержащий в себе tar-архивы директорий /etc, /home/site1, /home/site2 и /home/site3
Этот же файл будет загружен на FTP-сервер, который мы указали в начале скрипта.

Читайте также:  Running mono on linux
Backup баз MySQL

Этим скриптом мы выгружаем базы данных MySQL (делаем т.н. «дампы). Каждая база выгружается в отдельный файл.

#!/bin/sh
# System + MySQL backup script
### System Setup ###
BACKUP=/root/backup/mysql

### Mysql ### [параметры доступа к нашим базам MySQL]
MUSER=»root»
MPASS=»megapassword»
MHOST=»localhost»

### FTP ###
FTPD=»/»
FTPU=»username» [имя пользавателя (логин) удаленного ftp-cервера]
FTPP=»megapassword» [пароль доступа к удаленному ftp-серверу]
FTPS=»my_remote_backup.ru» [собственно, адрес ftp-сервера или его IP]

### Binaries ###
TAR=»$(which tar)»
GZIP=»$(which gzip)»
FTP=»$(which ftp)»
MYSQL=»$(which mysql)»
MYSQLDUMP=»$(which mysqldump)»

## Today + hour in 24h format ###
NOW=$(date +%Y%m%d)

### name Mysql ###
DBS=»$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse ‘show databases’)»
for db in $DBS
do

### ###
mkdir $BACKUP/$NOW/$db
FILE=$BACKUP/$NOW/$db/$db.sql.gz
echo $i; $MYSQLDUMP —add-drop-table —allow-keywords -q -c -u $MUSER -h $MHOST -p$MPASS $db $i | $GZIP -9 > $FILE
done

$TAR -zcvf $ARCHIVE $ARCHIVED

### ftp ###
cd $BACKUP
DUMPFILE=mysql-$NOW.tar.gz
$FTP -n $FTPS quote USER $FTPU
quote PASS $FTPP
cd $FTPD
mput $DUMPFILE
quit
END_SCRIPT

Результат работы скрипта — файл в директории /root/backup/server вида mysql-ГГГГММДД.tar.gz содержащий в себе tar-архивы c дампами всех баз данных и его выгрузка на FTP-сервер.

Автоматизация

Сохраняем данные скрипты в директорию /etc/cron.daily, предварительно проверив в файле /etc/crontab, что именно из этой директории запускаются скрипты каждый день.

Заключение

Конечно, в каждом конкретном случае скрипты могут меняться и приведенные примеры лишь один из многочисленных вариантов организации резервного копирования.
Надеемся, что после прочтения этой статьи вы задумаетесь над собственным решением бэкапа, если по каким-то причинам еще не организовали этот важнейший процесс.

Источник

Bash скрипт резервного копирования директорий системы Linux

Одним из самых простых способов резервного копирования системы является использование сценария оболочки. Например, с помощью сценария можно настроить, какие каталоги следует резервировать, и передать эти каталоги в качестве аргументов утилите tar, которая создает архивный файл. Затем архивный файл можно переместить или скопировать в другое место. Архив также может быть создан на удаленной файловой системе, например, на монтируемой системе NFS.

backup

Утилита tar создает один архивный файл из многих файлов или каталогов. tar также может фильтровать файлы с помощью утилит сжатия, тем самым уменьшая размер архивного файла.

Читайте также:  Запуск скрипта фоновом режиме linux

Простой сценарий оболочки

Следующий сценарий оболочки использует tar для создания архивного файла на удаленно смонтированной файловой системе NFS. Имя архивного файла определяется с помощью дополнительных утилит командной строки.

#!/bin/bash #################################### # Резервное копирование в NFS. #################################### # Что нужно копировать. backup_files="/home /var/spool/mail /etc /root /boot /opt" # Куда создать резервную копию. dest="/mnt/backup" # Создание имя файла архива. day=$(date +%A) hostname=$(hostname -s) archive_file="$hostname-$day.tgz" # Выведите сообщение о состоянии запуска. echo "Backing up $backup_files to $dest/$archive_file" date echo # Резервное копирование файлов с помощью tar. tar czf $dest/$archive_file $backup_files # Выведите сообщение о завершении работы. echo echo "Backup finished" date # Длинный список файлов в $dest для проверки размеров файлов. ls -lh $dest
  • $backup_files: переменная, в которой перечислены каталоги, резервные копии которых вы хотите создать. Список должен быть настроен в соответствии с вашими потребностями.
  • $day: переменная, содержащая день недели (понедельник, вторник, среда и т.д.). Это используется для создания архивного файла для каждого дня недели, что дает историю резервного копирования за семь дней. Есть и другие способы добиться этого, включая использование утилиты date.
  • $hostname: переменная, содержащая короткое имя хоста системы. Использование имени хоста в имени архивного файла дает возможность размещать ежедневные архивные файлы из нескольких систем в одном каталоге.
  • $archive_file: полное имя архивного файла.
  • $dest: место назначения архивного файла. Каталог должен быть создан и в данном случае смонтирован перед выполнением сценария резервного копирования. Подробности использования NFS см. в разделе .
  • сообщения о состоянии: необязательные сообщения, выводимые на консоль с помощью утилиты echo.
  • tar czf $dest/$archive_file $backup_files: команда tar, используемая для создания архивного файла.
    • c: создает архив.
    • z: фильтрация архива через утилиту gzip, сжимающую архив.
    • f: вывод в архивный файл. В противном случае вывод tar будет отправлен в STDOUT.

    Это простой пример сценария оболочки резервного копирования; однако существует множество опций, которые можно включить в такой сценарий.

    Выполнение сценария

    Выполнение из терминала

    Самый простой способ выполнения приведенного выше сценария резервного копирования — скопировать и вставить его содержимое в файл. Например, backup.sh. Файл необходимо сделать исполняемым:

    Затем из приглашения терминала:

    Это отличный способ протестировать сценарий, чтобы убедиться, что все работает так, как ожидалось.

    Выполнение с помощью cron

    Для автоматизации выполнения скрипта можно использовать утилиту cron. Демон cron позволяет выполнять скрипты или команды в указанное время и дату.

    cron настраивается с помощью записей в файле crontab. файлы crontab разделены на поля:

    • m: минута, в течение которой выполняется команда, от 0 до 59.
    • h: час, в который выполняется команда, от 0 до 23.
    • dom: день месяца, в который выполняется команда.
    • mon: месяц, в котором выполняется команда, от 1 до 12.
    • dow: день недели, в который выполняется команда, от 0 до 7. Воскресенье может быть указано с помощью 0 или 7, оба значения действительны.
    • command: команда для выполнения.

    Для добавления или изменения записей в файле crontab следует использовать команду crontab -e. Кроме того, содержимое файла crontab можно просмотреть с помощью команды crontab -l.

    Чтобы выполнить приведенный выше сценарий backup.sh с помощью cron. Введите в терминале следующую команду:

    Использование sudo с командой crontab -e редактирует кронтаб пользователя root. Это необходимо, если вы создаете резервные копии каталогов, доступ к которым имеет только пользователь root.

    Добавьте следующую запись в файл crontab:

    0 0 * * * bash /usr/local/bin/backup.sh

    Теперь сценарий backup.sh будет выполняться каждый день в 12:00 дня.

    Сценарий backup.sh необходимо скопировать в каталог /usr/local/bin/, чтобы эта запись выполнялась правильно. Сценарий может находиться в любом месте файловой системы, просто измените путь к сценарию соответствующим образом.

    Восстановление из архива

    После создания архива важно протестировать его. Архив можно протестировать, перечислив содержащиеся в нем файлы, но лучшим тестом будет восстановление файла из архива.

    Чтобы просмотреть список содержимого архива. В терминале введите:

    tar -tzvf /mnt/backup/host-Monday.tgz

    Чтобы восстановить файл из архива в другой каталог, введите:

    tar -xzvf /mnt/backup/host-Monday.tgz -C /tmp etc/hosts

    Опция -C в tar перенаправляет извлеченные файлы в указанный каталог. В приведенном выше примере файл /etc/hosts будет извлечен в /tmp/etc/hosts. tar воссоздает структуру каталогов, в которых он находится.

    Также обратите внимание, что в пути к восстанавливаемому файлу отсутствует лидирующий символ «/».

    Чтобы восстановить все файлы в архиве, выполните следующие действия:

    cd / sudo tar -xzvf /mnt/backup/host-Monday.tgz

    Это приведет к перезаписи файлов, находящихся в настоящее время в файловой системе.

    Похожие записи:

    Источник

Оцените статью
Adblock
detector