Офф страничка https://www.opennet.ru/dev/fsbackup/
Скачиваем, распаковываем, устанавливаем:
1 2 3 4 5 |
cd /tmp wget https://www.opennet.ru/dev/fsbackup/src/fsbackup-1.2pl2.tar.gz tar -xvzf ./fsbackup-1.2pl2.tar.gz cd fsbackup-1.2pl2 ./install.pl |
На centos 7 возникает ошибка при установке:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Checking for module Digest::MD5.pm... Unpcking archive Digest-MD5-2.13.tar.gz.. Installing module Digest::MD5.pm.. Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 4. BEGIN failed--compilation aborted at Makefile.PL line 4. make: *** No targets specified and no makefile found. Stop. make: *** No rule to make target `install'. Stop. Installation of module Digest::MD5.pm successfully complete. Checking for module DB_File.pm... Unpcking archive DB_File-1.77.tar.gz.. Installing module DB_File.pm.. Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3. BEGIN failed--compilation aborted at Makefile.PL line 3. make: *** No targets specified and no makefile found. Stop. make: *** No rule to make target `install'. Stop. Installation of module DB_File.pm successfully complete. |
Установим пакет
1 2 |
yum install perl-devel yum install perl-DB_File |
На бекапном сервере, если данные будут передаваться по ftp рекомендуется создать в системе пользователя и всех последующих пользователей ftp помещать в группу:
1 2 |
adduser fsbackup id fsbackup |
Запоминаем данные пользователя uid и gid и используем их при добавление пользователей ftp:
1 |
./ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=USERNAME --uid=XX --gid=XX --home=/var/www/ --shell=/bin/false && chmod o-rwx /etc/proftpd/ftpd.passwd |
На бекапном сервере для бекапного каталога выполняем:
1 |
chown -R fsbackup:fsbackup /storage |
Переименовываем файлы:
1 2 3 4 |
mv /usr/local/fsbackup/cfg_example /usr/local/fsbackup/cfg_$(cat /etc/hostname) mv /usr/local/fsbackup/cfg_example_local /usr/local/fsbackup/cfg_$(cat /etc/hostname)_local mv /usr/local/fsbackup/cfg_example_root /usr/local/fsbackup/cfg_$(cat /etc/hostname)_root mv /usr/local/fsbackup/cfg_example_users /usr/local/fsbackup/cfg_$(cat /etc/hostname)_users |
Изменяем их привязки в конфиг файле:
1 2 |
nano create_backup.sh config_files="cfg_hn_name cfg_hn_name_local cfg_hn_name_users cfg_hn_name_root" |
Обычно удаляем конфиги:
/usr/local/fsbackup/cfg_example_local
/usr/local/fsbackup/cfg_example_root
/usr/local/fsbackup/cfg_example_users
переименовывая только 1-й в нужный нам и только его подключаем в конфиге create_backup.sh в секции config_files=»cfg_hn_name»
Если настраиваеи на Linux тогда обязательно исправить файл create_backup.sh строку содержищую:
1 |
IDLE=`ps -auxwww | grep fsbackup.pl | grep -v grep` |
убрать в ней «-» перед auxwww, чтобы был следующий вид:
1 |
IDLE=`ps auxwww | grep fsbackup.pl | grep -v grep` |
иначе будет ошибка следующего вида:
Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ
Добавляем к cron, crontab -e
1 |
00 00 * * * /usr/local/fsbackup/create_backup.sh | mail -s"`uname -n` backup report" your@e-mail |
Редактируем файл cfg_hn_name
Проверяем значение переменной, в ней задает имя файлов с бекапами:
1 |
$cfg_backup_name = "hn_name" |
Переменная позволяет задать место хранения бекапов — local, remote_ssh, remote_ftp
1 |
$cfg_type = "remote_ftp"; |
и конфигурируем параметры в следующих переменных:
1 2 3 |
$cfg_remote_host = "backup-server.test.ru"; $cfg_remote_login = "backup_login"; $cfg_remote_path = "/home/backup_login/backup"; |
Наш ftp сервер находится за NAT’ом, поэтому выставляем следующую переменную в 1:
1 |
$cfg_remote_ftp_mode = 1; |
Не забываем задать пароль для FTP пользователя:
1 |
$cfg_remote_password = "Test1234"; |
И поправить каталоги, которые попадут в бекап, к примеру вот так:
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 |
# System configuration /etc /var/cron/tabs /var/spool/cron /var/lib /var/log /usr/local/etc # Installed packages /usr/local/bin /usr/local/include /usr/local/lib /usr/local/libdata /usr/local/libexec /usr/local/sbin /usr/local/share /var/ucd-snmp # Programs from source /usr/local/apache/bin /usr/local/apache/conf /usr/local/apache/cgi-bin /usr/local/apache/htdocs /usr/local/apache/libexec /usr/local/apache/src /usr/local/www /usr/local/mysql/bin /usr/local/mysql/include /usr/local/mysql/lib /usr/local/mysql/libexec /usr/local/mysql/var/mysql /usr/local/pgsql/bin /usr/local/pgsql/share /usr/local/pgsql/lib /usr/local/pgsql/include /usr/local/pgsql/data !/usr/local/pgsql/data/base !/usr/local/pgsql/data/pg_xlog /usr/local/squid/bin /usr/local/squid/etc /usr/local/news/etc /usr/local/news/bin /usr/local/news/lib /usr/local/samba/bin /usr/local/samba/lib #config_for_backup_all_nodes /data/vz/template /data/vz/private/102 /data/vz/private/103 /data/vz/private/108 |
Бекапим mysql с помошью встроенного в fsbackup скрипта /scripts/mysql_backup.sh
В основном конфиге create_backup.sh изменить значение переменной:
1 |
backup_mysql=1 |
Далее правим
1 |
nano ./scripts/mysql_backup.sh |
Задаем:
1 |
backup_name="zabbix_mysql" |
Выбираем метод формирования дампа в переменной:
1 |
backup_method="full" |
Задаем имя пользователя и пароль под которым будем делать бекап:
1 2 |
backup_mysqluser="" backup_mysqlpassword="" |
Указать каталог, где лежит bin’арник mysqldump
1 |
backup_progdump_path="/usr/bin/" |
Указываем следующие флаги в переменной:
1 |
extra_mysqldump_flag="--all-databases --add-drop-table --force -ceqQ --single-transaction --allow-keywords --skip-lock-tables --ignore-table=mysql.event" |
Заменим первый блок if где вызывается метод full бекапа:
удаляем:
1 2 3 4 5 6 |
if [ "_$backup_method" = "_full" ]; then echo "Creating full backup of all MySQL databases." ${backup_progdump_path}mysqldump --all --add-drop-table --all-databases --force --no-data $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-struct-mysql ${backup_progdump_path}mysqldump --all-databases --all --add-drop-table --force $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser |gzip > $backup_path/$backup_name-mysql.gz exit fi |
вставляем:
1 2 3 4 5 6 |
if [ "_$backup_method" = "_full" ]; then echo "Creating full backup of all MySQL databases." ${backup_progdump_path}mysqldump -h10.0.0.102 --no-data $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-struct-mysql ${backup_progdump_path}mysqldump -h10.0.0.102 $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-mysql.sql exit fi |
Где 10.0.0.102 IP машины к которой будем подключатся, чтобы забрать с нее mysqldump, актуального когда скрипт выполняющий бекапы находится на HN, а mysql БД которую надо забекапить на одном из виртуальных серверов текущего сервера.
Проверки, с HN должно проходить подключение во внутрь контейнера, пример успешного подключения:
1 2 3 4 5 6 |
[root@]# telnet 88.xx.xx.25 3306 Trying 88.xx.xx.25... Connected to 88.xx.xx.25. Escape character is '^]'. R 5.5.52-MariaDB9�n~PR,#i�XZ=^DxQlLt(emysql_native_password |
Иные выводы сообщают об ошибке:
- проверить правила firewall внутри контейнера (разрешить iptables -A INPUT -p tcp -m tcp —dport 3306 -m state —state NEW,ESTABLISHED -j ACCEPT)
- убедится, что существует хотя бы один пользователь mysql который слушает не только localhost, а и %. Если нет создать такого пользователя
Если необходимо выполнять бекапы mysql баз данных для каждой базы отдельно, можно модифицировать скрипт /usr/local/fsbackup/scripts/mysql_backup.sh
добавить следующий блок вначале:
1 2 3 4 5 6 |
TIMESTAMP=$(date +"%F") BACKUP_DIR="/usr/local/fsbackup/sys_backup/$TIMESTAMP" MYSQL_USER="user_name" MYSQL=/usr/bin/mysql MYSQL_PASSWORD="password" MYSQLDUMP=/usr/bin/mysqldump |
выбрать метод db
1 |
backup_method="db" |
и в цикле, выполняющем метод дампа db:
1 2 3 4 5 6 |
if [ "_$backup_method" = "_db" ]; then ... ... ... exit fi |
заменить на
1 2 3 4 5 6 7 8 9 |
if [ "_$backup_method" = "_db" ]; then mkdir $BACKUP_DIR databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"` for db in $databases; do $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db > "$BACKUP_DIR/$db.sql" done exit fi |
Последнюю версию FSBACKUP, как я понимаю, нужно скачивать отсюда: https://github.com/opennet/FSBackup
Можно и отсюда.