mysql源码解读之配置文件_MySQL
bitsCN.com
要研究mysql,最好的资源莫过于源码了,所以本人打算通过调试源码的方式来深入理解mysql的点点滴滴。搭建mysql调试环境很简单,从官方下载mysql源码,利用cmake工具生成工程即可。为了方便调试,也因为vs调试的直观性,我的源码工程是在windows平台下面的,下面进入正题。
在vs环境下,选择mysqld工程,直接启动调试运行,此时我并没有指定任何配置文件,但程序依然正常运行,那么程序应该会使用默认的配置文件。首先需要确定两个问题,程序在哪些个目录下去寻找配置文件,以什么样的顺序来查找。通过调试发现,程序首先会分别收集windows系统目录、C:\根目录、执行码所在的父目录,如果配置了环境变量MYSQL_HOME,这个目录也会被搜集,然后在这些目录下进行查找my.ini文件,这里面涉及到主要接口是my_load_defaults和search_default_file。
而实际情况是,这些目录里面没有任何一个配置文件,说明即使mysqld启动时,一个配置文件信息获取不到,也是可以成功启动的,那么这些默认值一定是在代码里面写死了的。现在我们要去代码里找到这些参数的默认值,以及他们是如何初始化的。在mysqld.cc里面,我们看到了全局变量global_system_variables的定义,该参数是一个结构变量,包含了大部分的mysql系统变量,下一步就是看这个全局变量何时被初始化的了。在vs里面,我们可以设置数据断点,通过数据断点我们能够知道特定内存地址是何时被改变的。我们以max_connections为例,将其地址设置数据断点,看看它是何时被改变的,果然确实被改过,堆栈如下图:
堆栈显示了初始化流程,通过分析各个函数即可以知道初始化逻辑。
代码如下图:
这说明全局变量与value是一一对应的。逐个跟踪变量,找到变量all_sys_vars,该变量是一个结构,包含两个指针,初始化值为NULL,跟踪这个链表找到了问题的答案。在sys_vars.h头文件中,我们找到了all_sys_vars变量的影子,顺藤摸瓜,在sys_vars.cc文件里面,看到大量的静态对象,从名字可以看出,这些对象和变量有千丝万缕的联系。比如Sys_max_connections对象定义如下:
这里很明白了,通过传递max_connections的地址,建立了与对象sys_var的联系,而所有sys_var对象都通过链表对象 all_sys_vars 管理。到目前为止,我们已经很清楚地知道mysql系统变量值初始化的来龙去脉了。通过--defaults-file我们可以指定配置文件。基本逻辑是,读取默认参数值后,会利用配置文件值对其进行覆盖,使配置文件的值生效。下面附几个主要类和接口:
类:
Sys_var_mybool
Sys_var_typelib
sys_var
Sys_var_ulong
sys_var
接口:
my_search_option_files(搜索文件),
search_default_file_with_ext(读取配置文件内容),
handle_default_option(处理每一行参数)
getopt_compare_strings(查找匹配项,设置特定参数的值)
insert_dynamic(将变量插入链表)
bitsCN.com
ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









携帯電話会社からラップトップを購入した場合は、eSIM をアクティベートし、携帯電話ネットワークを使用してコンピューターをインターネットに接続するオプションがある可能性があります。 eSIM を使用すると、すでに内蔵されているため、ラップトップに別の物理 SIM カードを挿入する必要はありません。デバイスがネットワークに接続できない場合に非常に便利です。 Windows 11 デバイスが eSIM と互換性があるかどうかを確認するにはどうすればよいですか? [スタート] ボタンをクリックし、[ネットワークとインターネット] > [携帯電話] > [設定] に移動します。 「セルラー」オプションが表示されない場合は、デバイスに eSIM 機能がないため、モバイル デバイスを使用してラップトップをホットスポットに接続するなど、別のオプションを確認する必要があります。アクティベートするには、そして

構成ファイルの固定ファイルを記述する必要があるのはなぜですか? settings.py や config.py などの .py ファイルとして直接記述することができます。この利点は、インポートを通じてその一部を直接インポートできることです。同じプロジェクト; しかし、それを他のプロジェクトで使用する必要がある場合 Python 以外のプラットフォームで構成ファイルを共有する場合、単一の .py を記述することは良い選択ではありません。現時点では、これらの固定部分を保存するために共通の構成ファイルの種類を選択する必要があります。現在、一般的に使用されている一般的な構成ファイル形式のタイプには、主に ini、json、toml、yaml、xml などが含まれます。これらのタイプの構成ファイルには、標準ライブラリまたはサードパーティ ライブラリを通じてアクセスできます。

