忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/12/04 (Wed) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2009/04/26 (Sun) / 編集
MySQLをGDBでデバッグしたい!

そのためには、ソースコードからコンパイルする必要があるわけで、そのコンパイル方法のメモ

:「%」はコマンドを表しています。コマンドは改行無しで入力してください。
:以下、緑色の字はコメントです、入力しないでね。

[2009/4/27]gdbからのattach方法まで追記
[2009/5/20]コンパイルオプションを[g -> g3]に変更
[2009/5/21]コピペミスを修正


--------

事前準備

とにもかくにも事前準備
ソースコードをダウンロード
%wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.1/mysql-5.1.34.zip
%unzip mysql-5.1.34.zip
%cd mysql-5.1.34
とりあえずshを起動、いくつかの環境変数を指定
%sh
%export CFLAGS="-g"
%export CFLAGS="-g3" g3の方がより細かい情報を取得できるらしい
%export CXX=gcc
%export CXXFLAGS="-g3 -felide-constructors -fno-exceptions -fno-rtti"
%export LDFLAGS="-L/usr/lib/"

「ld: cannot find -lz」って言われちゃったときの話
ldがきちんとライブラリを認識していても上のエラーがでたりするらしい、それって認識できてないんじゃ、、、??

%ldconfig -p | grep libz
libz.so.1 (libc6) => /lib/libz.so.1
libz.so (libc6) => /usr/lib/libz.so
上のような結果だったのに「ld: cannot find -lz」って言われてしまった、しかたないのでコンパイルオプションに「-L/usr/lib/」を加える、そのための環境変数を設定しているのが「export LDFLAGS="-L/usr/lib/"」

configure

お次は大事なconfigure、コンパイルオプションは非常に大事なので熟考しましょう。
今回大事なのは「GDBと連携」「日本語(UTF-8)を使えるようにする」の2つ。


%./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql --enable-assembler --with-charset=utf8 --with-extra-charsets=all --with-debug=full
一応書いとくと
  • --prefix=/usr/local/mysql
  • インストール先は「/usr/local/mysql」
  • --with-mysqld-user=mysql
  • mysqldのユーザ名は「mysql」
  • --enable-assembler
  • アセンブラを有効
  • --with-charset=utf8
  • 文字コードはUTF-8
  • --with-extra-charsets=all
  • 他の文字コードもインストール
  • --with-debug=full
  • gdbでのdebugを有効

makeしてinstall

configureを実行するとMakefileが生成されてコンパイルの準備が整います
%make
エラーが出なかったらインストール
%make install

設定

まずはMySQL用のユーザ、mysqlを作成
%groupadd mysql
%useradd mysql -g mysql

各種ファイルの権限を変更
%chown -R root /usr/local/mysql
%chown -R mysql /usr/local/mysql/var
%chown -R mysql /usr/local/mysql


パスが通っている場所にシンボリックリンクを貼る
%ln -s /usr/local/mysql/bin/mysqld_safe /usr/local/bin/mysqld_safe
%ln -s /usr/local/mysql/bin/mysqladmin /usr/local/bin/mysqladmin
%ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql

mysqldの用意
libexec/mysqldとは別に、自動機同様のスクリプトを使う。
%cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
%chmod 755 /etc/rc.d/init.d/mysqld

設定ファイルをテンプレから作成。
cp support-files/my-medium.cnf /etc/my.cnf
設定ファイル「/etc/my.cnf」を微修正
[mysqld],[mysql],[mysqldump]に「default-character-set=utf8」を追加し、どこかにある「skip-federated」をコメントアウト(「"Manager of pid-file quit without updating file." 」と言われた時用)

起動

起動する
コンパイル時に指定した通り、起動はユーザ「mysql」で行う
%sudo su - mysql
%/usr/local/mysql/bin/mysqld_safe &

初回はとりあえずrootパスワードの設定
%sudo mysqladmin -u root password NewPassword

gdbからのattach

とりあえず必要なライブラリをインストール
debuginfo-install libgcc-4.3.2-7.i386

mysqldをgdbからの接続待ちモードで起動
%sudo su - mysql
%/usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --log-error=/usr/local/mysql/var/cls120.cs.ie.u-ryukyu.ac.jp.err --pid-file=/usr/local/mysql/var/ホスト名.pid --socket=/tmp/mysql.sock --port=3306 --gdb &
%exit


gdbからattach
%ps aux|grep mysql
%sudo gdb
(gdb) attach mysqldのプロセスID

もしくは
%ps aux|grep mysql
%sudo gdb -p プロセスID



どうやってgdbで追跡するかは調査中なのでそのうち追記

参考

MySQL
[Future's Laboratory 技術格納庫]MySQLをソースからインストール(RedHat9)
[tomoyamkungの日記][mysql]MySQL が "Manager of pid-file quit without updating file." と表示して起動しなくなった場合の対応

拍手[0回]

PR
忍者ブログ [PR]