Автор Тема: Помогите собрать код резервного копирования на bash  (Прочитано 3929 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tesla

  • Активный пользователь
  • **
  • Сообщений: 66
Добрый вечер!
Помогите пожалуйста собрать код резервного копирования на bash.

Логика:
1. Делаем dump базы данных
2. Через tar упаковываем файлы сайта
3. Эти два архива упаковываем в один применяя метод  gzip

Если по частям:
1. mysqldump -uadmin --lock-all-tables databaseName > databaseName.sql
2. tar -cf files.tar /var/www/siteName/
3. tar -czf backUp.tag.gz databaseName.sql files.tar

В результате в архиве есть: databaseName.sql (база данных, все верно) и архив files.tar, который при розпаковци создает просто файл без без расширения.

Если пропустить второй пункт, а третий пункт сделать так  tar -czf backUp.tag.gz databaseName.sql /var/www/siteName/ - тогда у архиве есть databaseName.sql (база данных, все верно) и папки /var/www/siteName/ и здесь все файлы (кроме скрытых, например .htaccess).
Вопрос:
1. Почему когда делаю первый вариант то не, так как хотелось и планировалось, делает?
2. Как собрать в архив скрытые файлы?
 

Оффлайн qupl

mysqldump -uadmin --lock-all-tables databaseName > databaseName.sql
shopt -s dotglob
tar -cf files.tar /var/www/siteName/
tar -czf backUp.tag.gz databaseName.sql files.tar
shopt -u dotglob

Оффлайн Tesla

  • Активный пользователь
  • **
  • Сообщений: 66
Что такое "shopt -s dotglob" и "shopt -u dotglob" ?
 

Оффлайн Leo

shopt — встроенная команда оболочки, управляет опциями. Изменяет значение внутренних конфигурационных параметров оболочки.

и оттуда же:

dotglob — если опция выставлена - bash будет включать в список файлов файлы, начинающиеся с точки ( .bashrc ) в результат glob-а.
« Последнее редактирование: 08 Февраля 2015, 12:45:26 от Leo »
 

Оффлайн Tesla

  • Активный пользователь
  • **
  • Сообщений: 66
Объясните пожалуйста зачем она здесь, и что именно она здесь делает

Сообщение объединено: [time]08 Февраль 2015, 14:03:41[/time]
И еще вопрос, когда делаю так:
Код: (xml) [Выделить]
mysqldump -uadmin --lock-all-tables databaseName > databaseName.sql
gzip -c databaseName.sql > databaseName.gz 
Все работает нормально, а когда так:
Код: (xml) [Выделить]
# gzip -c $(mysqldump -uadmin --lock-all-tables ouruniverse.biz) > 1.sql
-bash: /bin/gzip: Слишком длинный список аргументов
То видает ошибку, почему? База одна и та же
« Последнее редактирование: 08 Февраля 2015, 14:04:31 от Tesla »
 

Оффлайн ogost

Объясните пожалуйста зачем она здесь, и что именно она здесь делает
shopt — встроенная команда оболочки, управляет опциями.
dotglob — если опция выставлена - bash будет включать в список файлов файлы, начинающиеся с точки ( .bashrc ) в результат glob-а.
следите за руками:
shopt -s dotglobдана команда башу обрабатывать все файлы, включая и скрытые (как вы и хотели).
далее произведя нужные действия:
shopt -u dotglobздесь возвращаем первоначальное значение, то бишь не обрабатывать скрытые файлы. Не знаю как понятней объяснить, гугл у вас работает? ну или яндекс на крайняк?

во втором вопросе вы пытаетесь скормить gzip-у весь дамп не в виде файла, а в виде каши, которую выдаст mysqldump (вы же не указали в скобках в какой файл писать дамп), которую gzip принимает за аргументы. поэтому и вЫдает ошибку.

Оффлайн Tesla

  • Активный пользователь
  • **
  • Сообщений: 66
Извините, действительно что-то не подумал поискать.
Спасибо, Вы понятно объяснили.

Га счет второго вопроса верно будет это выполнить так mysqldump -uadmin --lock-all-tables databaseName | gzip -c > backUp.sql.gz ?
 

Оффлайн ogost

усложняете себе жизнь.
что мешает в две команды выполнить указанный бэкап?

Оффлайн Tesla

  • Активный пользователь
  • **
  • Сообщений: 66
При упаковке в архиве лежат папки с путем  /var/www/siteName/, подскажите как сделать так чтобы в архиве были только файлы в папки siteName ?

Сообщение объединено: 08 Февраля 2015, 17:24:20
усложняете себе жизнь.
что мешает в две команды выполнить указанный бэкап?
Подскажите как
 

Оффлайн Leo

mysqldump -u [uname] -p[pass] [dbname] | gzip -9 > [backupfile.sql.gz]

Оффлайн Tesla

  • Активный пользователь
  • **
  • Сообщений: 66
Объясните пожалуйста что такое "gzip -9", то что в скобках, я так понимаю нужно подставить свои название и значения ? Если я верно понял то этот код делает dump базы данных и сохраняет в архив. Но это я уже знаю как сделать
 

Оффлайн Leo

-9 - наилучшая степень сжатия, можно опустить...

При упаковке в архиве лежат папки с путем  /var/www/siteName/, подскажите как сделать так чтобы в архиве были только файлы в папки siteName ?

использовать tar опцию
     -C, --directory DIR
           change to directory DIR

либо сначала использовать cd, а затем tar
cd /var/www/siteName
« Последнее редактирование: 08 Февраля 2015, 19:29:15 от Leo »
 

Оффлайн ogost

приведу скрипт бэкапа, которым пользуюсь я:
#!/bin/bash
#
# Directory where logs are kept:
LOGBASE=/root/backup/log

# Directories to backup
BACKUP_ROOT_DIR="srv/samba home/vmail"

# Get todays day name, eg Mon, Tue and so on
NOW=$(date +"%a")

# Tape device name
TAPE="/dev/st0"

# Exclude file
TAR_ARGS=""
EXCLUDE_CONF="/root/backup.exclude.conf"

#Backup logfile
LOGFILE=$LOGBASE/$NOW.backup.log

# Path to binaries
TAR=/bin/tar
MT=/bin/mt
MKDIR=/bin/mkdir

# ------------------------------------------------------------------------
# Excluding files when using tar
# Create a file called $EXCLUDE_CONF using a text editor
# Add files matching patterns such as follows (regex allowed):
# home/vivek/iso
# home/vivek/*.cpp~
# ------------------------------------------------------------------------
[ -f $EXCLUDE_CONF ] && TAR_ARGS="-X $EXCLUDE_CONF"

##### Different backup methods
# Make full backup
full_backup(){
local old=$(pwd)
cd /
$TAR $TAR_ARGS -cvpf $TAPE $BACKUP_ROOT_DIR
$MT -f $TAPE rewind
$MT -f $TAPE offline
cd $old
}

# Make partial backup
partial_backup(){
local old=$(pwd)
cd /
$TAR $TAR_ARGS -cvpf $TAPE -N "$(date -d '2 days ago')" $BACKUP_ROOT_DIR
$MT -f $TAPE rewind
$MT -f $TAPE offline
cd $old
}

# Make sure all dirs exists
verify_backup_dirs(){
local s=0
for d in $BACKUP_ROOT_DIR
do
if [ ! -d /$d ];
then
echo "Error : /$d directory does not exists"
s=1
fi
done
# if not; just die
[ $s -eq 1 ] && exit 1
}

#### Main logic ####

# Make sure log dir exists
[ ! -d $LOGBASE ] && $MKDIR -p $LOGBASE

# Verify dirs
verify_backup_dirs

# Actual backup starts here
# Fullbackup on weekends
# Partial backup on Mon, Wed, Fri
case $NOW in
Sun) full_backup;;
Mon|Tue|Wed|Thu|Fri) partial_backup;;
*) ;;
esac > $LOGFILE 2>&1
нашел его в интернетах и пользуюсь фактически в неизменном виде. разве что здесь бэкап записывается на пленку (/dev/st0 и /bin/mt), а вам наверняка этого не нужно.
я думаю, с минимальными изменениями вы сможете адаптировать его под свои нужды.

