mysqlソースコードプロシージャの起動
5523 ワード
本文は3つの地方から来ます:mysqlソースコード学習ノート:mysqld起動プロセスmysql運維内参mysql核心内幕:祝定沢
mysql起動プロセスの概要
主な関数とプロセスは次のとおりです.初期化システム変数とシステム状態 サーバの各モジュール を初期化する.
mysql起動プロセス mysqldサーバはC++で生成された実行可能ファイルであり、main()関数は総エントリ関数 である.入口関数はsql/mainである.cc中sql/main.cc すべての操作mysqld_mainで完了します.この関数はsql/mysqldです.ccで定義する
シーケンス番号
サブシーケンス
ステップ
説明する
1
pre_initialize_performance_schema()
performance shcema関連コンテンツの初期化
2
my_init()
3
load_defaults()
プロファイルや起動パラメータなどを処理します.defaults-fileがあれば読み込み、なければ特定のパスからファイルを検索
4
init_pfs_instrument_array()
performance shcema関連コンテンツの初期化
5
handle_early_options()
部分変数を初期化しmysqld初期化システムテーブルなどに装備する
5.1
my_long_early_options()
bootstrap、skip-grant-tables、help、verbose、version、initialize、initialize-insecureなどの変数設定
6
init_sql_statement_names()
初期化コマンドは、後続のstatus統計操作数の準備を行います.
7
sys_var_init()
システム変数hashバケットを初期化し、すべてのシステム変数をhashバケットに挿入します(ここでの変数はsys_vars.ccで定義された変数です).
8
init_error_log()
error logロックの初期化
9
mysql_audit_initialize()
audit pluginロックを初期化し、後続のaudit pluginの初期化に備えます.
10
init_common_variables()
変数自体の値と一部の変数制御の特性を含むすべての変数関連コンテンツの初期化
10.1
mysql_init_variables()
一部のグローバル変数のデフォルト値の設定
10.2
init_thread_environment()
グローバルmutexとconditionの初期化
10.3
if (gethostname(glob_hostname,sizeof(glob_hostname)) < 0)
pidファイルの生成
10.4
default_storage_engine="innodb"
デフォルトのストレージエンジンの設定
10.5
if (add_status_vars(status_vars))
グローバル変数status_varsのシステムstatusはall_に格納されますstatus_vars中
10.6
get_options()
設定したシステム変数の値をシステム変数に更新
10.7
set_default_auth_plugin
デフォルトの認証プラグインの設定(通常はnative_password)
10.8
set_server_version()
mysqlバージョンの接尾辞を設定します(-embedded、-log、-debug...)
10.9
init_errmessage()/init_client_errs()
デフォルトのストレージエンジンの設定
10.10
初期化charset/collation
デフォルトのストレージエンジンの設定
10.11
lex_init()
解析sqlで使用するlexの初期化
10.12
default_storage_engine="innodb"
general logとslow logのログ名を初期化
11
init_server_components()
サーバの各モジュールの初期化
11.1
mdl_init()
サーバの各モジュールの初期化
11.2
table_def_init/hostname_cache_init/my_timer_initialize
11.3
init_server_query_cache
Query cache初期化
11.4
randominit
乱数初期化
11.5
init_slave_list
スレーブhashバケツの初期化
11.6
transaction_cache_init()
トランザクションキャッシュhashバケツとロックの初期化
11.7
delegates_init
delegatesコールバック関数の実行に使用
11.8
if(opt_bin_log)
変数でbinlogをオンにしてbinlogを生成するとindexとbinlogのファイル名
11.9
if(opt_relay_logname)
変数でrelaylogをオンにしてrelaylogを生成するとindexとrelay logのファイル名
11.10
if(ha_init_errors())
handlerモジュールのエラー情報をmysqldのmy_に登録するerror中
11.11
if(gtid_server_init())
gitd構造体の初期化
11.12
if(plugin_init(&remaining_argc, remaining_argv ...
すべてのプラグインを初期化(コンパイル、構成、コマンドラインロードのパラメータを含む)
11.13
query_logger.set_handlers(log_output_options);
General log/slow logのログ処理モジュールの初期化
11.14
if(initialize_storage_engine(default_storage_engine, ""....
デフォルトのストレージエンジンの初期化
11.15
if(tc_log->open(opt_bin_log ? opt_bin_logname : opt_tc_log_file))
tc_log binlogを開き、主にbinlogとストレージエンジンのrecoveryで使用され、現在のindexの最後のファイルを開きます.
11.16
if(ha_recover(0))
recovery
11.17
if(mysql_bin_log.open_binlog(opt_bin_logname, 0,
mysql_bin_log binlogを開き、新しいbinlogを生成し、indexファイルに新しい内容を追加します.
11.18
mysql_bin_log.purge_logs_before_date(purge_time, true);
レプリケーションをオンにし、binlogの定期削除時間をオンにした場合、期限切れのbinlogを削除します.
11.19
init_max_user_conn(void)
接続hashバケツの初期化
11.20
init_update_queries();
server_の初期化command_flags構造体、コマンド統計用
12
init_server_auto_options()
UUIDの初期化
13
if(gtid_state->read_gtid_executed_from_table() == -1)
gtid_からexecuteテーブルでgtid_を読み込むexecute
14
if(opt_bin_log)
15
init_ssl()/network_init
sslとネットワークの初期化
16
create_pid_file()
pidファイルの作成
17
acl_init(opt_noacl)
ユーザー名、パスワードなどの情報キャッシュを初期化し、userテーブルのコンテンツをキャッシュに読み込む
18
grant_init(opt_noacl)
権限キャッシュを初期化しtables_privなどのテーブルの権限情報読み出しキャッシュ
19
servers_init(0)
mysqlを初期化します.serversテーブル、キャッシュの読み込み
20
udf_init()
ユーザー定義関数の初期化
21
init_status_vars()
システムステータスを初期化し、system statusソート
22
init_slave()
slave関連構造体を初期化します.コピーに関する情報がある場合はskip_slave_startが設定されていない場合は、レプリケーションを開始します.
23
execute_ddl_log_recovery ()
ddl文を実行するcrash recovery
24
start_signal_handler()
信号処理スレッドを作成し、信号SIGTERM/SIGHQUIT/SIGHUPを処理する
25
if (opt_bootstrap) error= bootstrap(mysql_stdin)
データディレクトリ、システムテーブルの初期化
26
if (opt_init_file && *opt_init_file) read_init_file(opt_init_file)
ファイルからデータディレクトリ、システムテーブルを初期化
27
mysqld_socket_acceptor->connection_event_loop()
ポートとsockファイルをリスニングし、クライアント接続を待つ
クライアント接続を待機するまで起動し、すべてが準備されていることを示し、対外的にサービスを提供することができます.
mysql起動プロセスの概要
主な関数とプロセスは次のとおりです.
mysql起動プロセス
extern int mysqld_main(int argc, char **argv);
int main(int argc, char **argv) { return mysqld_main(argc, argv); }
int mysqld_main(int argc, char **argv) {
……
//
if (load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv,
&argv_alloc)) {
flush_error_log_messages();
return 1;
}
}
シーケンス番号
サブシーケンス
ステップ
説明する
1
pre_initialize_performance_schema()
performance shcema関連コンテンツの初期化
2
my_init()
3
load_defaults()
プロファイルや起動パラメータなどを処理します.defaults-fileがあれば読み込み、なければ特定のパスからファイルを検索
4
init_pfs_instrument_array()
performance shcema関連コンテンツの初期化
5
handle_early_options()
部分変数を初期化しmysqld初期化システムテーブルなどに装備する
5.1
my_long_early_options()
bootstrap、skip-grant-tables、help、verbose、version、initialize、initialize-insecureなどの変数設定
6
init_sql_statement_names()
初期化コマンドは、後続のstatus統計操作数の準備を行います.
7
sys_var_init()
システム変数hashバケットを初期化し、すべてのシステム変数をhashバケットに挿入します(ここでの変数はsys_vars.ccで定義された変数です).
8
init_error_log()
error logロックの初期化
9
mysql_audit_initialize()
audit pluginロックを初期化し、後続のaudit pluginの初期化に備えます.
10
init_common_variables()
変数自体の値と一部の変数制御の特性を含むすべての変数関連コンテンツの初期化
10.1
mysql_init_variables()
一部のグローバル変数のデフォルト値の設定
10.2
init_thread_environment()
グローバルmutexとconditionの初期化
10.3
if (gethostname(glob_hostname,sizeof(glob_hostname)) < 0)
pidファイルの生成
10.4
default_storage_engine="innodb"
デフォルトのストレージエンジンの設定
10.5
if (add_status_vars(status_vars))
グローバル変数status_varsのシステムstatusはall_に格納されますstatus_vars中
10.6
get_options()
設定したシステム変数の値をシステム変数に更新
10.7
set_default_auth_plugin
デフォルトの認証プラグインの設定(通常はnative_password)
10.8
set_server_version()
mysqlバージョンの接尾辞を設定します(-embedded、-log、-debug...)
10.9
init_errmessage()/init_client_errs()
デフォルトのストレージエンジンの設定
10.10
初期化charset/collation
デフォルトのストレージエンジンの設定
10.11
lex_init()
解析sqlで使用するlexの初期化
10.12
default_storage_engine="innodb"
general logとslow logのログ名を初期化
11
init_server_components()
サーバの各モジュールの初期化
11.1
mdl_init()
サーバの各モジュールの初期化
11.2
table_def_init/hostname_cache_init/my_timer_initialize
11.3
init_server_query_cache
Query cache初期化
11.4
randominit
乱数初期化
11.5
init_slave_list
スレーブhashバケツの初期化
11.6
transaction_cache_init()
トランザクションキャッシュhashバケツとロックの初期化
11.7
delegates_init
delegatesコールバック関数の実行に使用
11.8
if(opt_bin_log)
変数でbinlogをオンにしてbinlogを生成するとindexとbinlogのファイル名
11.9
if(opt_relay_logname)
変数でrelaylogをオンにしてrelaylogを生成するとindexとrelay logのファイル名
11.10
if(ha_init_errors())
handlerモジュールのエラー情報をmysqldのmy_に登録するerror中
11.11
if(gtid_server_init())
gitd構造体の初期化
11.12
if(plugin_init(&remaining_argc, remaining_argv ...
すべてのプラグインを初期化(コンパイル、構成、コマンドラインロードのパラメータを含む)
11.13
query_logger.set_handlers(log_output_options);
General log/slow logのログ処理モジュールの初期化
11.14
if(initialize_storage_engine(default_storage_engine, ""....
デフォルトのストレージエンジンの初期化
11.15
if(tc_log->open(opt_bin_log ? opt_bin_logname : opt_tc_log_file))
tc_log binlogを開き、主にbinlogとストレージエンジンのrecoveryで使用され、現在のindexの最後のファイルを開きます.
11.16
if(ha_recover(0))
recovery
11.17
if(mysql_bin_log.open_binlog(opt_bin_logname, 0,
mysql_bin_log binlogを開き、新しいbinlogを生成し、indexファイルに新しい内容を追加します.
11.18
mysql_bin_log.purge_logs_before_date(purge_time, true);
レプリケーションをオンにし、binlogの定期削除時間をオンにした場合、期限切れのbinlogを削除します.
11.19
init_max_user_conn(void)
接続hashバケツの初期化
11.20
init_update_queries();
server_の初期化command_flags構造体、コマンド統計用
12
init_server_auto_options()
UUIDの初期化
13
if(gtid_state->read_gtid_executed_from_table() == -1)
gtid_からexecuteテーブルでgtid_を読み込むexecute
14
if(opt_bin_log)
15
init_ssl()/network_init
sslとネットワークの初期化
16
create_pid_file()
pidファイルの作成
17
acl_init(opt_noacl)
ユーザー名、パスワードなどの情報キャッシュを初期化し、userテーブルのコンテンツをキャッシュに読み込む
18
grant_init(opt_noacl)
権限キャッシュを初期化しtables_privなどのテーブルの権限情報読み出しキャッシュ
19
servers_init(0)
mysqlを初期化します.serversテーブル、キャッシュの読み込み
20
udf_init()
ユーザー定義関数の初期化
21
init_status_vars()
システムステータスを初期化し、system statusソート
22
init_slave()
slave関連構造体を初期化します.コピーに関する情報がある場合はskip_slave_startが設定されていない場合は、レプリケーションを開始します.
23
execute_ddl_log_recovery ()
ddl文を実行するcrash recovery
24
start_signal_handler()
信号処理スレッドを作成し、信号SIGTERM/SIGHQUIT/SIGHUPを処理する
25
if (opt_bootstrap) error= bootstrap(mysql_stdin)
データディレクトリ、システムテーブルの初期化
26
if (opt_init_file && *opt_init_file) read_init_file(opt_init_file)
ファイルからデータディレクトリ、システムテーブルを初期化
27
mysqld_socket_acceptor->connection_event_loop()
ポートとsockファイルをリスニングし、クライアント接続を待つ
クライアント接続を待機するまで起動し、すべてが準備されていることを示し、対外的にサービスを提供することができます.