參數文件
當MySQL示例啟動時,數據庫會先去讀一個配置參數文件,用來尋找數據庫的各種文件所在位置以及指定某些初始化參數,這些參數通常定義了某種內存結構有多大等。在默認情況下,MySQL實例會按照一定的順序在指定的位置進行讀取,可以通過命令mysql --help | grep my.cnf
來尋找。
如果啟動時沒有找到參數文件,這時所有的參數值取決於編譯MySQL時指定的默認值和源代碼中指定參數的默認值。(Oracle數據庫啟動時,如果找不到參數文件,是不能進行裝載操作的。)
可以通過show variables like 'innodb_buffer%'
命令查看數據庫所有參數,也可以通過查看information_schema架構下的GLOBAL_VARIABLES視圖進行查找(不建議)。
參數類型分為動態參數和靜態參數,動態參數可以在MySQL實例運行中進行更改,靜態參數不能更改。可以通過SET | [global | session] system_var_name = expr | [@@global. | @@session. | @@] system_var_name = expr
日志文件
日志文件記錄了影響MySQL數據庫的各種類型活動,包括:
- 錯誤日志
- 二進制日志
- 慢查詢日志
- 查詢日志
錯誤日志(error log)
對MySQL的啟動、運行、關閉過程進行了記錄。文件不僅記錄了所有的錯誤信息,也記錄一些警告信息或正確的信息。用戶可以通過命令show variables like 'log_error'
定位該文件。
慢查詢日志(slow log)
慢查詢日志可以幫助DBA定位可能存在問題的SQL語句,從而進行SQL語句層面的優化。例如,可以在MySQL啟動時設置一個閾值,將運行時間超過該值得所有SQL語句都記錄到慢查詢日志文件中。通過參數long_query_time來設置,默認值為10,代表10秒。
默認情況下,MySQL數據庫不啟用慢查詢日志,可以通過參數slow_query_log設置。
log-slow-queries:舊版(5.6以下版本)MySQL數據庫慢查詢日志存儲路徑。可以不設置該參數,系統則會默認給一個缺省的文件host_name-slow.log。slow-query-log-file:新版(5.6及以上版本)MySQL數據庫慢查詢日志存儲路徑。可以不設置該參數,系統則會默認給一個缺省的文件host_name-slow.log
另外一個和慢查詢日志有關的參數是log-queries-not-using-indexes,如果運行的SQL沒有使用索引,則MySQL數據庫同樣會將SQL語句記錄到慢查詢日志文件。MySQL 5.6.5版本開始新增參數log_throttle_queries_not_using_indexs,用來表示每分鍾允許記錄到show log的且未使用索引的SQL語句次數。該值默認為0,表示沒有限制。(這幾個參數在MySQL官方文檔沒有找到!!!)
MySQL提供的mysqldumpslow命令可以直觀的查看慢查詢日志的內容。
從MySQL 5.1開始慢查詢支持將記錄放入mysql架構下的slow_log表。參數log_output指定了慢查詢輸出的格式,默認為FILE,可以將它設置為TABLE,就可以查詢slow_log表了。
查詢日志
查詢日志記錄了所有對MySQL數據庫請求的信息,無論這些請求是否正確執行。默認文件名為:主機名.log。查詢日志從MySQL 5.1開始也支持放入mysql架構下的general_log表中。
二進制日志
二進制日志記錄了對MySQL數據庫執行更改的所有操作,但是不包括select和show這里操作,因為這類操作對數據庫本身沒有修改。然而,若操作本身沒有導致數據庫發生變化,那么該操作可能也會寫入二進制日志。
二進制日志的幾個作用:
- 恢復:某些數據的恢復需要二進制日志,例如,在一個數據庫全備份文件恢復后,用戶可以通過二進制日志進行point_in_time的恢復。
- 復制:通過復制和執行二進制日志使一台運行的MySQL數據庫與一台MySQL數據庫進行實時同步。
- 審計:用戶可以通過二進制日志中的信息來進行審計,判斷是否對數據庫進行注入的攻擊。
可以通過參數binlog_format配置二進制存儲的格式。在使用恢復和復制同步時,有不同的效果。
套接字文件
在UNIX系統下本地連接MySQL可以采用UNIX域套接字方式,這種方式需要一個套接字文件。show variables like 'socket'\G;
命名可以查看套接字文件。
pid文件
但MySQL實例啟動時,會將自己的進程ID寫入一個文件中——該文件即為pid文件。由參數pid_file控制。
表結構定義文件
因為MySQL插件式存儲引擎的體系結構的關系,MySQL數據的存儲時根據表進行的,每個表都會有與之對應的文件。但是不論采用何種存儲引擎,MySQL都有一個以frm為后綴名的文件,這個文件記錄了該表的表結構定義,還用來記錄視圖的定義。
InnoDB存儲引擎文件
表空間文件
InnoDB采用將存儲的數據按表空間進行存放的設計。在默認配置下會有一個初始化大小為10MB,名為ibdata1的文件。該文件就是默認的表空間文件(共享表空間),可以通過參數innodb_data_file_path設置。如
[mysqld]
innodb_data_file_path = /db/ibdata1:2000M;/dr2/db/ibdata2:2000M:autoextend
這里將/db/ibdata1和/dr2/db/ibdata2兩個文件組成表空間。大小為2000,可以自動增長(autoextend)。
設置innodb_data_file_path參數后,所有基於InnoDB存儲引擎的表的數據都會記錄到該共享表空間中。若設置參數innodb_file_per_table,則用戶可以將每個基於InnoDB存儲引擎的表產生一個獨立表空間。獨立表空間的命名規則為:表名.idb。
需要注意:獨立的表空間文件僅存儲該表的數據,索引和插入緩沖BITMAP等信息,其余信息還是存放在默認表空間中。
重做日志文件
在默認情況下,在InnoDB存儲引擎的數據目錄下會有兩個名為ib_logfile0和ib_logfile1的文件。每個InnoDB存儲引擎至少有1個重做日志文件組,每個文件組下至少有2個重做日志文件。
影響重做日志文件的屬性:
- innodb_log_file_size:指定每個重做日志文件的大小。在InnoDB 1.2.x版本之前不得大於等於4GB,在InnoDB 1.2.x之后擴大為512GB。
- innodb_log_files_in_group:指定了日志文件組中重做日志文件的數量,默認為2。
- innodb_mirrored_log_groups:指定了日志鏡像文件組的數量,默認為1,表示只有一個文件組,沒有鏡像。
- innodb_log_group_home_dir:指定了日志文件所在路徑,默認為./,表示在MySQL數據庫的數據目錄下。
轉載請注明出處。
作者:wuxiwei
出處:http://www.cnblogs.com/wxw16/p/6232771.html