XenForo. Как сделать бэкап форума (базы данных и файлов)

  • Автор темы SOUL
  • Дата создания

SOUL

Создатель
Сообщения
7 920
Репутация
11 253
Баллы
266
Здесь я предлагаю ознакомиться с видео, в котором без спешки и в мельчайших подробностях рассказывается, как правильно сделать бэкап форума.




Пожалуйста, Войдите или Зарегистрируйтесь для просмотра скрытого текста.

Sypex Dumper из видео.
 
Последнее редактирование:

SrDEN

Местный
Сообщения
115
Репутация
109
Баллы
43
На форуме схожей тематики уже подобное выкладывал, думаю и тут будет полезно :)


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

Код:
#!/bin/sh

doc_root=/home/x/xenforo/dirsite
name=backup_`date +\%Y\%m\%d`

dbconn=$doc_root/public_html/library/config.php

readcfg() {
   grep $1 $dbconn | sed 's/.*"\(.*\)".*/\1/'
}

host1=`readcfg host`
username=`readcfg username`
password=`readcfg password`
database=`readcfg dbname`

utf=`grep 'BX_UTF' $dbconn | grep true`

if [ -z "$utf" ]; then
   charset=cp1251
else
   charset=utf8
fi

backup_dir=$doc_root/backup

if [ ! -e $backup_dir ]; then
   mkdir $backup_dir
fi

cd $doc_root &&
mysqldump -h$host1 -u$username -p$password --default-character-set=$charset $database > $backup_dir/$name.sql &&
tar -cf $backup_dir/$name.tar $backup_dir/$name.sql &&
rm $backup_dir/$name.sql &&
tar -rf $backup_dir/$name.tar --exclude '*backup/*' --exclude '*public_html/files/*' . &&
gzip -f -9 $backup_dir/$name.tar &&
find $backup_dir -ctime +15 -exec rm {} \; &&
echo OK && exit
echo Error
doc_root определяет рутовую директорию
name имя файла, в нашем случае будет backup+дата_создания
dbconn путь до файла с конфигом

Чтобы функция readcfg() сработала, надо чтоб в файле конфига данные для подключения были заключены в двойные кавычки. Пример:
Код:
$config['db']['host'] = "localhost";
$config['db']['port'] = "3306";
$config['db']['username'] = "xenforotest";
$config['db']['password'] = "m3g4^nebrutabelnyuPaSs";
$config['db']['dbname'] = "xenforobd";

Эта строчка отвечает за удаление бекапов созданных более 15 дней назад.
[INLINE]find $backup_dir -ctime +15 -exec rm {} \; &&[/INLINE]

После того как заменили все данные на свои сохраняете этот скрипт например как backup.sh, на директорию выше чем ваш сайт.
Например ваш сайт лежит тут: /home/x/xenforo/dirsite/public_html/<файлы сайта>
Скрипт будет находиться: /home/x/xenforo/dirsite/backup.sh
Бекапы будут сохранятся в: /home/x/xenforo/dirsite/backup/

Самому скрипту надо дать права 700, через SSH это делается так: chmod +x backup.sh

Теперь вы можете поставить данный скрипт на cron, либо запускать руками ./backup.sh

Ну и время от времени сохранять бекапы к себе на комп.
 

X-Oleg

Местный
Сообщения
588
Репутация
628
Баллы
93
Хороший скрипт, а его-бы доработать что-бы мог заливать на FTP куда-нить...

Вот например у кого VPS и панелька ISPManager там есть не плохой модуль "Резервного копирования", может заливать на фтп, а в новых версиях даже и инкрементный беккап делать, правда для базы лучше делать полный беккап раз в день на фтп, я себе так настроил...

Беккап хороший получается, пару-раз спасал !

Но я руками ещё периодически дублирую Sypex Dumper на всякий случай ! ;)
 

SrDEN

Местный
Сообщения
115
Репутация
109
Баллы
43
Протестировать сейчас не могу, но по идее должно сработать так:

