1. 程式人生 > >Mysql 日誌總結

Mysql 日誌總結

Mysql 日誌總結

主要包含:錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進位制日誌

1. 錯誤日誌

記錄MySQL的啟動、停止資訊以及在MySQL執行過程中的錯資訊。

(預設啟)

引數:

log_error(預設開啟)

log_error=[path/[file_name]],如果不指定檔名,則預設hostname.err.

修改後重啟生效

log_warnings(在5.7.2之後被不建議使用,取而代之的是log_error_verbosity

0:資料庫啟動時候載入的內容+資料庫啟動後的錯誤+從庫停止,

會有記錄(從庫)

1 (預設):Aborted connection(5.6半同步,如果從庫超時,則日誌會記錄

)

log_error_verbosity(5.7.2被引入)

Verbosity Value Message Types Logged

1 Errors only

2 Errors and warnings

3(預設) Errors, warnings, and notes

檢視錯誤日誌的位置:

show variables like 'log_error';

刪除錯誤日誌 —Error log

<5.5.7版本時,flush logs會將filename.err命名為filename.err_old

>5.5.7版本則只是會重建錯誤日誌,也就是除非錯誤日誌被刪除了會重建一個;否則不會對線上錯誤日誌有影響。

注意:刪除錯誤日誌後,不會自動重建。需要flush logs或者重啟數

據庫。

mysqladmin -u root -p flush-logs

或者

mysql>flush logs;

2. 查詢日誌

預設情況下查詢日誌是關閉的。由於查詢日誌會記錄使用者的所有操作,其中還包含增刪查改等資訊,在併發操作大的環境下會產生大量的資訊從而導致不必要的磁碟IO,會影響mysql的效能的。

引數:

general_log(預設關閉){0-關閉,1-開啟} 可以線上開啟和關閉;

set global general_log='ON';

general_log_file=file_name,不指定檔名只指定路徑路徑則為hostname.log

關於表mysql.general_log表:

select * from mysql.general_log;

• 表mysql.general_log不支援insertupdatedelete

• 表是不同步的(複製),不寫binlog

dump的時候會被忽略掉,5.6.6以後只能dump表結構,內容不會dump出來.

log_output=TABLE | FILE | NONE   --查詢日誌的記錄方式

TABLE:便於統計,寫入一個CSV引擎的表中。

FILE:預設。

TABLEFILE:便於統計,寫入一個CSV引擎的表中。

NONE:任何地方都不寫。

注意:如果log_output=NONE但是general_log1,則預設不寫常規日誌。

set sql_log_off=ON當前操作不寫常規日誌。

刪除、備份general 日誌:

[[email protected] mysql]# mv mytest02.log mytest02.log.bak

[[email protected] mysql]# mysqladmin -uroot -proot flush-logs

一定記住flush logs;或者mysqladmin flush-logs

3. 慢查詢日誌

MySQL的慢查詢日誌是MySQL提供的一種日誌記錄,它用來記錄在MySQL中響應時間超過閥值(long_query_timemin_examined_row_limitlog_slow_admin_statements andlog_queries_not_using_indexes)的語句。(預設關閉)

注意:慢查詢日誌不會計算語句在開始執行之前等待鎖的時間(initial slow query),mysqld只會從語句等待的鎖釋放掉,並開始執行開始計算時間(執行開始後的鎖定時間會記錄)。所以慢查詢日誌中的語句順序和語句的發出順序或者general log的順序不同。

引數:

slow_query_log(預設關閉){0-關閉,1-開啟} 可以線上開啟和關閉;

set global slow_query_log='ON';

slow_query_log_file=file_name,不指定路徑則為hostname-slow.log

long_query_timeSQL執行的閥值

log_output=TABLE | FILE | NONE

TABLE:便於統計,寫入一個CSV引擎的表mysql.slow_log中。

FILE:預設。

TABLEFILE:便於統計,寫入一個CSV引擎的表mysql.slow_log中。

NONE:任何地方都不寫。

注意:如果log_output=NONE但是slow_query_log1,則預設不寫常規日誌。

log_queries_not_using_indexes:記錄沒有用索引的查詢

log_throttle_queries_not_using_indexes:記錄沒有使用索引查詢的語句條數在一分鐘內記錄的條數

*如何消除上線後未使用索引查詢的隱患。線上開啟5秒即可。

min_examined_row_limit:要檢查的行數大於等於N時才記錄為慢查詢,前提是必須滿足long_query_timelog-queries-not-using-indexes約束。

log_slow_admin_statements:管理語句是否記錄ALTER TABLE, ANALYZE TABLE, CHECK TABLE,

CREATE INDEX, DROP INDEX, OPTIMIZE TABLE,and REPAIR TABLE.

log_slow_slave_statements:從庫的語句執行是否記錄

分析慢查詢日誌:

mysqldumpslow -s r -t 10 /database/mysql/slow-log

 得到返回記錄集最多的10個查詢。

mysqldumpslow -s t -t 10 -g  “left join”  /database/mysql/slow-log

 得到按照時間排序的前10條裡面含有左連線的查詢語句。

輸出結果分析

 

4. 二進位制日誌

以“事件”的形式儲存,描述資料的更改,包含關於每個更新資料庫的語句的執行時間。

注意:binlog只記錄完整事務。

目的:最大可能地恢復資料庫

啟用該選項資料庫效能降低1%,但保障資料庫完整性,對於重要資料庫值得以效能換完整。

引數:

log_bin(預設關閉){0-關閉,1-開啟} 不可以線上開啟和關閉;

修改my.cnf中的引數!

log_bin_basename,不指定路徑則為hostname-bin.00000N

log_bin_index,不置頂路徑則為hostname-bin.index

注意:

所有的日誌都建議自己起名字,不要用預設!

binlog_cache_size:記憶體中快取二進位制的緩衝區大小。

注意:對於大的事務,二進位制日誌會超過max_binlog_size設定的值。也

即是事務僅僅寫入一個二進位制日誌。

二進位制日誌記錄在語句或事務完成之後立即執行(而不是在任何鎖釋放或任何提交完成之前寫入),這確保日誌以提交順序登入。對於不支援事務的表,執行之後馬上會被記錄到二進位制日誌中去。對於未提交的事務中,更改事務表(例如InnoDB表)的所有更新(UPDATEDELETEINSERT)將被快取,直到伺服器收到COMMIT語句。 在這一點上,mysqld在執行COMMIT之前將整個事務寫入二進位制日誌。對非事務性表的修改無法回滾。 如果回滾的事務包括對非事務性表的修改,則會在最後使⽤用ROLLBACK語句記錄整個事務,以確保對這些表的修改進行復制。

當處理事務的執行緒開始時,它將緩衝區語句分配一個binlog_cache_size緩衝區。 如果一個語句大於這個值,執行緒將開啟一個臨時檔案來儲存事務。 當執行緒結束時,臨時檔案被刪除。

binlog_cache_use狀態變數顯示用於儲存語句的此緩衝區(可能還有一個臨時檔案)的事務數。

binlog_cache_disk_use狀態變數顯示有多少這些事務實際上必須使用臨時檔案。

這兩個變數可用於將binlog_cache_size調整到足夠大的值,以避免使用臨時檔案。

max_binlog_cache_size系統變數(預設為4GB,也是最大值)可用於限制用於快取多語

句事務的總大小。 如果一個事務大於這個多個位元組,它將失敗並回滾。 最小值為4096

sync_binlog{0,1}二進位制內容從緩衝區落入磁碟的時機。

5.7.7以後,sync_binlog引數被預設設定為1,減少了binlog中的

不一致可能性。

expire_logs_days:日誌過期時間,一定要和備份相結合。

binlog_formatbinlog模式。

• 基於語句句:當時語句句的原樣寫⼊入。

• 基於⾏行行:只記錄受影響的⾏行行。

• 混合模式:預設⽤用語句句模式,遇到下⾯面情況⽤用基於⾏行行:

uuid()

UDF

temporary

rows_found/row_count

user()/current_user()

LOAD_FILE()

二進位制日誌的維護:

• 切換二進位制日誌:

flush logs;

• 清理所有二進位制日誌,並從新開始記錄二進位制日誌:

reset master;

• 清理指定編號之前的二進位制日誌:

purge binary logs to 3306-bin.000005;

• 清理指定時間前的二進位制日誌:

purge binary logs before '2017-02-25 19:30:57';

不建議手動rm刪除二進位制日誌,會造成index檔案不一致。

5. 事務日誌

事務日誌(InnoDB特有的日誌)可以幫助提高事務的效率。使用事務日誌,儲存引擎在修改表的資料時只需要修改其記憶體拷貝,再把改修改行為記錄到持久在硬碟上的事務日誌中,而不用每次都將修改的資料本身持久到磁碟。事務日誌採用追加的方式,因此寫日誌的操作是磁碟上一小塊區域內的順序I/O,而不像隨機I/O需要在磁碟的多個地方移動磁頭,所以採用事務日誌的方式相對來說要快得多。事務日誌持久以後,記憶體中被修改的資料在後臺可以慢慢的刷回到磁碟。目前大多數的儲存引擎都是這樣實現的,我們通常稱之為預寫式日誌,修改資料需要寫兩次磁碟。

如果資料的修改已經記錄到事務日誌並持久化,但資料本身還沒有寫回磁碟,此時系統崩潰,儲存引擎在重啟時能夠自動恢復這部分修改的資料。具有的恢復方式則視儲存引擎而定。

引數:

innodb_log_group_home_dir

InnoDB重做日誌檔案的目錄路徑。 如果沒有指定任何InnoDB日誌變數,則預設是在

MySQL資料目錄中建立兩個名為ib_logfile0ib_logfile1的檔案。

innodb_log_files_in_group

日誌組中的日誌檔案數。 InnoDB以迴圈方式寫入檔案。 預設(和推薦)值為2.檔案的位置由innodb_log_group_home_dir指定。

innodb_log_file_size

日誌組中每個日誌檔案的大小(以位元組為單位)。 日誌檔案(innodb_log_file_size *innodb_log_files_in_group)的組合大小不能超過略小於512GB的最大值。預設值為48M。最小值為4M5.7.11

innodb_file_per_table

可以修改InnoDB為獨立表空間模式,每個資料庫的每個表都會生成一個數據空間。

獨立表空間優點:

1. 每個表都有自已獨立的表空間。

2. 每個表的資料和索引都會存在自已的表空間中。

3. 可以實現單表在不同的資料庫中移動。

4. 空間可以回收(除drop table操作處,表空不能自已回收)

支援線上修改:

SET GLOBAL innodb_file_per_table=1;

如何將表從系統表空間中分離出來

SET GLOBAL innodb_file_per_table=1;

ALTER TABLE table_name ENGINE=InnoDB;

innodb_flush_log_at_trx_commit           

0log buffer將每秒一次地寫入log file中,並且log fileflush(刷到磁碟)操作同時進行。該模式下在事務提交的時候,不會主動觸發寫入磁碟的操作。

1:每次事務提交時MySQL都會把log buffer的資料寫入log file,並且flush(刷到磁碟)中去,該模式為系統預設。

2:每次事務提交時MySQL都會把log buffer的資料寫入log file,但是flush(刷到磁碟)操作並不會同時進行。該模式下,MySQL會每秒執行一次 flush(刷到磁碟)操作。

相關推薦

Mysql 日誌總結

Mysql 日誌總結主要包含:錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進位制日誌1. 錯誤日誌記錄MySQL的啟動、停止資訊以及在MySQL執行過程中的錯誤資訊。(預設開啟)引數:log_error(預設開啟)log_error=[path/[file_name]],如果

MySQL 慢查詢日誌總結

文章轉載於http://blog.jobbole.com/105792/ 慢查詢日誌概念 MySQL的慢查詢日誌是MySQL提供的一種日誌記錄,它用來記錄在MySQL中響應時間超過閥值的語句,具體指執行時間超過long_query_time值的SQL,則會被記錄到慢查詢日誌中。long_qu

MySQL慢查詢日誌總結

mysql> show variables like '%log_output%';+---------------+-------+| Variable_name | Value |+---------------+-------+| log_output    | FILE  |+---------

mysql學習總結(二進位制日誌、伺服器變數、事務日誌

1、mysql的二進位制日誌: 記錄導致資料改變或潛在導致資料帶變的SQL語句; 功能:用於“重放“日誌中的事務 Log_name :日誌名 Pos:起始位置 Ev

mysql基礎總結

更新 一個 table 命令 des 文本 found 事務 desc 1、聲明遊標:DECLARE CURSOR 2、使用creat table語句的FULLTEXT子語句,在創建基本表時,可以啟用全文本搜索 3、撤銷數據庫中已經存在的表S,使用:drop table S

rsyslog+LogAnalyzer+MySQL日誌服務器

rsyslog+loganalyzer+mysql日誌服務器ryslog 是一個快速處理收集系統日誌的程序,提供了高性能、安全功能和模塊化設計。rsyslog 是syslog的升級版,它將多種來源輸入輸出轉換結果到目的地,據官網介紹,現在可以處理100萬條信息LogAnalyzer 是一款syslog日誌和其

mysql索引總結

不同 正在 鍵值 tex nbsp 由於 5.0 不一定 red 今天抽空整理了下mysql的幾種索引類型,以備加深印象: 在MySQL 中,主要有四種類型的索引,分別為:B-Tree 索引,Hash 索引,Fulltext 索引和RTree索引 1、B-Tree 索引

MySQL日誌文件與分析

column nbsp 去重 ref bin pri fin n) 比較 1.查詢日誌、慢查詢日誌、二進制日誌對比 查詢日誌 general_log 會記錄用戶的所有操作,其中包含增刪查改等 可以指定輸出為表 慢查詢日誌 slow_log 只要超過定義時間的

MySQL 學習總結2

單行函數 聯合查詢 外連接 int 查詢 where 結果 查詢語句 相同 function 函數 函數的作用比較大,一般多用在select查詢語句和where條件語句之後。按照函數返回的結果, 可以分為:多行函數和單行函數;所謂的單行函數就是將每條數據進行獨立的計

MySQL 日誌管理

lib gen 查看 ner 存儲 ots min mysql col 一、 日誌文件清理 1. 查看普通查詢日誌文件大小 [[email protected]/* */ ~]$ sudo du -sh /var/lib/mysql/bogon.log 3.

Windows下MySQL日誌管理(Linux相似)1.1

-h 發現 註意 line _id mod sni ans avi 為什麽要開啟數據庫的日誌 當多個程序都在使用數據庫的時候。我們的數據庫有時候竟然還會掛掉。想找原因?發現沒日誌可查。各個程序自己的日誌又不能找到關鍵原因。所以要開啟數據庫的日誌系統。 控制日誌大

mysql經驗總結

https http mysql sta ons conn ant code start 1. 連接mysql遇到 Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2),mysql沒

