재해 발생 시 데이터베이스를 복원하는 데 사용할 수 있도록 mydumper를 사용하여 mysql 데이터베이스 덤프를 생성하려고 합니다.
그러나 그것은 작동하지 않습니다. 나는 다음 명령줄을 사용합니다.
mydumper --user remote-backup --password ******
약 1초 정도 지연된 후 Segmentation fault
메시지가 출력됩니다.
apt install mydumper
나는 그것을 설치된 debian 8.5 (jessie) 컴퓨터에 설치했습니다 mydumper 0.6.1, built against MySQL 5.5.35
. mysqld Ver 5.7.14 for Linux on i686 (MySQL Community Server (GPL))
mysql 5.7용 mydumper를 다시 빌드해야 합니까?
다음은 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 ()
답변1
소스에서 mydumper를 다시 빌드하여 이 문제를 해결했습니다.
제가 사용하고 있던 mysqld 버전은 debian(jessie)에서 제공한 버전보다 최신 버전인 것으로 나타났습니다. 따라서 debian에서 제공하는 mydumper 실행 파일은 해당 버전과 호환되지 않는 것 같습니다(비록 이는 단지 추측일 뿐이며 전혀 이유가 아닐 수도 있습니다). .
mydumper를 빌드하려면 다음이 필요합니다.
- 클론https://github.com/maxbube/mydumper.git
- apt-get을 사용하여 종속성을 설치합니다(이 답변을 작성하는 동안 필요한 github의 mydumper 추가 정보 참조
sudo apt-get install libglib2.0-dev zlib1g-dev libpcre3-dev libssl-dev
). - 사용 중인 mysqld 버전에 해당하는 libmysqlclient-dev 패키지를 설치합니다. 이번 예제에서는 데비안에서 제공하는 개발 파일을 사용하지 않았기 때문에 데비안에서 제공하는 개발 파일을 설치할 수 없습니다. 나에게 도움이 된 것은
debian sid
저장소에서 (ftp에서 직접) .deb 패키지를 다운로드하는 것이었습니다.libmysql클라이언트-dev때에 따라 다르지libmysqlclient20. 이 파일들을 다운로드한 후sudo dpkg -i libmysqlclient20_5.7.18-1_i386.deb libmysqlclient-dev_5.7.18-1_i386.deb
mydumper를 빌드하려면 readme의 지침을 따르십시오(myloader도 빌드됨).
cd mydumper cmake . make
다음과 같은 빌드 도구를 설치해야 할 수도 있습니다.
sudo apt-get install build-essential cmake
이제 현재 디렉터리에 두 개의 실행 파일이 있어야 합니다. 이 시점부터 백업을 생성하는 데 모든 것이 순조롭게 진행되었습니다.
Debian에서 제공하는 버전도 segfault이므로 대상 서버의 소스에서 빌드 해야 myloader
하지만 이번에는 mysql 버전이 일치하지 않으므로 실제로 debian 실행 파일이 작동하지 않는 이유를 모르겠습니다.