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 Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如果你從行動電信商購買了筆記型電腦,則很可能可以選擇啟動eSIM並使用手機網路將電腦連接到網路。有了eSIM,您無需將另一張實體SIM卡插入筆記型電腦,因為它已經內建。當您的裝置無法連接到網路時,它非常有用。如何檢查我的Windows11裝置是否相容於eSIM卡?點擊“開始”按鈕,然後轉到“網路和互聯網”>“蜂窩>設定”。如果您沒有看到「蜂窩行動網路」選項,則您的裝置沒有eSIM功能,您應該選取其他選項,例如使用行動裝置將筆記型電腦連接到熱點。為了激活和

為什麼要寫設定檔這個固定檔我們可以直接寫成一個.py 文件,例如settings.py 或config.py,這樣的好處就是能夠在同一工程下直接透過import 來導入當中的部分;但如果我們需要在其他非Python 的平台進行設定檔共用時,寫成單一.py 就不是一個很好的選擇。這時我們就應該選擇通用的設定檔類型來作為儲存這些固定的部分。目前常用且流行的設定檔格式類型主要有 ini、json、toml、yaml、xml 等,這些類型的設定檔我們都可以透過標準函式庫或第三方函式庫來進

設定無線網路很常見,但選擇或變更網路類型可能會令人困惑,尤其是在您不知道後果的情況下。如果您正在尋找有關如何在Windows11中將網路類型從公用變更為私有或反之亦然的建議,請繼續閱讀以取得一些有用的資訊。 Windows11中有哪些不同的網路設定檔? Windows11附帶了許多網路設定文件,這些設定檔本質上是可用於配置各種網路連線的設定集。如果您在家中或辦公室有多個連接,這將非常有用,因此您不必每次連接到新網路時都進行所有設定。專用和公用網路設定檔是Windows11中的兩種常見類型,但通

最近有不少Win10系統的使用者想要更改使用者設定文件,但不清楚具體如何操作,本文將為大家帶來Win10系統設定使用者設定檔的操作方法吧! Win10如何設定使用者設定檔1、首先,按下「Win+I」鍵開啟設定介面,並點選進入「系統」設定。 2、接著,在打開的介面中,點擊左側的“關於”,再找到並點擊其中的“高級系統設定”。 3、然後,在彈出的視窗中,切換到「」選項欄,並點擊下方「用戶配

Helm是Kubernetes的一個重要元件,它透過將設定檔捆綁到一個稱為HelmChart的套件中來簡化Kubernetes應用程式的部署。這種方法使得更新單一設定檔比修改多個檔案更便捷。借助Helm,使用者可以輕鬆部署Kubernetes應用程序,簡化了整個部署過程,提高了效率。在本指南中,我將介紹在Ubuntu上實作Helm的不同方法。請注意:以下指南中的命令適用於Ubuntu22.04以及所有Ubuntu版本和基於Debian的發行版。這些命令經過測試,應該會在您的系統上正常運作。在U

為什麼要寫設定檔在開發過程中,我們常常會用到一些固定參數或是常數。對於這些較為固定且常用到的部分,往往會將其寫到一個固定檔案中,避免在不同的模組程式碼中重複出現從而保持核心程式碼整潔。這個固定文件我們可以直接寫成一個.py 文件,例如settings.py 或config.py,這樣的好處就是能夠在同一工程下直接透過import 來導入當中的部分;但如果我們需要在其他非Python 的平台進行設定檔共享時,寫成單一.py 就不是一個很好的選擇。這時我們就應該選擇通用的設定檔類型來

解決eclipse亂碼問題的有效方法,需要具體程式碼範例近年來,隨著軟體開發的飛速發展,eclipse作為最受歡迎的整合開發環境之一,為眾多開發者提供了便利和高效。然而,使用eclipse時可能會遇到亂碼問題,這對於專案開發和程式碼閱讀帶來了困擾。本文將介紹一些解決eclipse亂碼問題的有效方法,並提供具體程式碼範例。修改eclipse檔案編碼設定:在eclip

基於Ubuntu的Linux發行版elementaryOS現已推出最新的v7版本(Ubuntu22.04LTS),現已在官網開放下載。值得一提的是,目前無法從elementaryOS6.1升級到7,早期版本的使用者可以閱讀官方升級建議。 elementaryOS7有著可靠且智慧的安裝和設定體驗,至少首次登入十分人性化,而且十分簡潔、流暢和智慧。相較於上個版本,elementaryOS7調整了其部分使用邏輯,例如先前因為點擊開啟資料夾的設定備受吐槽,所以開發者在新版本中你可以用你喜歡的方式去操作你的電腦