MySQL學習總結-演示不同隔離級別下的並發問題

-- val 事務提交 賬戶 演示 zab serializa table into 演示不同隔離級別下的並發問題 1.當把事務的隔離級別設置為read uncommitted,會引發臟讀、不可重復讀和虛讀A窗口set transaction isolation level

mysql 日誌文件mysql-bin文件清除方法,和mysql-bin相關文件的配置

設置 row exp ted 基本 安全 ret 保留 span 默認情況下mysql會一直保留mysql-bin文件,這樣到一定時候,磁盤可能會被撐滿,這時候是否可以刪除這些文件呢,是否可以安全刪除,是個問題。 首先要說明一下,這些文件都是mysql的日誌文件,如果不做主

mysql實踐總結

read tails ted 增加 自動 err 搜索 where xxx 首先介紹mysql的安裝和基本使用、進階操作、講解mysql的導入導出和自動備份,然後介紹安全模式修改密碼和mysql的全文本搜索功能,最後記錄了個人使用mysql中遇到的問題集,閑暇時我也會多看幾

mysql索引總結(3)-MySQL聚簇索引和非聚簇索引

部分 inno ext 找到 存儲位置 sso 影響 直接 支持 非聚簇索引 索引節點的葉子頁面就好比一片葉子。葉子頭便是索引鍵值。 先創建一張表: CREATE TABLE `user` ( `id` INT NOT NULL , `name` VARCHAR NOT

MYSQL語法總結

1.0 dump modify mem info 銷售 金額 help mysq # mysql --> 常用腳本匯總### // 當前時間的timestamp.new Timestamp(System.currentTimeMillis()) ### // 表存在就

MySQL學習總結----表的操作

mysqlMySQL學習總結----表的操作=================================================================================一、MySQL中的表==========================================

MySQL學習總結----數據庫相關操作

mysqlMySQL學習總結----數據庫相關操作==========================================================================================一、MySQL數據庫==============================

MySQL學習總結----數據操作

mysqlMySQL學習總結----數據操作=================================================================================一、數據的操作=============================================