ошибка сегментации mydumper в g_ascii_strtoull

Я пытаюсь использовать 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 ()
0
29.08.2017, 14:02
1 ответ

Я решил эту проблему, пересобрав mydumper из исходников.

Выяснилось, что я использовал более новую версию mysqld, чем та, что была предоставлена ​​debian (jessie ), и, очевидно, исполняемый файл mydumper, предоставленный debian, несовместим с ней (, хотя это просто предположение, может причина вовсе не в этом ).

Чтобы собрать mydumper, вам необходимо:

  1. Клонhttps://github.com/maxbube/mydumper.git
  2. Установите зависимости с помощью apt -get (см. readme mydumper на github, на момент написания этого ответа вам нужноsudo apt-get install libglib2.0-dev zlib1g-dev libpcre3-dev libssl-dev)
  3. Установите пакет libmysqlclient -dev, соответствующий используемой версии mysqld. Так как в этом случае я не использую тот, который предоставляется debian, я также не могу установить файлы разработки, предоставленные debian. Мне помогло загрузить пакеты.deb из репозитория debian sid(непосредственно с ftp):libmysqlclient -dev , который зависит от libmysqlclient20 . Загрузите эти файлы, а затемsudo dpkg -i libmysqlclient20_5.7.18-1_i386.deb libmysqlclient-dev_5.7.18-1_i386.deb
  4. Соберите mydumper (, который также соберет myloader ), как описано в файле readme:

    cd mydumper
    cmake.
    make
    

    Возможно, вам потребуется установить инструменты сборки, такие какsudo apt-get install build-essential cmake

Теперь оба исполняемых файла должны находиться в текущем каталоге. С этого момента у меня все работало нормально, чтобы создать резервную копию.

Мне также нужно было выполнить сборку myloaderиз исходного кода на целевом сервере, так как версия, предоставляемая debian, также вызывала ошибку сегментации, но на этот раз это не было несоответствием версии mysql; так что на самом деле я понятия не имею, почему исполняемый файл Debian не работает.

1
28.01.2020, 04:40

Теги

Похожие вопросы