Видео ролики бесплатно онлайн

Смотреть жесткий видео

Официальный сайт ruskorinfo 24/7/365

Смотреть видео бесплатно

15.07.10 16:58 solomenikm

How-to`sНе совсем backup сервера

Хочу поделиться скриптом который делает "не совсем backup" сервера (apache+php+mysql), вполне подходит для копирования всего нужного с сервера на локальную машину для последуюго востановления.

Этот пост - развитие моего предыдущего поста на эту тему. Ярик, спецом для тебя:*

Для работы скрипта необходимо установить sshpass и rsync. Установка на ubuntu:
sudo aptitude install sshpass rsync


Краткое описание: В скрипте есть переменные, их нужно править под себя. После запуска скрипта у вас в каталоге $LOCAL_BACKUP_DIR (в моем случаи это ~/backup/server) на домашнем компьютере появиться копия всего что вам нужно для восстановления сервера в случаи беды. Структура каталогов будет точна такая же как и на сервере, поэтому если что - "copy->replace all" сработает на ура. Плюс будет дополнительная папочка с дампами баз REMOTE_DB_DUMPS (в моем случаи она будет находиться в ~/backup/server/var/backup/mysql). Чтобы были дампы баз, на сервер нужно будет залить второй скрип по адресу /var/bash/backup.sh

Сами скрипты.
Главный скрипт:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/bin/bash

### Править обязательно ###
REMOTE_USER=root # root пользователь сервера
REMOTE_PASS=****** # root пароль сервера
REMOTE_HOST=localhost # адрес сервера
REMOTE_PORT=2222 # порт сервера
REMOTE_DB_USER=root # Пользователь базы
REMOTE_DB_PASS=***** # Пароль к базе

### Править по желанию ###
LOCAL_BACKUP_DIR=~/backup/server # Backup-папка

### Лучше не трогать (адреса на сервере) ###
REMOTE_MYSQL_DIR=/var/lib/mysql # папка с базами
REMOTE_DB_DUMPS=/var/backup/mysql # папка в которой будут храниться дампы баз
REMOTE_WWW_DIR=/var/www # папка www
REMOTE_CONFIG_APACHE_DIR=/etc/apache2 # папка конфига apache
REMOTE_CONFIG_MYSQL_DIR=/etc/mysql # папка конфига mysql
REMOTE_CONFIG_PHP_DIR=/etc/php5 # папка конфига php
REMOTE_TEMP_BACKUP_DIR=/var/temp/backup/mysql # Временная папка для копии баз данных

### Имена баз данных (не больше четырех в ряд, если больше - будет глючить) ###
DB="db1 db2 db3 db4"
DB2="db5 db6 "


##################
### Сам скрипт ###
##################

mkdir -p $LOCAL_BACKUP_DIR # Если Backup-папки нет - создаем

### Делаем hotcopy для DB ###
sshpass -p $REMOTE_PASS ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "
mkdir -p $REMOTE_TEMP_BACKUP_DIR
mysqlhotcopy --user=$REMOTE_DB_USER --password=$REMOTE_DB_PASS $DB $REMOTE_TEMP_BACKUP_DIR
"

### Делаем hotcopy для DB2 ###
sshpass -p $REMOTE_PASS ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "
mkdir -p $REMOTE_TEMP_BACKUP_DIR
mysqlhotcopy --user=$REMOTE_DB_USER --password=$REMOTE_DB_PASS $DB2 $REMOTE_TEMP_BACKUP_DIR
"

### Копируем временную папку содержащую hotcopy баз ###
mkdir -p $LOCAL_BACKUP_DIR$REMOTE_MYSQL_DIR
rsync -e "sshpass -p $REMOTE_PASS ssh -p$REMOTE_PORT" --progress --archive --delete-after --verbose $REMOTE_USER@$REMOTE_HOST:/$REMOTE_TEMP_BACKUP_DIR/ $LOCAL_BACKUP_DIR$REMOTE_MYSQL_DIR
sshpass -p $REMOTE_PASS ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "rm -r $REMOTE_TEMP_BACKUP_DIR"

### Копируем www ###
mkdir -p $LOCAL_BACKUP_DIR$REMOTE_WWW_DIR
rsync -e "sshpass -p $REMOTE_PASS ssh -p$REMOTE_PORT" --progress --archive --delete-after --verbose $REMOTE_USER@$REMOTE_HOST:/$REMOTE_WWW_DIR/ $LOCAL_BACKUP_DIR$REMOTE_WWW_DIR

### Копируем конфиги apache ###
mkdir -p $LOCAL_BACKUP_DIR$REMOTE_CONFIG_APACHE_DIR
rsync -e "sshpass -p $REMOTE_PASS ssh -p$REMOTE_PORT" --progress --archive --delete-after --verbose $REMOTE_USER@$REMOTE_HOST:/$REMOTE_CONFIG_APACHE_DIR/ $LOCAL_BACKUP_DIR$REMOTE_CONFIG_APACHE_DIR

### Копируем конфиги mysql ###
mkdir -p $LOCAL_BACKUP_DIR$REMOTE_CONFIG_MYSQL_DIR
rsync -e "sshpass -p $REMOTE_PASS ssh -p$REMOTE_PORT" --progress --archive --delete-after --verbose $REMOTE_USER@$REMOTE_HOST:/$REMOTE_CONFIG_MYSQL_DIR/ $LOCAL_BACKUP_DIR$REMOTE_CONFIG_MYSQL_DIR

### Копируем конфиги php ###
mkdir -p $LOCAL_BACKUP_DIR$REMOTE_CONFIG_PHP_DIR
rsync -e "sshpass -p $REMOTE_PASS ssh -p$REMOTE_PORT" --progress --archive --delete-after --verbose $REMOTE_USER@$REMOTE_HOST:/$REMOTE_CONFIG_PHP_DIR/ $LOCAL_BACKUP_DIR$REMOTE_CONFIG_PHP_DIR

### Выполняем скрипт backup.sh на сервере который сделает нам дампы всех баз, затем копируем дампы в REMOTE_DB_DUMPS ###
sshpass -p $REMOTE_PASS ssh -p $REMOTE_PORT $REMOTE_USER@$REMOTE_HOST "bash /var/bash/backup.sh"
mkdir -p $LOCAL_BACKUP_DIR$REMOTE_DB_DUMPS
rsync -e "sshpass -p $REMOTE_PASS ssh -p$REMOTE_PORT" --progress --archive --delete-after --checksum   $REMOTE_USER@$REMOTE_HOST:/$REMOTE_DB_DUMPS/ $LOCAL_BACKUP_DIR$REMOTE_DB_DUMPS


Скрип-помошник, который на сервере должен быть по адресу /var/bash/backup.sh:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/sh

REMOTE_DB_USER=root # Пользователь базы
BACKUP_DIR=/var/backup/mysql # !!! Должна соответсвовать REMOTE_DB_DUMPS в основном скрипте

TIME_1=`date +%s`

DBS="$(mysql -u $REMOTE_DB_USER --password=****** -Bse 'show databases')" # не забудте заменить звездочки на пароль к базе. Как передать сюда переменную я не разобрался.

for db in ${DBS[@]}
do
echo ${db}-$(date +%m-%d-%y).sql.bz2 is being saved in $BACKUP_DIR
mkdir -p $BACKUP_DIR/${db}
mysqldump -u $REMOTE_DB_USER --password=****** $db --single-transaction -R | gzip  > $BACKUP_DIR/${db}/${db}-$(date +%m-%d-%y).sql.gz # и здесь про пароль не забыть.

done



Замечания.
Базы innodb рожей не вышли для mysqlhotcopy, но дампы с них будут нормальными.
Если мы скопируем все базы после hotcopy на сервер, то они не будут рабочими (проблема с правами). Я решаю это так:
1
2
aptitude purge mysql-server
aptitude install mysql-server

Эта комбинация команд правит права :)

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

Жду вопросы и дополнения.


Теги:

wiz 15.07.10 17:34 # +1
Вопрос. Чем это лучше существующих систем бэкапа?

Дополнение. Для таких велосипедов лучше взять Fabric например.
exelens 15.07.10 18:39 # +0
Чем лучше?
wiz 15.07.10 20:30 # +1
Код не будет глаза разъедать. Как минимум. Смотрите примеры и всё поймёте.
kstep 15.07.10 18:46 # +0
Ничем.
solomenikm 15.07.10 17:56 # +0
Да вроде ни чем. По-большому счету это не система бэкапа, а простой скрип для копирование того что нужно с сервера на локальную машину. Я простых и универсальных способов бэкапа не нашел (хотя и не сильно заморачивался). Мне нужен был именно скрипт и именно копирования данных. Я его написал и решил поделиться.
Fabric - можно подробнее?
exelens 15.07.10 18:38 # +0
Отвечай не в топик а в комменты.
У коммента ведь есть кнопочка "Ответить"
kstep 15.07.10 18:47 # +-1
Предлагаю сделать кнопку «Ответить» у постов побольше, а то её никто не видит.

%username% love BDSM!

solomenikm 15.07.10 19:20 # +0
Нажал на нужную кнопку. Сам удивился что ответил в топик.
wiz 15.07.10 20:31 # +2
http://docs.fabfile.org/0.9.1/tutorial.html
xT 16.07.10 06:48 # +1
Можно запускать команды удаленно, без всяких скриптов-помощников
wilful 16.07.10 08:01 # +-3
Очередной говно-код
exelens 16.07.10 08:55 # +1
Что в этом скрипте плохо?
Ты можешь написать лучше?
Напишешь может топик в стиле - как нужно и как ненужно писать скрипт?
wilful 16.07.10 09:07 # +1
1. Всё (if ... then ...)
2. Да
3. Да
exelens 16.07.10 09:29 # +2
3. Да

Ждём =)

На будущее. Пиши плиз развёрнутые топики. Не нужно писать утверждение в стиле Вы все мудаки. Это не конструктивно. ОК?
wilful 16.07.10 09:36 # +2
Я не личный тренер, пояснять и учить не собирался, написал свое мнение.
Тоже самое было тут
orkaan 16.07.10 14:40 # +1
Если человек хочет написать развернутый топик, он его напишет. А если ему есть что сказать по поводу Вашего, то воспринимайте критику вменяемо!

Скрипт неуниверсальный и неудобный абсолютно.

Да и, какбе, при чём там root?

Лучшие блоги (все 150)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Элита (все 2993 из 222 городов)
Топ пользователей Топ блогов
welinux.ru

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн