Я пытаюсь использовать mydumper для создания дампа моих баз данных mysql, который я мог бы использовать для восстановления баз данных позже в случае аварии.
Однако это просто не работает. Я использую эту командную строку:
mydumper --user remote-backup --password ******
Она выводит только сообщение Segmentation fault
после задержки примерно в 1 секунду.
Я установил его с помощью apt install mydumper
на машине с debian 8.5 (jessie), на которой был установлен mydumper 0.6.1, построенный на базе MySQL 5.5.35
. Я использую mysqld Ver 5.7.14 для Linux на i686 (MySQL Community Server (GPL))
. Нужно ли мне пересобрать mydumper для mysql 5.7?
Вот след от gdb:
(gdb) run
Starting program: /usr/bin/mydumper --user remote-backup --password ******
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/i686/cmov/libthread_db.so.1".
[New Thread 0xb77aab40 (LWP 3189)]
[Thread 0xb77aab40 (LWP 3189) exited]
[New Thread 0xb77aab40 (LWP 3190)]
[New Thread 0xb6dffb40 (LWP 3191)]
[New Thread 0xb63ffb40 (LWP 3192)]
[New Thread 0xb5bfeb40 (LWP 3194)]
Program received signal SIGSEGV, Segmentation fault.
0xb7912bf8 in __GI_____strtoull_l_internal (nptr=nptr@entry=0x0,
endptr=endptr@entry=0x0, base=base@entry=10, group=group@entry=0,
loc=loc@entry=0xb7a87400 <_nl_C_locobj>) at ./strtol_l.c:298
298 ./strtol_l.c: No such file or directory.
(gdb) backtrace
#0 0xb7912bf8 in __GI_____strtoull_l_internal (nptr=nptr@entry=0x0,
endptr=endptr@entry=0x0, base=base@entry=10, group=group@entry=0,
loc=loc@entry=0xb7a87400 <_nl_C_locobj>) at ./strtol_l.c:298
#1 0xb791321f in __GI___strtoull_l (nptr=0x0, endptr=0x0, base=10,
loc=0xb7a87400 <_nl_C_locobj>) at ./strtol_l.c:556
#2 0xb7bcbdc6 in g_ascii_strtoull () from /lib/i386-linux-gnu/libglib-2.0.so.0
#3 0x0804cf6a in dump_database ()
#4 0x0804ede1 in start_dump ()
#5 0x0804b595 in main ()
Я решил эту проблему, пересобрав mydumper из исходников.
Выяснилось, что я использовал более новую версию mysqld, чем та, что была предоставлена debian (jessie ), и, очевидно, исполняемый файл mydumper, предоставленный debian, несовместим с ней (, хотя это просто предположение, может причина вовсе не в этом ).
Чтобы собрать mydumper, вам необходимо:
sudo apt-get install libglib2.0-dev zlib1g-dev libpcre3-dev libssl-dev
)debian sid
(непосредственно с ftp):libmysqlclient -dev , который зависит от libmysqlclient20 . Загрузите эти файлы, а затемsudo dpkg -i libmysqlclient20_5.7.18-1_i386.deb libmysqlclient-dev_5.7.18-1_i386.deb
Соберите mydumper (, который также соберет myloader ), как описано в файле readme:
cd mydumper
cmake.
make
Возможно, вам потребуется установить инструменты сборки, такие какsudo apt-get install build-essential cmake
Теперь оба исполняемых файла должны находиться в текущем каталоге. С этого момента у меня все работало нормально, чтобы создать резервную копию.
Мне также нужно было выполнить сборку myloader
из исходного кода на целевом сервере, так как версия, предоставляемая debian, также вызывала ошибку сегментации, но на этот раз это не было несоответствием версии mysql; так что на самом деле я понятия не имею, почему исполняемый файл Debian не работает.