g_ascii_strtoullのmydumper分割エラー

g_ascii_strtoullのmydumper分割エラー

災害時にデータベースを復元するために使用できるように、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.35mysqld 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をビルドするには、次のものが必要です。

  1. クローンhttps://github.com/maxbube/mydumper.git
  2. apt-getを使用して依存関係をインストールします(この回答の作成中に必要なgithubのmydumper追加情報を参照sudo apt-get install libglib2.0-dev zlib1g-dev libpcre3-dev libssl-dev)。
  3. 使用しているバージョンの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
  4. mydumperをビルドするには、readmeの指示に従ってください(myloaderもビルドされています)。

    cd mydumper
    cmake .
    make
    

    次のビルドツールをインストールする必要があります。sudo apt-get install build-essential cmake

現在のディレクトリに2つの実行可能ファイルがあるはずです。この時点から、バックアップの作成にすべてが順調に進んでいます。

Debianが提供するバージョンもsegfaultなので、ターゲットサーバーのソースからビルドする必要がありますが、myloader今回はmysqlのバージョンが一致しないため、実際にdebian実行可能ファイルが機能しない理由がわかりません。

関連情報