SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.02.2016 15:34:41

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

xtrabackup

Доброго времени суток.
Создал два скрипта для создания 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, откуда он тут появился и что сделать нужно, чтобы все же второй скрипт отработал?

Неактивен

 

#2 25.02.2016 16:17:35

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: xtrabackup

версия xtrabackup 2.4

Неактивен

 

#3 25.02.2016 17:23:31

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: xtrabackup

Эта часть не полностью документирована и может содержать ошибки. См., например, здесь https://www.percona.com/blog/2014/11/03 … available/
Конфликт может быть с другой опцией. Выглядит как бага самого Xtrabackup или документации. Попробуйте сообщить на:
https://bugs.launchpad.net/percona-xtrabackup

Неактивен

 

#4 29.02.2016 10:45:30

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: 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? при этом чтобы сжатие и шифрование было.

Неактивен

 

#5 29.02.2016 23:05:52

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: xtrabackup

1. С xtrabackup самое главное правило — никогда не запускать xtrabackup. Это не шутка. Используйте innobackupex. Это убережет Вас от большого количества проблем.

2. Никогда не делайте rm до того, как сделали успешный бэкап. Это убережет Вас от большого количества проблем.

3. Как правило, Вы не хотите дополнительных наворотов в виде сжатия и шифрования. Не используйте сжатие, потому что вы постоянно то пакуете, то распаковываете — по месту никакого выигрыша (распаковываете), а время ест. Не используйте шифрование, потому что это не дает никакой пользы — ключ лежит на той же ФС. Если переживаете про то, что кто-то придет и прочитает данные, просто проставьте соответствующие права на файлики. Ну или шифруйте при доставке данных на сервер бэкапов. Все это убережет Вас от большого количества проблем.

3. Прочитайте документацию и сделайте так, как там написано. Это убережет Вас от большого количества проблем ;-)

Неактивен

 

#6 06.03.2016 20:58:56

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: xtrabackup

Хорошо, помогите тогда разобраться с innobackupex.

Скрипт полного backup


#!/bin/bash

