MySQL文件和Innodb引擎文件


構成MySQL數據庫和InnoDB存儲引擎表的各種類型文件,組要有以下文件

參數文件:告訴MySQL實例啟動時在哪里可以找到,數據庫文件,並且指定某些初始化參數,這些參數定義了某種內存結構的大小等設置

日志文件:用來記錄MySQL實例對某種條件做出響應時寫入的文件,如錯誤日志文件、二進制日志文件、慢查詢日志文件、查詢日志文件等

socket文件:當UNIX域套接字方式進行連接時需要的文件

pid文件:MySQL實例的進程ID文件

MySQL表結構文件:用來存放MySQL表結構定義文件

存儲引擎文件:因為MySQL表存儲引擎的關系,每個存儲引擎都會有自己的文件來保存各種數據.這些存儲引擎真正存儲了記錄和索引等數據

日志文件

錯誤日志:

錯誤日志文件對MySQL的啟動、運行、關閉過程進行了記錄。MySQL DBA在遇到問題時應該首先查看該文件以便定位問題。該文件不僅記錄了所有的錯誤信息,也記錄了一些警告信息或正確的信息

慢查詢日志:

慢查詢日志可幫助DBA定位可能存在問題的SQL語句,從而進行SQL語句層面的優化。例如,可以在MySQL啟動時設一個閾值,將運行時間超過該值的所有SQL語句都記錄到慢查詢日志文件中該閾值可以通過參數long_query_time來設置,默認值為10,代表10秒

查詢日志:

查詢日志記錄了所有對MySQL數據庫請求的信息,無論這些請求是否得到了正確的執行。默認文件名為:主機名.log

二進制日志:

二進制日志記錄了對MySQL數據庫執行更改的所有操作(update,delete,insert 命令),但是不包括SELECT和SHOW這類操作,因為這類操作對數據本身並沒有修改。

二進制日志主要有以下幾種作用:

恢復:某些數據的恢復需要二進制日志,例如,在一個數據庫全備文件回復后,用戶可以通過二進制日志進行point-in-time的恢復

復制:通過復制和執行二進制日志使一台遠程的MySQL數據庫與一台MySQL數據庫進行同步(master-slave同步)

審計:用戶可以通過二進制日志中的信息來進行審計,判斷是否有對數據庫進行注入的攻擊

當使用事務的表存儲引擎時,所有未提交的二進制日志會被記錄到一個緩存中去,等該事務提交時直接將緩沖中的二進制日志寫入二進制日志文件,而該緩沖區的大小由binlog_cache_size決定,默認大小為32k。binlog_cache_size是基於會話的。在默認情況下,二進制日志並不是在每次寫的時候同步到磁盤。因此,當數據庫所在操作系統發生宕機時可能會有最后一部分數據沒有寫入二進制日志文件中。sync_binlog=1表示采用同步寫磁盤的方式來寫二進制日志,這時寫操作不使用操作系統的緩沖來寫二進制日志

套接字文件:

在unix系統下本地連接MySQL可以采用UNIX域套接字方式,這種方式需要一個套接字(socket)文件。套接字文件可由參數socket控制。一般在/tmp目錄下名為mysql.sock

表結構定義文件:

MySQL插件式存儲引擎的體系結構的關系,MySQL數據的存儲是根據表進行的,每個表都會有與之對應的文件。但不論表采用何種存儲引擎,MySQL都有一個以frm為后綴名的文件

這個文件記錄了該表的表結構定義

表空間文件:

InnoDB采用將存儲的數據按表空間(tablespace)進行存放的設計。在默認配置下會有一個初始大小為10MB,名為idbdata1的文件(該文件是共用表空間),該文件就是默認的表空間文件

設置innodb_data_file_path參數后,所有基於InnoDB存儲引擎的表的數據都會記錄到該共享表空間中。若設置了參數innodb_file_per_table,則用戶可以將每個基於InnoDB存儲引擎的表產生一個獨立表空間。獨立表空間的命名規則為:表名.ibd。通過這樣的方式,用戶不用將所有數據都存放在默認的表空間中。需要注意的是,這些單獨的表空間文件,僅存儲該表的數據、索引和插入緩沖BITMAP等信息,其余信息還是存放在默認的表空間。

重做日志文件:

默認情況下,在InnoDB存儲引擎的數據目錄下會有兩個名為ib_logfile0和ib_logfile1的文件。在MySQL官方手冊中將其稱為InnoDB存儲引擎的日志文件,不過更准確的定義應該是重做日志文件(redo log file)為什么強調是重做日志文件呢?因為重做日志文件對於InnoDB存儲引擎至關重要,它們記錄了對於InnoDB存儲引擎的事務日志.

重做日志文件不能設置的太大,如果設置得很大,在恢復時可能需要很長時間,另一方面又不能設置得太小,否則可能導致一個事務的日志需要多次切換重做日志文件。此外重做日志文件太小會導致頻繁地發生async checkpoint,導致性能的抖動。

重做日志和二進制日志的不同點:

二進制日志會記錄所有與MySQL數據庫有關的日志記錄,包括InnoDB、MyISAM,Heap等其他存儲引擎的日志。而InnoDB存儲引擎的重做日志只記錄有關該存儲引擎本身的事務日志。二進制文件是邏輯日志。而InnoDB存儲引擎的重做日志文件記錄的是關於每個頁的更改情況。

此外,寫入的時間也不同,二進制日志文件僅在事務提交前進行提交,即只寫磁盤一次,不論這時該事務多大。而在事務進行的過程中,卻不斷有重做日志被寫入到重做日志文件中

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM