MySQL日誌管理
一:日誌的組成部分
1.1錯誤日誌
1.2一般查詢日誌
1.3慢查詢日誌
1.4二進位制日誌
1.5中繼日誌
1.6事務日誌
二:儲存引擎介紹
2.1 MyISAM
2.2 InnoDB
2.3 MRG_MYISAM
2.4 CSV
2.5 ARCHIVE
2.6 MEMORY
2.7 BLACKHOLE
1.1錯誤日誌:
主要是用於記錄伺服器運行當中的錯誤資訊
伺服器啟動或者關閉過程中產生的資訊
從伺服器上啟動伺服器程序時產生的資訊
事件排程器執行一個事件時產生的資訊
警告資訊
1.2一般查詢日誌:
任何一個查詢語句所產生的日誌資訊都要記錄下來,所以資訊量比較大,所以一般查詢日誌預設是不開啟的
1.3慢查詢日誌:
一般查詢日誌和慢查詢日誌都是查詢日誌,只不過慢查詢日誌記錄的是查詢時間比較長的,超出long_query_time定義的時間長度,預設為10秒,慢查詢,可以啟動慢查詢日誌,以記錄哪些查詢的執行速度比較慢,幫我們去定位問題的,定位伺服器效能問題,但是執行查詢速度慢,並不意味著,這個查詢本身慢,可能是因為其它資源佔用導致它無法獲取有效的資源而無法執行查詢,因為慢查詢的查詢時間評估是根據它從開始啟動這個查詢到,查詢結束這個時間,而不是在CPU上執行的時間
1.4二進位制日誌
1.4.1二進位制日誌當中所記錄的每一個資訊或者每一個操作,我們稱之為一個二進位制日誌事件
1.4.2二進位制日誌的主要功能
1.複製
2.即時點恢復
1.4.3二進位制日誌事件是基於什麼來實現的呢?
1.可以基於語句:statement
2.還可以基於行:row
3.混合方式(基於語句和基於行):mixed
1.4.4基於行好?還是基於語句好呢?
基於語句:可能一條語句會操縱大量資料,但有可能會帶來非精確值,例如帶當前時間的操作
基於行:直接複製這個語句的結果,直接複製相關資料而不是語句,以便產生精確值
混合方式:mixed
1.4.5二進位制日誌的存放位置
二進位制日誌自己會滾動的,預設存放在資料目錄下,但是建議一定不要和資料目錄放到同一個儲存裝置上,因為每一次儲存裝置的IO操作(就是每一次資料的寫操作),都會引起二進位制日誌的寫操作,所以兩者都會產生
(總結:兩個原因:1效能。2:資料可靠性、安全性)
1.4.6檢視當前系統上被伺服器識別的二進位制日誌
mysql>SHOWBINARYlogs;
1.4.7當前使用的二進位制日誌
mysql>SHOWMASTERSTATUS;
1.4.8檢視某個日誌中的事件
語法:mysql>SHOW BINLOG EVENTS IN '二進位制檔名' [FROM POSITION];
mysql>SHOWBINLOGEVENTSIN'mysql-bin.000006';
mysql>SHOWBINLOGEVENTSIN'mysql-bin.000006'FROM379;
1.4.9在備份以後,需要清除某個日誌檔案之前的日誌檔案
mysql>PURGEBINARYLOGSTO'mysql-bin.000006';
1.4.10手動滾動一下二進位制日誌
mysql>FLUSHLOGS;
1.4.11詳細檢視資料庫輸出二進位制日誌檔案中的內容
mysqlbinlog --start-position --stop-position --start-datetime'yyyy-MM-ddhh:mm:ss' --stop-datetime'yyyy-MM-ddhh:mm:ss'
1.4.12和log相關的伺服器變數說明
mysql>SHOWGLOBALVARIABLESLIKE'%log%';
binlog_format:二進位制日誌的格式
binlog_cache_size:二進位制日誌快取大小,它的值的上限取決於binlog_stmt_cache_size
binlog_stmt_cache_size:和事務相關的二進位制日誌語句快取大小
log_bin:是否啟用二進位制日誌,所以上面的快取大小(binlog_stmt_cache_size)是否生效還要取決於此指令
注意,二進位制日誌功能的開啟,並不意味著它就一定會記錄二進位制日誌,它是總開關,是要不要記錄二進位制日誌,如果要記錄的話,它就可能給我們所指定的二進位制日誌檔案中記錄日誌了。這個log_bin它還可以接受一個檔案路徑,表示把二進位制日誌檔案記錄到另外一個位置,否則只寫個on它就表示記錄在mysql的資料目錄下,叫mysql-bin0001 0002,它指定了二進位制檔案是否啟用,到底記錄在哪個檔案中,而是否真正的記錄日誌,還要取決於另外一個指定sql_log_bin
sql_log_bin:是用於控制是否記錄二進位制日誌檔案的,而log_bin是指定二進位制檔案的輸出路徑的,如果把它的值設定為off,就算你寫了很多DML或者DDL語句,它也不會記錄相關資訊。這個指令非常重要,尤其是在將來實現資料庫恢復的時候,比方說,mysql伺服器奔潰了,我做了邏輯備份,需要把備份檔案匯入到資料庫中,將資料恢復到某一個時刻在這個恢復的過程當中,應該把二進位制日誌的功能關掉了,當恢復結束之後,再開啟
sync_binlog:多長時間同步一次二進位制日誌
expire_logs_days:日誌的過期天數,例如值為30,那麼日誌檔案超過30天以後會自動刪除,所以二進位制日誌是可以自動的去清理的
1.4.13二進位制日誌為什麼要做快取呢?
1.5中繼日誌
從伺服器上,從主伺服器的二進位制日誌檔案中複製而來的事件並儲存為的日誌檔案
1.6事務日誌:ACID將隨機IO轉換為順序IO
事務性儲存引擎用於保證原子性、一致性、隔離性和永續性
innodb_flush_log_at_trx_commit={0|1|2}
0:沒秒同步,並執行磁碟flush操作
1:每事務同步,並執行磁碟flush操作
2:每事務同步,但不執行磁碟flush操作
innodb_log_buffer_size:記憶體快取大小
innodb_log_file_size:日誌檔案大小
innodb_log_files_in_group:日誌寫滿了,需要向另外一個檔案去寫,這些檔案就構成事務日誌組,這裡的值為2表示,有兩個日誌檔案
innodb_log_group_home_dir:事務日誌存放的位置,預設為“./”,這個當前目錄指的是資料目錄
innodb_mirrored_log_groups:是否為日誌組做映象
2.儲存引擎介紹
2.1MyISAM:mysql5.5.8之前預設的儲存引擎
資料儲存格式:
表格式.frm
資料檔案.MYD
索引檔案.MYI
特點:
1.不支援事務,所以也沒有基於事務的特性ACID,所以就少了很多額外的開銷所以效能好,但是未必就一定效能好,也就是說事務性儲存引擎未必就效能差
2.由於它不支援事務,導致它的很多操作都比較粗糙,比如,不支援外來鍵。
3.MyISAM預設情況下只支援表鎖,鎖粒度比較大,導致併發能力不強。鎖本身有些是共享的,比如讀鎖,所以在讀操作非常多的場景下,MyISAM有很好的表現而對於讀寫操作都一樣多的時候,MyISAM效能很差
4.支援索引型別比較多,B樹索引,全文(FULLTEXT)索引,空間索引,表壓縮
2.2InnoDB:
表格式.frm
表空間.ibd 預設情況下MySQL將所有的事務表放到一個表空間中,我們要想使用很多InnoDB的高階特性,比如表壓縮,單表匯入匯出,備份 比如每表一個表空間
事務性引擎
行級鎖
支援B樹索引,聚簇索引,自適應hash索引
使用表空間,支援使用raw磁碟裝置,它可以將資料放在沒有檔案系統的磁碟分割槽上
2.3MRG_MYISAM:
能夠將兩個或兩個以上的MyISAM表合併成一張表處理
2.4CSV:利用文字檔案來儲存資料,方便移植,但不管理起來效能比較差
2.5ARCHIVE:歸檔的,主要目的是可以將表中的資料壓縮存放,只為了做資料探勘的
2.6MEMORY:記憶體儲存引擎,將表中的所有資料都放到記憶體裡面,效能特別好,但是資料安全性沒有保證
2.6BLACKHOLE:黑洞儲存引擎
轉載於:https://blog.51cto.com/fanfusuzi/1652007