MySQL 5.1.41 + 勉強
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() を呼んでる。