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