Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток.
Создал два скрипта для создания backup и для его закачки. Все отработало норм. Теперь. нужно усложнить задачу поставить шифрование. Тут и проблема.
первый скрипт:
#!/bin/bash
rm -r /root/dumpdb/*
xtrabackup \
--defaults-file=/etc/mysql/my.cnf \
--datadir=/var/lib/mysql \
--target-dir=/root/dumpdb \
--user=root \
--password="test" \
--compress-chunk-size=64K \
--compress-threads=2 \
--compress \
--encrypt=AES256 \
--encrypt-key="A1EDC73815467C083B0869508406637E" \
--backup
второй скрипт:
#!/bin/bash
xtrabackup \
--prepare \
--target-dir=/root/dumpdb/ \
--decrypt=AES256 \
--encrypt-key="A1EDC73815467C083B0869508406637E" \
--datadir=/var/lib/mysql
при вызове второго скрипта выдается ошибка:
Error: --decrypt and --apply-log are mutually exclusive
что означает что они являются взаимоисключающими. Но у меня не вызывается --apply-log, откуда он тут появился и что сделать нужно, чтобы все же второй скрипт отработал?
Неактивен
версия xtrabackup 2.4
Неактивен
Эта часть не полностью документирована и может содержать ошибки. См., например, здесь https://www.percona.com/blog/2014/11/03 … available/
Конфликт может быть с другой опцией. Выглядит как бага самого Xtrabackup или документации. Попробуйте сообщить на:
https://bugs.launchpad.net/percona-xtrabackup
Неактивен
И, так прошу помощи.
xtrabackup 2.4
Так же установил: aptitude install qpress
Мне нужно несколько скриптов.
А, именно:
1. Создать полный backup mysql c шифрованием и сжатием
2. Создать инкрементный backup определенной базы данных c шифрованием и сжатием . (не готов)
3. Создать инкрементный backup баз данных c шифрованием и сжатием, тех таблиц, которые изменились
4. Залить backup.
Помогите мне их испарить, чтобы они работали.
1. Создать полный backup mysql
#!/bin/bash
rm -r /root/full/*
LAST_LSN=$( cat /root/full/xtrabackup_checkpoints | grep to_lsn | cut -d'=' -f2)
xtrabackup \
--datadir=/var/lib/mysql \
--user=root \
--password="test" \
--target-dir=/root/full \
--compress \
--compress-threads=2 \
--encrypt=AES256 \
--encrypt-key-file=/root/backups.key \
--extra-lsndir=/root/lsns/ \
--backup
innobackupex \
--user=root \
--password="test" \
--stream=tar ./ | gzip - > /root/backup.tar.gz
3. Создать инкрементный backup баз данных, которые изменились
#!/bin/bash
rm -r /root/incr/*
cd /root/full/
for i in `find . -iname "*\.xbcrypt"`; do xbcrypt -d --encrypt-key-file=/root/backups.key \
--encrypt-algo=AES256 < $i > $(dirname $i)/$(basename $i .xbcrypt) && rm $i; done
for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done
LAST_LSN=$(cat /root/lsns/xtrabackup_checkpoints | grep to_lsn | cut -d'=' -f2)
xtrabackup \
--backup \
--target-dir=/root/incr \
--incremental-basedir=/root/full/ \
--databases-file=/root/bases.list \
--user=root \
--password="test" \
--extra-lsndir=/root/lsns/ \
--incremental-lsn $LAST_LSN
xtrabackup \
--prepare \
--apply-log-only \
--target-dir=/root/full \
--extra-lsndir=/root/lsns/ \
--incremental-lsn $LAST_LSN
cd /root/full/
for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done
xtrabackup \
--target-dir=/root/incr \
--incremental-basedir=/root/full \
--extra-lsndir=/root/lsns/ \
--incremental-lsn $LAST_LSN \
--prepare
================================
Запуск полного бэкапа ОК.
du -s ./*
13748 ./full
4 ./incr
изменяем значение в таблице в mysql
запуск инкрементного обновления(второй скрипт) ОК.
Вывод на экране:
xtrabackup: error: The transaction log file is corrupted.
xtrabackup: error: The log was not applied to the intended LSN!
xtrabackup: Log applied to lsn 0
xtrabackup: The intended lsn is 3371094422
======================
du -s ./*
21944 ./full
30920 ./incr
как объединить полный backup and incremental backup? при этом чтобы сжатие и шифрование было.
Неактивен
1. С xtrabackup самое главное правило — никогда не запускать xtrabackup. Это не шутка. Используйте innobackupex. Это убережет Вас от большого количества проблем.
2. Никогда не делайте rm до того, как сделали успешный бэкап. Это убережет Вас от большого количества проблем.
3. Как правило, Вы не хотите дополнительных наворотов в виде сжатия и шифрования. Не используйте сжатие, потому что вы постоянно то пакуете, то распаковываете — по месту никакого выигрыша (распаковываете), а время ест. Не используйте шифрование, потому что это не дает никакой пользы — ключ лежит на той же ФС. Если переживаете про то, что кто-то придет и прочитает данные, просто проставьте соответствующие права на файлики. Ну или шифруйте при доставке данных на сервер бэкапов. Все это убережет Вас от большого количества проблем.
3. Прочитайте документацию и сделайте так, как там написано. Это убережет Вас от большого количества проблем ;-)
Неактивен
Хорошо, помогите тогда разобраться с innobackupex.
Скрипт полного backup
Неактивен
А зачем вы делате два раза
innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back /root/dumpdb
(особенно после старта демона)?
И не увидел в скрипте apply-log без --redo-only (должен быть на последнем куске инкрементального бэкапа).
В остальном, кажется, ок. Если база читает из /var/lib/mysql, то должно завестись.
Неактивен
Да, это видимо, какой-то баг mysql был. Почему-то удалились значения из оригинала. Нужно разобраться в этом. А, так после внесения повторно значений все сохранилось.
Второй раз запускаю innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back /root/dumpd потому, что это на всех сайтах описывается и на оф. странице. Что у них не создается файл логов и для этого нужно вот такой костыль делать.
По поводу инкрементального, то я вообще еще не разобрался, как он делается. У меня только полный делается и в конце него я еще раз прогоняю innobackupex вместе с --apply-log --redo-only . Я так понимаю, нужно еще и без --redo-only прогнать один раз?
А, вот по поводу инкрементального, тут вопрос. Допустим мне нужно создать инкрементальное обновление и соединить его с основным, как это делается?
я попробовал сделать по инструкции и вот, что вышло!
#!/bin/bash
#incremental backup
LAST_LSN=$(cat /root/backup/lsns/xtrabackup_checkpoints | grep to_lsn | cut -d'=' -f2)
rm -r /root/backup/inc/*
innobackupex \
--defaults-file=/etc/mysql/my.cnf \
--incremental \
--user=root \
--password=test \
--incremental-lsn $LAST_LSN \
--no-timestamp \
/root/backup/full \
--incremental-basedir=/root/backup/inc
du -sh ./*
=============
Так же пришлось дописать в каждый innobackupex в full backups по одной строчке: --extra-lsndir=/root/backup/lsns/ \
Ошибки после запуска:
++++++++++++++
innobackupex: Can't create/write to file '/root/backup/full/xtrabackup_logfile' (Errcode: 17 - File exists)
xtrabackup: error: failed to open the target stream for 'xtrabackup_logfile'.
++++++++++++++
Неактивен
Про второй раз copyback — покажите, пожалуйста, где так делают. С моей точки зрения Вы перезаписываете файлы после запуска демона, т.е. делаете файлы битыми.
Про инкрементальный бэкап — бэкап делается в отдельный каталог, а потом изменения применяются к основному. В данном случае Вы, кажется, перепутали местами каталоги.
Неактивен
https://habrahabr.ru/company/centosadmin/blog/229731/
Вырезка:
"
xtrabackup --prepare --target-dir=/var/lib/mysql-xtra/ --datadir=/var/lib/mysql
Команду восстановления данных нужно выполнить дважды, после чего будут созданы лог файлы для MySQL. После этого нужно скопировать лог файл и файл данных в папку MySQL (по умолчанию — /var/lib/mysql)."
Моя ошибка, это относится исключительно к xtrabackup
Так, что в моем случае можно обойтись одной копией.
По поводу, того что перепутал каталоги.
Если сделать вместо:
innobackupex --incremental --user=root --no-timestamp --password=test /root/backup/inc --incremental-basedir=/root/backup/full
написать
innobackupex --incremental --user=root --no-timestamp --password=test /root/backup/full --incremental-basedir=/root/backup/inc
то выдаст:
160307 16:21:09 innobackupex: Starting the backup operation
IMPORTANT: Please check that the backup run completes successfully.
At the end of a successful backup run innobackupex
prints "completed OK!".
xtrabackup: Error: cannot open /root/backup/inc/xtrabackup_checkpoints
xtrabackup: error: failed to read metadata from /root/backup/inc/xtrabackup_checkpoints
Неактивен
А, если оставить первый вариант, то все ОК и вот что будет в папке inc:
du -sh inc/*
4.0K inc/backup-my.cnf
16K inc/ibdata1.delta
4.0K inc/ibdata1.meta
860K inc/mysql
220K inc/performance_schema
36K inc/user
4.0K inc/xtrabackup_binlog_info
4.0K inc/xtrabackup_checkpoints
4.0K inc/xtrabackup_info
4.0K inc/xtrabackup_logfile
=============
А, вот содержимое папки full
du -sh full/*
4.0K full/backup-my.cnf
76M full/ibdata1
48M full/ib_logfile0
48M full/ib_logfile1
12M full/ibtmp1
1.1M full/mysql
220K full/performance_schema
128K full/user
4.0K full/xtrabackup_binlog_info
4.0K full/xtrabackup_binlog_pos_innodb
4.0K full/xtrabackup_checkpoints
4.0K full/xtrabackup_galera_info
4.0K full/xtrabackup_info
8.0M full/xtrabackup_logfile
Неактивен
Можете прислать мне рабочий скрипт инкрементного backup?
Неактивен
Пытаюсь сравнить команды из http://sqlinfo.ru/forum/viewtopic.php?pid=42677#p42677 и http://sqlinfo.ru/forum/viewtopic.php?pid=42680#p42680 . Во втором случае Вы пишете правильно, в первом случае была, видимо, ошибка, и ровно поэтому не работало. В остальном скрипт правильный
Неактивен
Не пойму о чем вы говорите. В первом и втором посте один и тот же скрипт (разница только в добавлении строчек --defaults-file=/etc/mysql/my.cnf и --incremental-lsn $LAST_LSN), так же там есть еще один не рабочий скрипт, а именно innobackupex --incremental --user=root --no-timestamp --password=test /root/backup/full --incremental-basedir=/root/backup/inc он выдает ошибку. Так, про какой скрипт вы говорите?
Неактивен
Вот у меня такое ощущение, что на этом форуме ни кто вообще не пользуется инкрементным обновлением, что не могут дать свой скприпт(вырезку из него) или помочь мне поправить мой скрипт. Прям не верится, что ни кто не использует его. Ведь полный backup делать не рационально, если база большая. А, особенно если есть базы, таблицы, которые нужно, чуть ли не каждый час бекапить ))
Вот нашел ссылку, там разбирается пример. Убрал все лишнее и вот что сделал.
http://wiki.bitel.ru/index.php/Simple_DB_backup
В конце статьи идет скрипт. У него работает у меня нет. Не могу понять в чем причина.
============
#!/bin/bash
rm -rf /var/bgb ;
mkdir /var/bgb
mkdir /var/bgb/0
mkdir /var/bgb/1
mysql -ptest -uroot -e "use user;update profile set email='testold' where id=1;"
mysql -ptest -uroot -e "use user; select id, email from profile;"
sleep 2s
innobackupex --no-lock --no-timestamp --user=root --password=test /var/bgb/0
innobackupex --apply-log --redo-only --user=root --password=test /var/bgb/0
mysql -ptest -uroot -e "use user;update profile set email='testnew' where id=1;"
mysql -ptest -uroot -e "use user; select id, email from profile;"
sleep 2s
innobackupex --no-lock --no-timestamp --user=root --password=test --incremental /var/bgb/1 --incremental-basedir=/var/bgb/0
innobackupex --apply-log --redo-only --user=root --password=test /var/bgb/0 --incremental-dir=/var/bgb/1
innobackupex --apply-log --user=root --password=test /var/bgb/0 --incremental-dir=/var/bgb/1
innobackupex --apply-log --user=root --password=test /var/bgb/0
================
в базе сохраняется значение testold, а должно быть testnew
Неактивен
В тех двух постах команды отличаются. Ну, правда. Есть разница между каталогом резервной копии и incremental-basedir. Во втором посте они написаны в проавильном порядке.
Инкрементальными бэкапами и правда никто не пользуется: у них больше недостатков, чем кажется (например, медленное восстановление), но документацию никто не отменял
У меня такое чувство, что Вы просто копируете разные команды с сайтов в надежде, что подойдет
Но ок, не поленился, выполнил. Вот такая последовательность у меня сработала. Боюсь, что подробнее, чем подписать все строки, не получится:
Неактивен
ООО, Большое вам спасибо! ))) Есть же люди на земле! )) Теперь буду анализировать свои ошибки.
Неактивен