探究MySQL各類文件

NO IMAGE

前言

前兩篇我們瞭解到MySQL的整體架構,其分為了四層,包括網絡連接層,核心層,存儲引擎層,物理層,以及各層的作用。另外還知道了InnoDB存儲引擎層的架構,包括緩存池和線程。

不明白的,請移步上兩篇哦。今天我們來看構成MySQL數據庫和InnoDB存儲引擎表的各類文件。

參數文件

告訴MySQL實例啟動時在哪裡可以找到數據庫文件,以及指定某些初始化參數,如某種內存結構的大小設置。

那上面是參數呢?簡單來說,可以把數據庫參數看成一個鍵值對(key/value),比如innodb_buffer_pool_size=1G。那這些鍵值對都存放在哪裡了呢?答案揭曉,my.ini裡面存儲了大量鍵值對(key/value),且位於MySQL的安裝目錄,如下圖。

探究MySQL各類文件

我們打開這個文件看一下,裡面都是鍵值對的形式。如果我們想要修改某個值,直接在這邊修改,並且重啟即可。

探究MySQL各類文件

日誌文件

用來記錄MySQL實例對某種條件做出響應時寫入的文件,包括如下四種。

錯誤日誌

記錄MySQL的啟動,運行和關閉中的錯誤信息。我們先來看一下文件存儲的位置。

探究MySQL各類文件

我們去相應路徑下查看該文件,可以發現出錯信息。所以當MySQL數據庫不能正常啟動的時候,第一個必須查找的文件就是錯誤日誌文件。

探究MySQL各類文件

二進制日誌

記錄對MySQL數據庫進行更改的所有操作,但是不包括select和show這類操作,因為這類操作對數據本身沒有影響。然而,如果是update或delete這種操作,即使對數據庫沒有造成影響,那麼也會被記錄到二進制日誌中。

這段是不是特別拗口,不咋能理解,沒事,我們實際操作下。

首先二進制日誌文件在默認情況下並沒有啟動,需要手動指定參數來啟動。這是不是就意味著開啟這個選項會對數據庫的整體性能有影響?但是根據MySQL官方手冊中的測試表明,開啟二進制日誌會使性能下降1%,是可接受的範圍。

是否下降1%,這個數字我們也無從考證,但是要曉得一點,就是會有影響,但問題不大。畢竟要在每次insert,delete,update操作後,記錄日誌,這肯定是要時間和空間的損耗的。

那麼開始表演吧。

首先,我們先開啟二進制配置,上面參數文件有說過my.ini裡面存儲的各種配置信息的鍵值對,只需要在該文件裡面添加log-bin,指定了log的名稱為主機名-bin,後綴為序列號,所在的路徑為數據庫所在的路徑。

接著,重啟服務器,步驟如下,重啟之後,我們可以看到相應的文件。

探究MySQL各類文件

探究MySQL各類文件

探究MySQL各類文件

最後,在準備工作好了之後,我們先來查詢test2的數據,然後看一下那兩個文件的大小有沒有變化,很明顯大小還是跟之前的一樣。

探究MySQL各類文件

探究MySQL各類文件

再來寫一個update語句,我們可以看到影響的行數為0,但是那兩個文件的大小有增加了。

探究MySQL各類文件

探究MySQL各類文件

InnoDB的存儲引擎文件

表空間

InnoDB將存儲的數據按表空間進行存放。在默認配置中會有一個初始大小為10MB,名為ibdata1的文件,其為所有表的表空間。當然也可以通過innodb_file_per_table設置每個表一個獨立的表空間,命名規則為.ibd。是否很熟悉?沒錯,這就是我們上篇說到的innodb表存儲在硬盤的文件之一。

探究MySQL各類文件

重做日誌文件

如果斷電時,InnoDB會通過重做日誌來恢復到斷電前的狀態,保證數據的完整性。

每個InnoDB存儲引擎至少有一個重做日誌組group,和兩個文件ib_logfile0和ib_logfile1。

他們兩個大小一樣,並且以循環寫入的方式運行,即先寫重做日誌1,等到寫滿時,會切換到重做日誌2,等到日誌2寫滿時,再次切換到重做日誌1。

探究MySQL各類文件

結束

碼字不易,請多多關注哦。

探究MySQL各類文件

相關文章

ShardingJDBC掃盲篇

不要為了“分庫分表”而“分庫分表”

詳解B+樹及其正確打開方式

扒一扒InnoDB數據在硬盤上是如何存放的