mysqlソースコードプロシージャの起動

5523 ワード

本文は3つの地方から来ます:mysqlソースコード学習ノート:mysqld起動プロセスmysql運維内参mysql核心内幕:祝定沢
mysql起動プロセスの概要
主な関数とプロセスは次のとおりです.
  • 初期化システム変数とシステム状態
  • サーバの各モジュール
  • を初期化する.
    mysql起動プロセス
  • mysqldサーバはC++で生成された実行可能ファイルであり、main()関数は総エントリ関数
  • である.
  • 入口関数はsql/mainである.cc中sql/main.cc
  • extern int mysqld_main(int argc, char **argv);
    
    int main(int argc, char **argv) { return mysqld_main(argc, argv); }
    
  • すべての操作mysqld_mainで完了します.この関数はsql/mysqldです.ccで定義する
  • 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ファイルをリスニングし、クライアント接続を待つ
    クライアント接続を待機するまで起動し、すべてが準備されていることを示し、対外的にサービスを提供することができます.