Код:
rm $backup_d/ftp.log       
ftpuser='имя пользоватея FTP'
password='пароль'
ftpserver='адрес FTP'
BACKUP_FILE="$name.tar.gz"
ftp -n -v $ftpserver << EOF >> $backup_dir/ftp.log
Первая строка удаляет предыдущий лог выгрузки, далее идут данные для конекта к фтп серверу и название файла, который нужно загрузить. Ну и сама передача с логированием.
Кусок скрипта нужно поместить после гзипа архива.

P.S. завтра постараюсь протестировать и выложить окончательный вариант, если до этого смельчаков не найдется :)
 

SrDEN

Местный
Сообщения
115
Репутация
109
Баллы
43
В общем как обычно у меня бывает вечером, я додумываю, но не дописываю :) Вот полный скрипт, который доделан и работает:
Код:
#!/bin/sh
doc_root=/home/x/xenforo/dirsite
name=backup_`date +\%Y\%m\%d`

dbconn=$doc_root/public_html/library/config.php

readcfg() {
   grep $1 $dbconn | sed 's/.*"\(.*\)".*/\1/'
}

host1=`readcfg host`
username=`readcfg username`
password=`readcfg password`
database=`readcfg dbname`

utf=`grep 'BX_UTF' $dbconn | grep true`

if [ -z "$utf" ]; then
   charset=cp1251
else
   charset=utf8
fi

backup_dir=$doc_root/backup

if [ ! -e $backup_dir ]; then
   mkdir $backup_dir
fi

cd $doc_root &&
mysqldump -h$host1 -u$username -p$password --default-character-set=$charset $database > $backup_dir/$name.sql &&
tar -cf $backup_dir/$name.tar $backup_dir/$name.sql && 
rm $backup_dir/$name.sql &&
tar -rf $backup_dir/$name.tar --exclude '*backup/*' --exclude '*public_html/files/*' . &&
gzip -f -9 $backup_dir/$name.tar &&

rm $backup_dir/ftp.log
ftpuser='login_ftp_user'
password='pass_ftp_user'
ftpserver='127.0.0.1'
BACKUP_FILE="$name.tar.gz"
ftp -n -v $ftpserver << EOF >> $backup_dir/ftp.log
user $ftpuser $password
binary
put $backup_dir/$BACKUP_FILE $BACKUP_FILE
quit
EOF

find $backup_dir -ctime +10 -exec rm {} \; &&

echo OK && exit
echo Error
 

andrey

Пользователь
Сообщения
257
Репутация
34
Баллы
28
А нет ли, того же типа, но на php ?
 

SOUL

Создатель
Сообщения
7 920
Репутация
11 253
Баллы
266
Может, кому пригодится, во время переезда на сервер у меня не было бэкапа базы данных, сделанного с помощью Sypex Dumperа, поэтому импортировать БД надо было как-то иначе.
Через myadminphp не получалось, через несколько секунд вылетала ошибка.
В тех поддержке OVH мне посоветовали воспользоваться

Пожалуйста, Войдите или Зарегистрируйтесь для просмотра скрытого текста.

Именно с его помощью я импортировала базу данных при переезде на сервер.

А Lenci поделилась, что они используют mysqldump

Пожалуйста, Войдите или Зарегистрируйтесь для просмотра скрытого текста.

Надеюсь, это не секрет. :)
 

improvs

Проверенный
Сообщения
47
Репутация
6
Баллы
3
SOUL, отличное видео, не смотря на то что растянуто. Один раз посмотреть должен каждый
 

mario2011

Пользователь
Сообщения
26
Репутация
5
Баллы
3
Может кому пригодится: если будет ошибка при экспорте, ссылающаяся на index.php, нужно закомментировать строчку

Код:
@ignore_user_abort(1);
 
  • Мне нравится
Реакции: SOUL

post4ok

Пользователь
Сообщения
15
Репутация
2
Баллы
3
Всегда справлялся и без Sypex Dumper, и не было проблем никогда. Даже с большими БД. :)
 

SOUL