ワイヤレス ネットワークのセットアップは一般的ですが、ネットワークの種類の選択または変更は、特に結果が分からない場合には混乱する可能性があります。 Windows 11 でネットワークの種類をパブリックからプライベートに、またはその逆に変更する方法についてのアドバイスをお探しの場合は、役立つ情報をお読みください。 Windows 11 のさまざまなネットワーク プロファイルとは何ですか? Windows 11 には、多数のネットワーク プロファイルが付属しています。これらのプロファイルは、基本的に、さまざまなネットワーク接続を構成するために使用できる設定のセットです。これは、自宅やオフィスに複数の接続がある場合に便利で、新しいネットワークに接続するたびにすべてを設定する必要がありません。プライベート ネットワーク プロファイルとパブリック ネットワーク プロファイルは Windows 11 の 2 つの一般的なタイプですが、一般的には

最近、多くの Win10 システム ユーザーがユーザー プロファイルを変更したいと思っていますが、その方法がわかりません。この記事では、Win10 システムでユーザー プロファイルを設定する方法を説明します。 Win10 でユーザー プロファイルを設定する方法 1. まず、「Win+I」キーを押して設定インターフェイスを開き、クリックして「システム」設定に入ります。 2. 次に、開いたインターフェースで、左側の「バージョン情報」をクリックし、「システムの詳細設定」を見つけてクリックします。 3. 次に、ポップアップ ウィンドウで「」オプション バーに切り替え、下の「ユーザー構成」をクリックします。

Helm は Kubernetes の重要なコンポーネントであり、構成ファイルを HelmChart というパッケージにバンドルすることで Kubernetes アプリケーションのデプロイを簡素化します。このアプローチにより、複数のファイルを変更するよりも単一の構成ファイルを更新する方が便利になります。 Helm を使用すると、ユーザーは Kubernetes アプリケーションを簡単にデプロイできるため、デプロイメント プロセス全体が簡素化され、効率が向上します。このガイドでは、Ubuntu に Helm を実装するさまざまな方法について説明します。注: 次のガイドのコマンドは、Ubuntu 22.04、すべての Ubuntu バージョン、および Debian ベースのディストリビューションに適用されます。これらのコマンドはテストされており、システム上で正しく動作するはずです。 Uで

構成ファイルを記述する理由? 開発プロセスでは、多くの場合、いくつかの固定パラメーターまたは定数を使用します。これらのより固定された一般的に使用される部分については、さまざまなモジュール コードでの繰り返しを避け、コア コードをクリーンに保つために、多くの場合、固定ファイルに書き込まれます。この修正されたファイルを settings.py や config.py などの .py ファイルに直接書き込むことができます。この利点は、同じプロジェクト内のインポートを通じてその一部を直接インポートできることです。他の非 Python プラットフォーム上 ファイル共有を構成する場合、単一の .py を記述することは適切な選択ではありません。現時点では、一般的な構成ファイルの種類を選択する必要があります。

Eclipse の文字化け問題を解決する効果的な方法には、具体的なコード例が必要です。近年、ソフトウェア開発の急速な発展に伴い、Eclipse は最も人気のある統合開発環境の 1 つとして、多くの開発者に利便性と効率性を提供してきました。ただし、Eclipse を使用するとコードの文字化けの問題が発生する可能性があり、プロジェクトの開発やコードの読み取りに問題が生じます。この記事では、Eclipseの文字化け問題を解決する効果的な方法と具体的なコード例を紹介します。 Eclipseファイルのエンコード設定を変更する: Eclip内

Ubuntu ベースの Linux ディストリビューションの ElementaryOS が最新の v7 バージョン (Ubuntu22.04LTS) をリリースし、公式 Web サイトからダウンロードできるようになりました。現在、elementaryOS 6.1 から 7 にアップグレードすることはできないことに注意してください。以前のバージョンのユーザーは、公式のアップグレード推奨事項を読むことができます。エレメンタリーOS7 は、信頼性が高くスマートなインストールとセットアップのエクスペリエンスを備えており、少なくとも最初のログインは非常にユーザーフレンドリーであり、非常にシンプルでスムーズかつスマートです。前バージョンと比較して、elementaryOS7 では、以前から批判されていたフォルダをクリックして開く設定など、使用ロジックの一部が調整されており、新バージョンでは開発者が好きなようにコンピュータを操作できるようになりました。