#create full backup
rm -r /root/backup/full/*

innobackupex \
--defaults-file=/etc/mysql/my.cnf \
--user=root \
--password=test \
--no-timestamp \
/root/backup/full/

innobackupex \
--apply-log \
--redo-only \
--user=root \
--password=test \
--use-memory=128M \
--no-timestamp \
/root/backup/full/


В консоли везде пишет ОК.
Копирую содержимое папки full на другую машину. И запускаю скрипт Закачки backup

#!/bin/bash
cd /root/dumpdb/

service mysql stop
rm -rf /var/lib/mysql/*

innobackupex --defaults-file=/etc/mysql/my.cnf  --copy-back  /root/dumpdb

chown mysql:mysql -R /var/lib/mysql
chmod 770 -R /var/lib/mysql
service mysql start

innobackupex --defaults-file=/etc/mysql/my.cnf  --copy-back  /root/dumpdb

rm -rf /root/dumpdb/*




В итоге, создается база вместе с таблицами. Но, в таблицах нет значений. Папка /var/lib/mysql весит столько же, сколько и оригинал. Что тут не так я делаю?

Неактивен

 

#7 07.03.2016 01:32:16

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: xtrabackup

А зачем вы делате два раза
innobackupex --defaults-file=/etc/mysql/my.cnf  --copy-back  /root/dumpdb
(особенно после старта демона)?
И не увидел в скрипте apply-log без --redo-only (должен быть на последнем куске инкрементального бэкапа).

В остальном, кажется, ок. Если база читает из /var/lib/mysql, то должно завестись.

Неактивен

 

#8 07.03.2016 11:03:06

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: xtrabackup

Да, это видимо, какой-то баг 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'.
++++++++++++++

Неактивен

 

#9 07.03.2016 16:04:56

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: xtrabackup

Про второй раз copyback — покажите, пожалуйста, где так делают. С моей точки зрения Вы перезаписываете файлы после запуска демона, т.е. делаете файлы битыми.

Про инкрементальный бэкап — бэкап делается в отдельный каталог, а потом изменения применяются к основному. В данном случае Вы, кажется, перепутали местами каталоги.

Неактивен

 

#10 07.03.2016 16:22:13

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: xtrabackup

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

Неактивен

 

#11 07.03.2016 16:24:21

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: xtrabackup

А, если оставить первый вариант, то все ОК и вот что будет в папке 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

Неактивен

 

#12 07.03.2016 16:26:13

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: xtrabackup

Можете прислать мне рабочий скрипт инкрементного backup?

Неактивен

 

#13 07.03.2016 16:40:45

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: xtrabackup

Пытаюсь сравнить команды из http://sqlinfo.ru/forum/viewtopic.php?pid=42677#p42677 и http://sqlinfo.ru/forum/viewtopic.php?pid=42680#p42680 . Во втором случае Вы пишете правильно, в первом случае была, видимо, ошибка, и ровно поэтому не работало. В остальном скрипт правильный smile

Неактивен

 

#14 07.03.2016 16:52:45

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: xtrabackup

Не пойму о чем вы говорите. В первом и втором посте один и тот же скрипт (разница только в добавлении строчек --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 он  выдает ошибку. Так, про какой скрипт вы говорите?

Неактивен

 

#15 07.03.2016 20:08:06

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: xtrabackup

Вот у меня такое ощущение, что на этом форуме ни кто вообще не пользуется инкрементным обновлением, что не могут дать свой скприпт(вырезку из него) или помочь мне поправить мой скрипт. Прям не верится, что ни кто не использует его. Ведь полный 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

Неактивен

 

#16 08.03.2016 17:25:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: xtrabackup

В тех двух постах команды отличаются. Ну, правда. Есть разница между каталогом резервной копии и incremental-basedir. Во втором посте они написаны в проавильном порядке.

Инкрементальными бэкапами и правда никто не пользуется: у них больше недостатков, чем кажется (например, медленное восстановление), но документацию никто не отменял smile

У меня такое чувство, что Вы просто копируете разные команды с сайтов в надежде, что подойдет sad

Но ок, не поленился, выполнил. Вот такая последовательность у меня сработала. Боюсь, что подробнее, чем подписать все строки, не получится:


# === Часть 1. Бэкап ===

# Делаем первичный бэкап (полный)
innobackupex --no-timestamp /opt/backup/1

# Убеждаемся, что записана единица
mysql -e 'select * from foo' test

# Обновляем данные и убеждаемся, что теперь двойка (в бэкапе — единица)
mysql -e 'update foo set a = 2' test
mysql -e 'select * from foo' test

# Делаем инкрементный бэкап
innobackupex --no-timestamp /opt/backup/2 --incremental --incremental-basedir=/opt/backup/1

# Проверяем, что он инкрементный. У меня было 15 и 2 мегабайта, соответственно
du -sh /opt/backup/{1,2}


# === Часть 2. Восстановление. ===

# Проигрываем логи в полном бэкапе
innobackupex --apply-log --redo-only /opt/backup/1

# Проигрываем логи в инкрементном бэкапе, накатывая их на полный
innobackupex --apply-log --redo-only /opt/backup/1 --incremental-dir=/opt/backup/2

# Откатываем undo-логи в полном бэкапе
innobackupex --apply-log /opt/backup/1

# Восстанавливаем получившийся бэкап
/etc/init.d/mysql stop
rm -R /var/lib/mysql/
mv /opt/backup/1 /var/lib/mysql
chown -R mysql.mysql /var/lib/mysql
/etc/init.d/mysql  start

# Убеждаемся, что там двойка
mysql -e 'select * from foo' test

Неактивен

 

#17 09.03.2016 10:00:31

saifuddin
Завсегдатай
Зарегистрирован: 09.11.2015
Сообщений: 76

Re: xtrabackup

ООО, Большое вам спасибо! ))) Есть же люди на земле! )) Теперь буду анализировать свои ошибки.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson