1月 242010
 

mysqld (MySQL 5.1.41) ソースコードざっくり勉強メモ。
関数の呼び出し順番とかを主に。そして適当に。
動作環境は CentOS 5.4。

オプション解析

my.cnf とか。

sql/mysqld.cc       main():4301
  init_common_variables() が出発点
 
sql/mysqld.cc       init_common_variables():3286
  load_defaults()
 
mysys/default.c     load_defaults():383
  my_load_defaults()
 
mysys/default.c     my_load_defaults():427
  my_search_option_files() 通過後、argc, argv を読み込んで、値を整形。
 
mysys/default.c     my_search_option_files():153
  my.cnf を fgets() してる
 
sql/mysqld.cc       init_common_variables():3289
  get_options()
 
sql/mysqld.cc       get_options():8495
  handle_options()
 
mysys/my_getopt.c   handle_options():112
  オプション構造体や変数に設定値を格納してる

ネットワーク初期化

listen socket 作成とか。

sql/mysqld.cc   main():4403
  network_init()
 
sql/mysqld.cc   network_init():1619
  socket(), bind(), listen() してる。

接続受付

accept とか。

sql/mysqld.cc   main():4517
  handle_connections_sockets() を呼んでる。
 
sql/mysqld.cc   handle_connections_sockets():4993
  select(), accept() してる。
  成功したら create_new_thread() を呼んでる。

受信

パケット受信とか。

sql/mysqld.cc   create_new_thread():4918
  accept 後など、コネクションに対して新しくスレッドを作成するとき呼ばれると思われる関数。
  いろいろ設定後、scheduler_functions::add_connection() を呼んでる。
  add_connection() は関数ポインタで create_thread_to_handle_connection() がセットされてる。
 
sql/mysqld.cc   create_thread_to_handle_connection():4853
  実際にスレッドを作成してる関数。
  特に何事もなければ handle_one_connection() をコールバック関数にしてスレッドを作成してる。
 
sql/sql_connect.cc  handle_one_connection():1074
  1コネクションに対するスレッドのハンドラ。
  スレッド初期化とかパケット受信とかコマンド発行とかしてる。
  1080行目で、scheduler_functions::init_new_connection_thread() を呼んでる。
  init_new_connection_thread() は関数ポインタで init_new_connection_handler_thread() がセットされてる。
 
sql/sql_connect.cc  init_new_connection_handler_thread:611
  1コネクションに対するスレッドの初期化処理が行われる関数と思われる。
  618行目で、my_thread_init()  を呼んでる。

関連エントリー:

MySQL + GDB + 解析

MySQL + 設定メモ

TCPサーバ + サンプル

Mac Leopard 自動起動 + MySQL + Apache

epoll + 使い方

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> <pre lang="" line="" escaped="" highlight="">