mysql log_来吧,了解下mysql有哪些log
概述
mysql里面有很多log,比如用于主從同步的bin_log,防止數據丟失的redo_log,慢查詢日志slow_log等等
redo log
InnoDB有buffer pool(簡稱bp)。
bp是數據庫頁面的緩存,對InnoDB的任何修改操作都會首先在bp的page上進行,然后這樣的頁面將被標記為dirty并被放到專門的flush list上,后續將由master thread或專門的刷臟線程階段性的將這些頁面寫入磁盤(disk or ssd)。這樣的好處是避免每次寫操作都操作磁盤導致大量的隨機IO,階段性的刷臟可以將多次對頁面的修改merge成一次IO操作,同時異步寫入也降低了訪問的時延。然而,如果在dirty page還未刷入磁盤時,server非正常關閉,這些修改操作將會丟失,如果寫入操作正在進行,甚至會由于損壞數據文件導致數據庫不可用。為了避免上述問題的發生,Innodb將所有對頁面的修改操作寫入一個專門的文件,并在數據庫啟動時從此文件進行恢復操作,這個文件就是redo log file。 這樣的技術推遲了bp頁面的刷新,從而提升了數據庫的吞吐,有效的降低了訪問時延。 帶來的問題是額外的寫redo log操作的開銷(順序IO,當然很快),以及數據庫啟動時恢復操作所需的時間。
Undo Log
Undo
Log是為了實現事務的原子性,在MySQL數據庫InnoDB存儲引擎中,還用UndoLog來實現多版本并發控制(簡稱:MVCC)。
事務的原子性(Atomicity)
事務中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在執行的過程中發了錯誤,要回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過。
bin-log
binlog有三種格式:Statement、Row以及Mixed。
Statement
基于SQL語句的復制(statement-based replication,SBR),
每一條會修改數據的sql語句會記錄到binlog中。優點是并不需要記錄每一條sql語句和每一行的數據變化,減少了binlog日志量,節約IO,提高性能。缺點是在某些情況下會導致master-slave中的數據不一致(如sleep()函數, last_insert_id(),以及user-defined functions(udf)等會出現問題)
Row
基于行的復制(row-based replication,RBR),默認
不記錄每條sql語句的上下文信息,僅需記錄哪條數據被修改了,修改成什么樣了。而且不會出現某些特定情況下的存儲過程、或function、或trigger的調用和觸發無法被正確復制的問題。缺點是會產生大量的日志,尤其是alter table的時候會讓日志暴漲。
Mixed
混合模式復制(mixed-based replication,MBR)。
以上兩種模式的混合使用,一般的復制使用STATEMENT模式保存binlog,對于STATEMENT模式無法復制的操作使用ROW模式保存binlog,MySQL會根據執行的SQL語句選擇日志保存方式。
查看binlog_format
show variables like 'binlog_format'
relay_log:
Mysql 主節點將binlog寫入本地,從節點定時請求增量binlog,主節點將binlog同步到從節點。 從節點單獨進程會將binlog
拷貝至本地 relaylog中。
從節點定時重放relay log。
slow-log
慢查詢就是通過設置來記錄超過一定時間的SQL語句,一般通過slowlog找到影響系統性能的sql
開啟slow-log
在my.conf 中增加
slow_query_log = 1 // 開啟slow-log long_query_time = 1 //
查詢時間超過1s的sql會被記錄
分析slow-log
在slow-log目錄下執行
more slow-query.log
Query_time: 查詢耗時
Rows_examined: 檢查了多少條記錄
Rows_sent : 返回了多少行記錄(結果集)
通過分析slow-log文件,可以找到最慢的sql
按Rows_examined 逆序,列出前100條
grep Rows_examined slow-query.log | sort -g -k9 -r|uniq -u |head -100
指定Rows_examined一值,查找
grep -A 1 -B 2 "Rows_examined: 24460" slow-query.log
看到每秒的慢查詢統計
awk '/^#Time:/{print $3,$4,c;c=0}/^# User /{c++}' slow-query.log >/tmp/aaa.log
mysqldumpslow命令
訪問時間最長的10個sql語句
mysqldumpslow -t 10 /usr/local/mysql/log/3304/slowquery.log
訪問次數最多的10個sql語句
mysqldumpslow -s c -t 10 /usr/local/mysql/log/3304/slowquery.log
訪問記錄集最多的10個sql
mysqldumpslow -s r -t 10 /usr/local/mysql/log/3304/slowquery.log
得到按照時間排序的前10條里面含有左連接的查詢語句
mysqldumpslow -s t -t 10 -g “left join” /usr/local/mysql/log/3304/slowquery.log
詳見mysqldumpslow -h
general_log
general_log可以記錄所有執行過的sql,用于排查分析sql性能,但記錄log會增加系統負擔,可以暫時開啟,分析完之后再關閉general_log
開啟general_log
查看general_log
總結
以上是生活随笔為你收集整理的mysql log_来吧,了解下mysql有哪些log的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 松滋市属于哪个市(湖北荆州市松滋地理位置
- 下一篇: mysql all_同样是MySQL的a