Online video hd

Смотреть узб видео

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

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

solomenikm 15.07.2010 16:58

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

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

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

Для работы скрипта необходимо установить sshpass и rsync. Установка на ubuntu:
1
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


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

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

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


Тэги: backup mysql rsync server
+ 1 -
Похожие Поделиться

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

Дополнение. Для таких велосипедов лучше взять Fabric например.
exelens 15.07.2010 18:39 #
+ 0 -
Чем лучше?
wiz 15.07.2010 20:30 #
+ 1 -
Код не будет глаза разъедать. Как минимум. Смотрите примеры и всё поймёте.
kstep 15.07.2010 18:46 #
+ 0 -
Ничем.
solomenikm 15.07.2010 17:56 #
+ 0 -
Да вроде ни чем. По-большому счету это не система бэкапа, а простой скрип для копирование того что нужно с сервера на локальную машину. Я простых и универсальных способов бэкапа не нашел (хотя и не сильно заморачивался). Мне нужен был именно скрипт и именно копирования данных. Я его написал и решил поделиться.
Fabric - можно подробнее?
exelens 15.07.2010 18:38 #
+ 0 -
Отвечай не в топик а в комменты.
У коммента ведь есть кнопочка "Ответить"
kstep 15.07.2010 18:47 #
+ -1 -
Предлагаю сделать кнопку «Ответить» у постов побольше, а то её никто не видит.
ner_uto 16.07.2010 01:25 #
+ 0 -
Лучше "Ответить" к коменту заменить на "Ответить на комментарий"
solomenikm 15.07.2010 19:20 #
+ 0 -
Нажал на нужную кнопку. Сам удивился что ответил в топик.
wiz 15.07.2010 20:31 #
+ 2 -
http://docs.fabfile.org/0.9.1/tutorial.html
xT 16.07.2010 06:48 #
+ 1 -
Можно запускать команды удаленно, без всяких скриптов-помощников
wilful 16.07.2010 08:01 #
+ -3 -
Очередной говно-код
exelens 16.07.2010 08:55 #
+ 1 -
Что в этом скрипте плохо?
Ты можешь написать лучше?
Напишешь может топик в стиле - как нужно и как ненужно писать скрипт?
wilful 16.07.2010 09:07 #
+ 1 -
1. Всё (if ... then ...)
2. Да
3. Да
exelens 16.07.2010 09:29 #
+ 2 -
3. Да

Ждём =)

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

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

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

Смотреть онлайн бесплатно

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


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

Online video HD

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

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

Full HD video online

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

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

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