災害時にデータベースを復元するために使用できるように、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 が提供する開発ファイルを使用していないため、Debian が提供する開発ファイルをインストールできません。私にとって役に立ったのは、
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
現在のディレクトリに2つの実行可能ファイルがあるはずです。この時点から、バックアップの作成にすべてが順調に進んでいます。
Debianが提供するバージョンもsegfaultなので、ターゲットサーバーのソースからビルドする必要がありますが、myloader
今回はmysqlのバージョンが一致しないため、実際にdebian実行可能ファイルが機能しない理由がわかりません。