読者です 読者をやめる 読者になる 読者になる

MySQL 5.1.41 + 勉強

C/C++ MySQL

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()  を呼んでる。