MySQL-1-MySQL物理設計

日誌文件

日誌文件

①錯誤日誌:錯誤日誌記錄了MyQL-Server運行過程中所有較爲嚴重的警告和錯誤信息,以及MySQL-Server每次啓動和關閉的詳細信息。在默認情況下錯誤日誌是關閉的,錯誤信息被輸出到標準錯誤輸出(stderr),如果要開啓錯誤日誌功能,需要在啓動時開啓-log-error選項。錯誤日誌默認存放位置在數據目錄下,以hostname.err 命名。但是可以使用命令:--log-error[=file_name],修改其存放目錄和文件名。

爲了方便維護需要,有時候對錯誤日誌中的內容做備份並重新開始記錄,這時候就可以利用MySQL的FLUSH LOGS命令來告訴MySQL備份舊日誌文件並生成新的日誌文件。備份文件名以“.old”結尾。

②二進制日誌:也就是我們常說的binlog。當我們通過“--log-bin[=file_name]”打開了記錄的功能之後,MySQL會將所有修改數據庫數據的query以二進制形式記錄到日誌文件中。這裏面還包括每一條query所執行的時間、所消耗的資源、以及相關的事務信息,所以binlog是事務安全的。

binlog 記錄功能需要“--log-bin[=file_name]”參數的顯式指定才能開啓,如果未指定file_name,則會在數據目錄下記錄爲mysql-bin.******(*代表0~9 之間的某一個數字,來表示該日誌的序號)。

binlog 還有其他一些附加選項參數:

“--max_binlog_size”設置binlog的最大存儲上限,當日志達到該上限時,MySQL會重新創建一個日誌開始繼續記錄。不過偶爾也有超出該設置的binlog 產生,一般都是因爲在即將達到上限時,產生了一個較大的事務,爲了保證事務安全,MySQL 不會將同一個事務分開記錄到兩個binlog 中。

“--binlog-do-db=db_name”參數明確告訴MySQL,需要對某個(db_name)數據庫記錄binlog,如果有了“--binlog-do-db=db_name”參數的顯式指定,MySQL 會忽略針對其他數據庫執行的query,而僅僅記錄針對指定數據庫執行的query。

“--binlog-ignore-db=db_name”與“--binlog-do-db=db_name”完全相反,它顯式指定忽略某個(db_name)數據庫的binlog 記錄,當指定了這個參數之後,MySQL 會記錄指定數據庫以外所有的數據庫的binlog。

注意:參數中的db_name不是指query語句更新的數據所在的數據庫,而是執行query的時候當前所處的數據庫。不論更新哪個數據庫的數據,MySQL 僅僅比較當前連接所處的數據庫(通過use db_name 切換後所在的數據庫)與參數設置的數據庫名,而不會分析query 語句所更新數據所在的數據庫。

mysql-bin.index 文件(binary log index)的功能是記錄所有Binary Log的絕對路徑,保證MySQL各種線程能夠順利的根據它找到所有需要的Binary Log文件。

更新日誌

更新日誌是MySQL在較老的版本上使用的,其功能和binlog基本類似,只不過不是以二進制格式來記錄而是以簡單的文本格式記錄內容。自從MySQL增加了binlog功能之後,就很少使用更新日誌了。從版本5.0開始,MySQL已經不再支持更新日誌了。

查詢日誌

查詢日誌記錄MySQL中所有的query,通過“--log[=fina_name]”來打開該功能。由於記錄了所有的query,包括所有的select,體積比較大,開啓後對性能也有較大的影響,慎用該功能。一般只用於跟蹤某些特殊的sql性能問題纔會短暫打開該功能。默認的查詢日誌文件名爲hostname.log。

慢查詢日誌

慢查詢日誌中記錄的是執行時間較長的query,也就是我們常說的slow query,通過設--log-slow-queries[=file_name]來打開該功能並設置記錄位置和文件名,默認文件名爲hostname-slow.log,默認目錄也是數據目錄。

慢查詢日誌採用的是簡單的文本格式,可以通過各種文本編輯器查看其中的內容。其中記錄了語句執行的時刻、執行所消耗的時間、執行用戶、連接主機等相關信息。MySQL 還提供了專門用來分析慢查詢日誌的工具程序mysqlslowdump,用來幫助數據庫管理人員解決可能存在的性能問題。

Innodb的在線redo日誌

Innodb是一個事務安全的存儲引擎,其事務安全性主要就是通過在線redo日誌和記錄在表空間中的undo信息來保證的。redo日誌中記錄了Innodb所做的所有物理變更和事務信息,通過redo日誌和undo信息,Innodb保證了在任何情況下的事務安全性。Innodb的redo日誌同樣默認存放在數據目錄下,可以通過innodb_log_group_home_dir 來更改設置日誌的存放位置,通過innodb_log_files_in_group 設置日誌的數量。

數據文件