Оффлайн Tesla

  • Активный пользователь
  • **
  • Сообщений: 66
-9 - наилучшая степень сжатия, можно опустить...

При упаковке в архиве лежат папки с путем  /var/www/siteName/, подскажите как сделать так чтобы в архиве были только файлы в папки siteName ?

использовать tar опцию
     -C, --directory DIR
           change to directory DIR

либо сначала использовать cd, а затем tar
cd /var/www/siteName

С переходом в конкретную папку понятно.

На счет
" -C, --directory DIR
change to directory DIR"
Напишите пожалуйста в контексте кода
 

Оффлайн Leo

Напишите пожалуйста в контексте кода
вероятно tar -C /var/www/siteName -czf backUp.tag.gz databaseName.sql files.tar или как там у вас...

Теги:
     

    [РЕШЕНО] Помогите склепать скрипт!

    Автор }{ronoTrigger

    Ответов: 14
    Просмотров: 3521
    Последний ответ 09 Июня 2014, 12:49:15
    от Alexey_F
    Помогите подправить скриптик

    Автор tierbbr

    Ответов: 5
    Просмотров: 2306
    Последний ответ 08 Июля 2012, 04:04:12
    от orlyanuch
    Помогите с скриптом

    Автор Grig96

    Ответов: 6
    Просмотров: 1576
    Последний ответ 06 Февраля 2017, 23:17:15
    от ZEN
    Помогите разобраться с Python скриптом

    Автор studio2

    Ответов: 16
    Просмотров: 3878
    Последний ответ 29 Января 2016, 19:00:35
    от vic5710
    Помогите написать скрипт

    Автор MkZ

    Ответов: 3
    Просмотров: 2023
    Последний ответ 23 Января 2014, 21:46:24
    от Malaheenee