Создатель
Сообщения
7 920
Репутация
11 253
Баллы
266
post4ok, так подробней написал бы, что именно используешь для импорта/экспорта БД, если здесь не писали про этот инструмент. :)
 

post4ok

Пользователь
Сообщения
15
Репутация
2
Баллы
3
SOUL, так phpMyAdmin и использую для импорта/экспорта. Экспортирует нормально. А импорт больших БД можно сначала залить на хостинг во временную папку, а далее выбрать эту БД в phpMyAdmin и сама импортирует.
Сам сайт просто залить в zipe и нет проблем. Далее в конфиге поменять имена и пароль от БД. :)
 
  • Мне нравится
Реакции: SOUL

SOUL

Создатель
Сообщения
7 920
Репутация
11 253
Баллы
266
post4ok, через phpMyAdmin ни разу не удавалось импортировать базу данных, постоянно ограничение по допустимому размеру выбивает ошибку, а как это можно обойти, я так и не поняла. :(
 

post4ok

Пользователь
Сообщения
15
Репутация
2
Баллы
3
post4ok, через phpMyAdmin ни разу не удавалось импортировать базу данных, постоянно ограничение по допустимому размеру выбивает ошибку, а как это можно обойти, я так и не поняла. :(
Есть несколько путей. Зависит от используемого хостинга. Обычно хватает правки файла php.ini. У меня как VPS, так проблем совсем ноль.
Изменяем данные параметры:
upload_max_filesize = 100M
post_max_size = 100M
и в некоторых случаях:
max_execution_time = 360
max_input_time = 360
Первые параметры отвечают за размер. Вторые за время выполнения скрипта. Иногда, конечно, бывают и ещё проблемы с настройками. Но лучше, большие БД, объёмом более 200 мб. загружать, как говорил, другим методом: загружать БД в папку:
1.jpg

После загрузки можно выбрать БД, которая появится. В этом случае, менять php.ini не придётся. Соответственно, проблем при таком импорте - не возникнет. :)
 
  • Мне нравится
Реакции: SOUL

SOUL

Создатель
Сообщения
7 920
Репутация
11 253
Баллы
266
post4ok, ой, спасибо, ценная для меня информация, надо будет попробовать. :)
 

Lenchi

Местный
Сообщения
227
Репутация
263
Баллы
63
Не нужно бекапить и восстанавливаться через phpmyadmin - инструмент для работы с db плохо подходит для бекапов.
Если есть vds или выделенный сервер, жить нужно в unix-стайл: каждая программа должна выполнять одну задачу, но выполнять ее хорошо. Для создания бекапа базы, старый добрый mysqldump устроит в большинстве случаев; mysqldump'ом без проблемно таскали базы в десятки гб.
Если виртуальны хостинг - используем специализированный скрипт

Пожалуйста, Войдите или Зарегистрируйтесь для просмотра скрытого текста.

. Бесплатной версии хватит на все про все, а если нужно лечить кодировки, платная версия с промокодом NY2016 до 14 января подарит скидку 70% - это копейки в сравнении с функционалом.
 
  • Мне нравится
Реакции: SOUL

Nik@ll

Местный
Сообщения
105
Репутация
90
Баллы
28
Если виртуальны хостинг
На виртуальном хостинге рекомендую прибегать к помощи службы технической поддержки. Вменяемый хостер без проблем сдампит и зальет базу самостоятельно, используя системные утилиты.
Останется обязательно проверить что все в порядке и поблагодарить службу поддержки.
 
  • Мне нравится
Реакции: SOUL

SOUL

Создатель
Сообщения
7 920
Репутация
11 253
Баллы
266
Nik@ll, это в идеале, но из собственного опыта, не всегда удаётся переезжать по-человечески.

Например, из-за ЧП у хостера, когда на руках был бэкап, скаченный мной накануне через панель управления, который новый хостер просто-напросто не смог развернуть по причине того, что дамп был не совместим с версией Mysql, которая у них использовалась.

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

Опыт бесценная штука. :)
 
Сверху Снизу