MySQL日誌類別:
通常查詢日誌:log,general_log,log_output
慢查詢日誌:查詢執行的時長超過指定的查詢,即爲慢查詢;
錯誤日誌:一般時指錯誤日誌的相關信息,一般用服務器關閉和啓動的日誌信息,服務器運行過程當中的錯誤信息,還能夠記錄警告信息。
二進制日誌:只是跟修改相關的操做,能夠理解爲一個重作日誌,用於複製的基本憑據;
中繼日誌:它其實跟複製相關的,與二進制日誌幾乎相同;mysql
事物日誌:隨機I/O轉換爲順序I/O,通常在兩個文件存儲,一個存滿了就換另一個存sql
查詢日誌數據庫
log={ON|OFF} # 是否記錄全部語句的日誌信息於通常查詢日誌文件(general_log)中; log_output={TABLE | FILE | NONE} # 定義log保存形式,none表示不保存日誌;table和file能夠同時出現,用逗號分隔便可; general_log={ON|OFF} # 是否啓動查詢日誌; general_log_file # 定義通常查詢日誌保存的文件; mysql > SET GOLBAL general_log ={OFF|ON};啓用或關閉通常查詢日誌 mysql > SET GLOGAL log_output=’TABLE’;選項能夠控制log的存放方法,table表示以表格的方式存放。
注:安全
若想開啓查詢日誌,則log和general_log參數都必須處於ON狀態;bash
對於繁忙的MySQL,不建議開啓此日誌;服務器
慢查詢日誌:查詢執行時長超過指定時長的查詢,即爲慢查詢多線程
long_query_time # 定義慢查詢的時長; slow_query_log {ON|OFF} # 全局參數,設定是否啓用慢查詢日誌;它的輸出位置也取決於log_output的值; slow_query_log_file # 定義日誌文件路徑及名稱; log_slow_filter # 慢查詢日誌過濾類型; log_slow_queries # 是否啓用慢查詢日誌,會話級別的; log_rate_limit=1 # 定義其日誌記錄速率; log_slow_verbosity # 是否記錄詳細格式的日誌信息;
錯誤日誌架構
主要記錄內容:函數
服務器啓動和關閉過程當中的信息;工具
服務器運行過程當中的錯誤信息;
事件調度器運行一個事件時產生的信息;
在複製架構中從服務器上啓動從服務器線程時產生的信息;
參數設定:
log_error = /path/to/error_log_file # 定義錯誤日誌文件 log_warnnings = {1|0} # 是否記錄警告信息於錯誤日誌中
二進制日誌:
記錄了對MySQL數據庫進行的修改操做,,影響數據潛在的內容的信息,select的是不會被記錄到二進制日誌的,二進制日誌也叫複製日誌,默認在數據目錄下,專門查看日誌的命令是:mysqlbinlog
功能:一、作時間點恢復,要想從哪一個時間點恢復咱們能夠手動調的,因此這是一個備份恢復的重要工具
二、 mysql主從複製架構中使用;
由於咱們的MySQL數據是單進程多線程的工做機制,因此他能夠同時發起不少們修改的語句,可是咱們服務器使用的日誌只有一個,那若是同時進行的多個線程 的請求都同時往日誌文件中寫數據,日誌文件就成了資源熱點,也叫資源徵用點,那就會混亂不堪,爲了解決這種問題,這裏,當咱們的線程要往二進制日誌文件中 寫數據的時候,它不是直接寫到日誌文件中去,仍是統一寫到日誌緩衝區中,由日誌緩衝區逐一寫入日誌文件中去,然而咱們的日誌文件對於一個很繁忙的服務器來 講,天天都會產生很大的數據量,若是全部的二進制日誌數據都寫在一個日誌文件中,那管理起來就特色的不方便了,也很不合理,如是日誌文件丟失,那全部的日 志數據信息都丟失了,不該該這麼作,那咱們就有日誌滾動的機制了,二進制日誌咱們能夠本身定義,有兩種定義日誌滾致力的方法,一種是按大小來定義的,好比 說咱們定義一個日誌文件的大小爲1G,那他存儲一了大概1G左右就會滾動,使用下一個日誌來存放二進制日誌數據;另外一種能夠按時間來定義的,好比說一週滾 動一次,或者說一個月,一天滾動一次均可以;或者每次重啓服務時或者執行FLUSH LOGS命令時都會滾動一第二天志。
MariaDB [(none)]> SHOW MASTER STATUS;能夠查看當前服務器正在使用的二進制日誌文件以及下一下個事件開始時基於的位置Position,若是當前使用的是00004,那麼0000一、2、3將不會再被使用,由於已經被滾動過去了。 MariaDB [hellodb]> SHOW BINARY LOGS;查看當前系統上全部的的二進制日誌文件,其實就是數據目錄下mysql-bin.index文件中的信息,這個文件就是保存已經滾動過的日誌文件的條目。 MariaDB [hellodb]> flush logs; 清除日誌文件的命令:PURGE MariaDB [hellodb]> show binlog events in ‘log_file’; # mysqlbinlog --start-time --stop-time --start- # mysqlbinlog --start-protion=1139 mysql-bin.000001:在命令行中查看某個日誌文件的某個位置點日後所記錄的數據信息。能夠用輸出重定向保存到某個文件中去未來用於執行的。 server-id:服務器的身份標識, MariaDB [hellodb]> SELECT VERSION();查看當前數據庫的版本 MariaDB [(none)]> SHOW BINLOG EVENTS IN 'mysql-bin.000001' FROM 1139;查看某個二進制日誌文件中從哪一個位置日後發生的事件信息。 MariaDB [(none)]> SHOW BINLOG EVENTS IN 'mysql-bin.000006'\G查看某個二進制文件中在全部時間點和結束點等相關的信息。
MySQL記錄二進制日誌的格式:
statement:基於語句
缺陷:執行帶時間函數的語句時,會致使主從服務器執行結果不一致;
如 insert into tb1 value (current_date());
row:基於行
缺陷:批量更新操做將致使從服務器進行更多的操做 update tb2 set salary=salary+1000;
mixed:混合模式,由MySQL自行判斷選擇適合的方式基於語句或基於行記錄日誌;
二進制日誌文件的內容格式
事件發生的日期和時間
服務器id:server_id
事件的結束位置:end_log_pos
事件的類型:如Query,GTID等
原服務器生成此事件時的線程id:thread_id
語句的時間戳和寫入二進制日誌文件的時間差,exec_time
錯誤代碼:error_code
事件位置:at #,至關於下一事件的開始位置
設定參數:
og_bin = {ON|OFF|FileName} # 全局變量,控制二進制文件位置 log_bin_trust_function_creators # 全局變量,僅在啓用二進制日誌時有效,用於控制建立存儲函數時若是會致使不安全的事件是否禁止建立存儲函數 sql_log_bin = {ON|OFF} # 會話級別,用於控制二進制日誌信息是否記錄進日誌文件 sync_binlog # 設定多久同步一次二進制日誌至磁盤文件中,0表示不一樣步,任何正數值都表示對二進制每多少次寫操做以後同步一次; binlog_format={statement|row|mixed} # 指定二進制日誌的類型 max_binlog_cache_size= # 二進制日誌緩衝空間大小,僅用於緩衝事務類的語句, 其上限由max_binlog_stmt_cache_size決定 max_binlog_size= # 二進制日誌文件大小上限,單位字節,默認大小1G # 注:切勿將二進制日誌與數據文件放在同一磁盤上,減小磁盤I/O
中繼日誌:它其實跟複製相關的,與二進制日誌幾乎相同,只不過它不是用於記錄事件的,而是做爲讀取數據的源而且在本地執行的,固然中繼日誌是在從服務器上。
設定參數:
MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE
'%relay%'
;查看中繼日誌的相關參數信息
relay_log=file_name # 設定中繼日誌的文件名稱 relay_log_index=file_name # 設定中繼日誌的索引文件名,默認爲爲數據目錄中的host_name-relay-bin.index relay_log_purge={ON|OFF} # 是否自動清理再也不須要的中繼日誌 relay_log_space_limit= # 設定用於存儲全部中繼日誌文件的可用空間大小,0表示不限制
relay_log_recovery:跟中繼日誌自動恢復相關的relay_log={空}:是否啓用中繼日誌的
事務日誌:
暫存事務提交的數據,實現將隨機I/O轉換成順序I/O;
事務數據提交流程:innodb_buffer-->事務日誌-->數據文件;
事務日誌文件組,至少應該有2個日誌文件,通常保存在數據目錄下,爲ib_logfile0和ib_logfile1;
注意事項:
儘量使用小事務以提高事務引擎的性能;由於事務越大,回滾開銷越大;
崩潰恢復:將提交的事務從事務日誌中同步至數據文件,將未提交的事務執行回滾操做,以保證數據一致性;
避免磁盤故障致使事務文件丟失:對事務日誌所在的磁盤作數據鏡像;
事務日誌文件和數據文件應分離存放:防止對同一磁盤過於頻繁的I/O操做;
設定參數: