您好,登錄后才能下訂單哦!
本文主要給大家簡(jiǎn)單講講Mysql的主要日志有哪些,相關(guān)專業(yè)術(shù)語(yǔ)大家可以上網(wǎng)查查或者找一些相關(guān)書籍補(bǔ)充一下,這里就不涉獵了,我們就直奔主題吧,希望Mysql的主要日志有哪些這篇文章可以給大家?guī)?lái)一些實(shí)際幫助。
1 概述
本文將介紹如下Mysql的六種日志的相關(guān)概念
查詢?nèi)罩荆篻eneral_log
慢查詢?nèi)罩荆簂og_slow_queries
錯(cuò)誤日志:log_error, log_warnings
二進(jìn)制日志:binlog
中繼日志:relay_log
事務(wù)日志:innodb_log
2 查詢?nèi)罩?/p>
默認(rèn)沒(méi)有開啟,考慮到數(shù)據(jù)庫(kù)云服務(wù)器本身占用存儲(chǔ)IO,所以一般不會(huì)使用查詢?nèi)罩镜墓δ?,防止給mysql造成性能降低
記錄查詢語(yǔ)句,日志存儲(chǔ)位置:
文件:file
表:table (mysql.general_log),在mysql庫(kù)里
general_log={ON|OFF}:一般日志,日志功能的開關(guān)
general_log_file=HOSTNAME.log :日志輸出的位置,有兩個(gè)地方,如general_log_file指定的文件,還有下面的TABLE,
log_output={FILE|TABLE|NONE},啟動(dòng)general_log的時(shí)候,還要指定log_output為file或者table,如果定義為file,則general_log這張表就沒(méi)用了,如果要兩者都記錄,就定義為file,table,如果不記錄日志,就設(shè)定為none,即使是設(shè)定為on,也指定了log的路徑,也不會(huì)記錄日志,默認(rèn)為file.
默認(rèn)情況下,日志文件是當(dāng)前主機(jī)名.log(注意,需要本機(jī)反向解析ip可以得到主機(jī)名才能為當(dāng)前主機(jī)名,否則默認(rèn)為localhost.log),沒(méi)有session級(jí)別的參數(shù),只有全局級(jí)別,查看如下
MariaDB [mysql]> show global variables like 'general%';
在global級(jí)別修改,但是該參數(shù)不支持session級(jí)別,所以參數(shù)也可以立即生效,設(shè)置如下
MariaDB [mysql]> set @@global.general_log=on;
開啟后,在數(shù)據(jù)庫(kù)中執(zhí)行相關(guān)操作后,日志文件在當(dāng)前主機(jī)名.log下,如這里是CentOS7A.log,如果是日志文件是相對(duì)路徑,則默認(rèn)該日志在數(shù)據(jù)目錄下,即/var/lib/mysql/下面,這里的文件是/var/lib/mysql/CentOS7A.log,該文件有數(shù)據(jù)庫(kù)操作的詳細(xì)記錄 ,查看如下
cat /var/lib/mysql/CentOS7A.log
改成TABLE類型,所有的日志都會(huì)被記錄在mysql.general_log這張表里,文件/var/lib/mysql/CentOS7A.log將不再記錄
MariaDB [mysql]> set @@global.log_output='table';
3 慢查詢?nèi)罩?/p>
慢查詢:運(yùn)行時(shí)間超出指定時(shí)長(zhǎng)的查詢,一般是指long_query_time指定的時(shí)長(zhǎng);
long_query_time:長(zhǎng)時(shí)間的執(zhí)行時(shí)間,默認(rèn)單位是秒,默認(rèn)是10s
查看變量可以有以下兩種方法進(jìn)行查看
MariaDB [mysql]> show global variables like 'long%';
MariaDB [mysql]> select @@global.long_query_time;
不是被其他語(yǔ)句阻塞或者是語(yǔ)句本身查詢時(shí)間很長(zhǎng),查詢很慢,需要啟用慢查詢來(lái)記錄,這個(gè)一般要啟用,用來(lái)分析系統(tǒng)的相關(guān)問(wèn)題,如網(wǎng)頁(yè)打開慢的問(wèn)題
存儲(chǔ)位置:
文件:FILE
表:TABLE,mysql.slog_log
log_slow_queries={ON|OFF}:?jiǎn)⒂寐樵?,slow_query_log和是啟用慢查詢,不同mysql版本里啟用的參數(shù)可能不一樣,可能同時(shí)存在兩個(gè)參數(shù),如果要確??梢杂涗?建議這兩個(gè)參數(shù)都啟用
slow_query_log={ON|OFF}
slow_query_log_file=
log_output={FILE|TABLE|NONE}
log_slow_filter=admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk:這里定義的條件的查詢超過(guò)10s才記錄到慢查詢?nèi)罩?。這些一般是語(yǔ)句本身慢導(dǎo)致的
log_slow_rate_limit
log_slow_verbosity
慢查詢的啟用,注意,該log不會(huì)記錄所有的操作,只記錄log_slow_filter字段定義的條件,記錄的日志在/var/lib/mysql/CentOS7A-slow.log
MariaDB [mysql]> set @@global.slow_query_log=ON;
啟用 slow_query_log bool型值不需要加引號(hào),如ON或off
以上的定義是臨時(shí)有效的,全局的參數(shù)重啟mysql后失效,會(huì)話級(jí)別的關(guān)閉session就會(huì)失效,要長(zhǎng)期有效,需要配置到配置文件里
4 錯(cuò)誤日志
記錄如下四類信息:包括三種非錯(cuò)誤的日志,如下
(1) mysqld啟動(dòng)和關(guān)閉過(guò)程中輸出的信息;
(2) mysqld運(yùn)行中產(chǎn)生的錯(cuò)誤信息;
(3) event scheduler運(yùn)行時(shí)產(chǎn)生的信息;#相當(dāng)于是mysql內(nèi)部的周期計(jì)劃,和系統(tǒng)crontab一樣的效果的計(jì)劃
(4) 主從復(fù)制架構(gòu)中,從云服務(wù)器復(fù)制線程啟動(dòng)時(shí)產(chǎn)生的日志;
log_error=
/var/log/mariadb/mariadb.log|OFF #指定文件路徑,即表示ON,如果不啟用log_error,就直接用OFF來(lái)設(shè)定
log_warnings={ON|OFF}:#ON表示是否將warning級(jí)別的日志記錄到log_error里面
通過(guò)rpm安裝的mysql,默認(rèn)會(huì)啟用error日志,解壓的方式安裝可能沒(méi)有啟用,一般是要啟用錯(cuò)誤日志功能。
MariaDB [mysql]> select @@global.log_error;
5 二進(jìn)制日志
云服務(wù)器級(jí)別,跟引擎沒(méi)關(guān)系,只能改配置參數(shù)才能生效,但是支持在會(huì)話級(jí)別指定關(guān)閉或者生效,一般不關(guān)閉該功能,只有要使用重放的時(shí)候,即做恢復(fù)的時(shí)候,才關(guān)閉該功能。需要在配置文件中修改才會(huì)生效。但是可以在會(huì)話級(jí)控制是否要記錄對(duì)應(yīng)的會(huì)話的二進(jìn)制文件log
mysql運(yùn)行過(guò)程中的修改類操作(引起數(shù)據(jù)改變,或者可能會(huì)引起數(shù)據(jù)改變的操作),未保存前,會(huì)記錄到這里的二進(jìn)制文件,云服務(wù)器級(jí)別,跟引擎無(wú)關(guān),二進(jìn)制文件,不能使用cat等文本工具來(lái)查看,可能會(huì)導(dǎo)致文件被破壞,因?yàn)楸槐4嫖炊M(jìn)制格式,每一次的記錄被保存未event,event根據(jù)位置來(lái)記錄(根據(jù)偏移量決定 ,如第一個(gè)事件0--16,但是,最后的16是第一個(gè)事件的結(jié)束,沒(méi)有被第一個(gè)事件暫用,是第二個(gè)事件的開始,如第二個(gè)事件為 16--36,這里36是第三個(gè)事件開始),這里用二進(jìn)制編碼來(lái)記錄,作用是可以精確到用字節(jié)來(lái)記錄來(lái)記錄每一個(gè)事件的起始和結(jié)束位置
作為記錄事件,要記錄事件發(fā)生的時(shí)間和操作
二進(jìn)制日志文件,作用是用來(lái)重放,當(dāng)系統(tǒng)崩潰的時(shí)候,可以用來(lái)恢復(fù)系統(tǒng)用,建議將該日志放在獨(dú)立的位置,用絕對(duì)日志,同時(shí)確保mysql用戶有讀寫權(quán)限。需要修改配置文件才生效
二進(jìn)制日志記錄有三種格式
binlog_format={STATEMENT|ROW|MIXED}
STATEMENT:語(yǔ)句,即記錄操作命令
ROW:行;
MIXED:混編;
用于記錄引起數(shù)據(jù)改變或存在引起數(shù)據(jù)改變的潛在可能性的語(yǔ)句(STATEMENT)或改變后的結(jié)果(ROW),也可能是二者混合;
記錄行得到更精確的結(jié)果,但是量比較大,記錄“語(yǔ)句”相對(duì)輕量,如果定義問(wèn)MIXED,則系統(tǒng)會(huì)自行決定用語(yǔ)句或者行的格式來(lái)記錄。 默認(rèn)實(shí)時(shí)statement
注意,如執(zhí)行某個(gè)語(yǔ)句時(shí),插入的字段是由函數(shù)執(zhí)行生成,如now()函數(shù),時(shí)間每次執(zhí)行都會(huì)不一樣,下次重新執(zhí)行,結(jié)果是不一樣的。所以記錄的是執(zhí)行結(jié)果,使得重新執(zhí)行時(shí),結(jié)果一樣。這種記錄方式成為記錄row
查看當(dāng)前的格式如下:
MariaDB [mysql]> show global variables like 'binlog_format';
云服務(wù)器變量:
log_bin=/PATH/TO/BIN_LOG_FILE
只讀變量;建議不使用數(shù)據(jù)目錄,即/var/lib/mysql,因?yàn)槎M(jìn)制日志是將來(lái)用來(lái)恢復(fù)數(shù)據(jù)的方法,很重要,如果二進(jìn)制日志和數(shù)據(jù)目錄放在同一磁盤,將來(lái)一旦磁盤故障,所有的內(nèi)容都丟失就不能恢復(fù)了,因此建議另外設(shè)定路徑
例子:創(chuàng)建兩個(gè)目錄,將數(shù)據(jù)和log分開,分別掛載在不同的磁盤上,并更改數(shù)組和屬主,修改配置文件,指定路徑
[root@CentOS7A mysql]#mkdir -pv /mydata/{data,log}
[root@CentOS7A mysql]#chown -R mysql.mysql /mydata/*
[root@CentOS7A mysql]#vim /etc/my.cnf.d/server.cnf
log_bin = /mydata/log/master-log#定義日志文件不能加后綴
保存退出后重啟mysql服務(wù)
[root@CentOS7A mysql]#systemctl restart mariadb
在路徑 /mydata/log下會(huì)生成一個(gè)二進(jìn)制的文件master-log.000001,該二進(jìn)制文件會(huì)進(jìn)行滾動(dòng),重啟服務(wù)或者用flush logs命令都會(huì)進(jìn)行滾動(dòng),文件后綴名會(huì)自動(dòng)變更。該路徑下還有一個(gè)文件master-log.index,該索引不是數(shù)據(jù)索引,而是日志文件索引,文本格式,如當(dāng)master-log.000001這種文件很多時(shí),mysql識(shí)別的文件是記錄在master-log.index這個(gè)里面的。
master-log.000001是二進(jìn)制文件,不能用cat等文本查看工具直接查看,查看二進(jìn)制文件master-log.000001的方法如下
到mysql里
查看有多少個(gè)二進(jìn)制文件,如下,該命令和直接查看master-log.index內(nèi)容一樣
MariaDB [sunny]> show binary logs;
+-------------------+-----------+
| Log_name | File_size |
+-------------------+-----------+
| master-log.000001 | 245 |
+-------------------+-----------+
1 row in set (0.00 sec)
手動(dòng)滾動(dòng)日志,可以用如下命令
MariaDB [sunny]> flush logs;
查看二進(jìn)制日志文件列表:
SHOW MASTER|BINARY LOGS;
MariaDB [sunny]> show master logs;
MariaDB [sunny]> show binary logs;
查看當(dāng)前正在使用的二進(jìn)制日志文件:
SHOW MASTER STATUS;
查看當(dāng)前正在使用的二進(jìn)制文件,Position指當(dāng)前寫到哪個(gè)字節(jié)的位置,一般不是從0開始,因?yàn)樵撊罩居凶晕颐枋鲂畔?,即文件頭,記錄當(dāng)然日志文件是哪個(gè)版本,兼容哪些版本等等,默認(rèn)是從245的位置開始
MariaDB [sunny]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 | 245 | | |
+-------------------+----------+--------------+------------------+
查看二進(jìn)制 日志文件中的事件:
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
查看二進(jìn)制文件記錄的內(nèi)容, Pos是開始位置,End_log_pos是結(jié)束位置, Event_type事件類型,Info 事件描述信息,信息中, xid=16是mysql記錄的標(biāo)識(shí)符
,Server_id是記錄云服務(wù)器的唯一信息,如果不做協(xié)同工作,默認(rèn)id是1,同一集群中id號(hào)不能相同,需要手動(dòng)修改該參數(shù),
MariaDB [sunny]> show binlog events in 'master-log.000003';
+-------------------+-----+-------------+-----------+-------------+-------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+-------------------+-----+-------------+-----------+-------------+-------------------------------------------------+
| master-log.000003 | 4 | Format_desc | 1 | 245 | Server ver: 5.5.56-MariaDB, Binlog ver: 4 |
| master-log.000003 | 245 | Query | 1 | 314 | BEGIN |
| master-log.000003 | 314 | Query | 1 | 412 | use `sunny`; delete from students where id=1001 |
| master-log.000003 | 412 | Xid | 1 | 439 | COMMIT /* xid=15 */ |
+-------------------+-----+-------------+-----------+-------------+-------------------------------------------------+
4 rows in set (0.00 sec)
從指定的位置開始查看log,該位置值必須是起始位置,不能是中間的任意數(shù)
MariaDB [sunny]> show binlog events in 'master-log.000003' from 314;
從指定的位置開始查看log,偏移2行
MariaDB [sunny]> show binlog events in 'master-log.000003' from 245 limit 2;
session.sql_log_bin={ON|OFF}
控制某會(huì)話中的“寫”操作語(yǔ)句是否會(huì)被記錄于日志文件中;
關(guān)閉語(yǔ)句如下,之后該session的記錄將不會(huì)被記錄到二進(jìn)制文件中,建議不要關(guān)閉,只在重放的時(shí)候才關(guān)閉該功能
MariaDB [sunny]> set @@session.sql_log_bin=off;
max_binlog_size=1073741824 #寫入配置文件,定義二進(jìn)制文件的最大值,單位是字節(jié)byte,1073741824為1G,但是文件實(shí)際大小可能不精準(zhǔn),超過(guò)這個(gè)值就滾動(dòng),文件可能不會(huì)精準(zhǔn)到這個(gè)值后滾動(dòng),大小會(huì)相差一點(diǎn)點(diǎn)。
sync_binlog={1|0} #把日志從內(nèi)存同步到硬盤,一般是緩存在內(nèi)存區(qū),一段時(shí)間后在同步到硬盤,這個(gè)好處是效率高,但是有可能會(huì)導(dǎo)致異常情況數(shù)據(jù)還在內(nèi)存中而丟失。這里有個(gè)極端的情況是,如果丟失的數(shù)據(jù)是commint,這樣數(shù)據(jù)就恢復(fù)不了,這里如果設(shè)置為1,就是當(dāng)前操作是commit,就馬上記錄到磁盤里,數(shù)據(jù)重放更安全,但是性能會(huì)降低,需要根據(jù)實(shí)際情況而決定要不要開啟功能
mysqlbinlog:#這個(gè)命令行工具的主要作用就是用來(lái)查看日志的內(nèi)容,一般開始的245字節(jié)是文件的文件頭,信息都是在這文件頭之后,一般信息都有特定格式記錄,第一個(gè)# at開頭之前的為頭部信息,每一個(gè)事件的操作記錄以# at開頭 ,以 end_log_poss結(jié)束。一般增刪改查操作都是要先查詢,所以都是Query。小于1s的執(zhí)行時(shí)間exec_time都記錄為0.error_code如果沒(méi)有錯(cuò)誤都是0。每一個(gè)連接就是一個(gè)線程thread_id。
相關(guān)選項(xiàng):
--start-datetime=
--stop-datetime=
注意這里時(shí)間格式是:YYYY-MM-DD hh:mm:ss
例子:
[root@CentOS7A log]#mysqlbinlog /mydata/log/master-log.000003 --start-datetime="2018-01-14 11:27:41"
-j, --start-position=#表示從哪個(gè)位置開始
--stop-position=#到哪個(gè)位置結(jié)束
例子:從哪個(gè)位置開始查看
[root@CentOS7A log]#mysqlbinlog /mydata/log/master-log.000001 -j 314
--user, --host, --password
該命令是客戶端命令,可以被遠(yuǎn)程執(zhí)行,注意文件不能加引號(hào)
,但是,測(cè)試時(shí),提示文件不存在
[root@CentOS7E ~]#mysqlbinlog -uroot -pPass123456 -h 192.168.1.71 /mydata/log/master-log.000001
例子:不加選項(xiàng)
[root@CentOS7A log]#mysqlbinlog /mydata/log/master-log.000001
附上二進(jìn)制日志事件格式:
# at 553
#160831 9:56:08 server id 1 end_log_pos 624 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1472608568/*!*/;
BEGIN
/*!*/;
事件的起始位置:# at 553
事件發(fā)生的日期時(shí)間:#160831 9:56:08
事件發(fā)生的云服務(wù)器id:server id 1
事件的結(jié)束位置:end_log_pos 624
事件的類型:Query
事件發(fā)生時(shí)所在云服務(wù)器執(zhí)行此事件的線程的ID: thread_id=2
語(yǔ)句的時(shí)間戳與將其寫入二進(jìn)制日志文件中的時(shí)間差:exec_time=0
錯(cuò)誤代碼:error_code=0
設(shè)定事件發(fā)生時(shí)的時(shí)間戳:SET TIMESTAMP=1472608568/*!*/;
事件內(nèi)容:BEGIN
6 中繼日志
從云服務(wù)器上記錄下來(lái)從主云服務(wù)器的二進(jìn)制日志文件同步過(guò)來(lái)的事件;是mysql主從復(fù)制時(shí),二進(jìn)制是主云服務(wù)器上記錄的日志,從云服務(wù)器上通過(guò)中繼日志,從云服務(wù)器在本地進(jìn)行重放,得到一樣的二進(jìn)制文件。使得主從復(fù)制一樣。
二進(jìn)制日志還有另一個(gè)作用是能做時(shí)間點(diǎn)還原,不一定要用于主從復(fù)制,這個(gè)恢復(fù)手段很有效,因?yàn)榧词故莻浞莶僮?,?dāng)備份沒(méi)有備份的時(shí)間開始到系統(tǒng)崩潰的時(shí)間段,可以用這個(gè)二進(jìn)制日志基于時(shí)間來(lái)恢復(fù)沒(méi)有備份的時(shí)間段的數(shù)據(jù)的恢復(fù)。
7 事務(wù)日志
事務(wù)型存儲(chǔ)引擎innodb用于保證事務(wù)特性的日志文件:
redo log
undo log
Mysql的主要日志有哪些就先給大家講到這里,對(duì)于其它相關(guān)問(wèn)題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會(huì)捕捉一些行業(yè)新聞及專業(yè)知識(shí)分享給大家的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。