數據庫文件

在MySQL 中每一個數據庫都會在定義好(或者默認)的數據目錄下存在一個以數據庫名字命名的文件夾,用來存放該數據庫中各種表數據文件。不同的MySQL 存儲引擎有各自不同的數據文件,存放位置也有區別。多數存儲引擎的數據文件都存放在和MyISAM 數據文件位置相同的目錄下,但是每個數據文件的擴展名卻各不一樣。

①“.frm”文件:與表相關的元數據(meta)信息都存放在“.frm”文件中,包括表結構的定義信息等。不論是什麼存儲引擎,每一個表都會有一個以表名命名的“.frm”文件。所有的“.frm”文件都存放在所屬數據庫的文件夾下面。

②“.MYD”文件:MyISAM 存儲引擎專用,存放MyISAM 表的數據。每一個MyISAM 表都會有一個“.MYD”文件與之對應,同樣存放於所屬數據庫的文件夾下和“.frm”文件在一起。

③“.MYI”文件:MyISAM 存儲引擎專用,主要存放MyISAM表的索引相關信息。對於MyISAM存儲來說,可以被cache的內容主要就是來源於“.MYI”文件中。每一個MyISAM表對應一個“.MYI”文件,存放位置和“.frm”以及“.MYD”一樣。

④“.ibd”文件和ibdata文件:這兩種文件都是存放Innodb數據的文件,因爲Innodb數據存儲方式能夠通過配置來決定是使用共享表空間存放存儲數據,還是獨享表空間存放存儲數據。

獨享表空間存儲方式使用“.ibd”文件來存放數據,且每個表一個“.ibd”文件,文件存放在和MyISAM 數據相同的位置。

如果選用共享存儲表空間來存放數據,則會使用ibdata 文件來存放,所有表共同使用一個(或者多個,可自行配置)ibdata 文件。ibdata 文件可以通過innodb_data_home_dir 和innodb_data_file_path兩個參數共同配置組成, innodb_data_home_dir 配置數據存放的總目錄, 而innodb_data_file_path 配置每一個文件的名稱。當然, 也可以不配置innodb_data_home_dir 而直接在innodb_data_file_path 參數配置的時候使用絕對路徑來完成配置。innodb_data_file_path 中可以一次配置多個ibdata 文件。文件可以是指定大小,也可以是自動擴展的,但是Innodb限制了僅僅只有最後一個ibdata 文件能夠配置成自動擴展類型。當我們需要添加新的ibdata 文件的時候,只能添加在innodb_data_file_path配置的最後,而且必須重啓MySQL 才能完成ibdata 的添加工作。不過如果我們使用獨享表空間存儲方式的話,就不會有這樣的問題,但是如果要使用裸設備的話,每個表一個裸設備,可能造成裸設備數量非常大,而且不太容易控制大小,實現比較困難,而共享表空間卻不會有這個問題,容易控制裸設備數量。

主從文件

①master.info文件:存在於Slave端的數據目錄下,裏面存放了該Slave的Master端的相關信息,包括Master的主機地址、連接用戶、連接密碼、連接端口、當前日誌位置、已經讀取到的日誌位置等信息。

②relay log和relay log index:

mysql-relay-bin.xxxxxn文件用於存放Slave端的I/O線程從Master端所讀取到的Binary Log信息,然後由Slave端的SQL線程從該relay log中讀取並解析相應的日誌信息,轉化成Master所執行的SQL語句,然後在Slave端應用。

mysql-relay-bin.index文件的功能類似於mysql-bin.index,同樣是記錄日誌的存放位置的絕對路徑,只不過他所記錄的不是Binary Log,而是Relay Log。

③relay-log.info 文件:類似於master.info,存放通過Slave 的I/O線程寫入到本地的relay log的相關信息。供Slave端的SQL 線程以及某些管理操作隨時能夠獲取當前複製的相關信息。

其他文件

①系統配置文件:MySQL的系統配置文件一般都是“my.cnf”,Unix/Linux下默認存放在"/etc"目錄下,Windows一般存放在“c:/windows”目錄下面。

“my.cnf”文件中包含多種參數選項組(group),每一種參數組都通過中括號給定了固定的組名,如“[mysqld]”組中包括了mysqld服務啓動時候的初始化參數、“[client]”組中包含着客戶端工具程序可以讀取的參數,此外還有其他針對於各個客戶端軟件的特定參數組,如mysql程序使用的“[mysql]”,mysqlchk使用的“[mysqlchk]”,等等。

②pid file:是mysqld 應用程序在Unix/Linux 環境下的一個進程文件,和許多其他Unix/Linux 服務端程序一樣,存放着自己的進程id。

③socket file:也是在Unix/Linux環境下才有的,用戶在Unix/Linux 環境下客戶端連接可以不通過TCP/IP網絡而直接使用Unix Socket來連接MySQL。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章