亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文帶你了解MySQL四大類(lèi)日志

 更新時(shí)間:2023年04月10日 12:38:27   作者:大蝦好吃嗎  
在MySQL中日志文件可以分為4種:二進(jìn)制日志文件、錯(cuò)誤日志文件、通用查詢(xún)?nèi)罩疚募吐樵?xún)?nèi)罩疚募?下面這篇文章主要給大家介紹了關(guān)于MySQL四大類(lèi)日志的相關(guān)資料,需要的朋友可以參考下

前言

MySQL日志記錄了MySQL數(shù)據(jù)庫(kù)日常操作和錯(cuò)誤信息。MySQL有不同類(lèi)型的日志文件(各自存儲(chǔ)了不同類(lèi)型的日志),從日志當(dāng)中可以查詢(xún)到MySQL數(shù)據(jù)庫(kù)的運(yùn)行情況、用戶(hù)的操作、錯(cuò)誤的信息等。

MySQL日志分為4大類(lèi)

  1. 錯(cuò)誤日志:記錄mysql服務(wù)的啟動(dòng),運(yùn)行或停止mysql服務(wù)時(shí)出現(xiàn)的問(wèn)題
  2. 查詢(xún)?nèi)罩荆河涗浗⒌目蛻?hù)端的連接和執(zhí)行的語(yǔ)句
  3. 二進(jìn)制日志:記錄所有更改數(shù)據(jù)的語(yǔ)句,可以用于數(shù)據(jù)的復(fù)制
  4. 慢查詢(xún)?nèi)罩荆河涗浰袌?zhí)行的時(shí)間超過(guò)long_query_time的所有查詢(xún)或不使用索引的查詢(xún)默認(rèn)情況下,所有日志創(chuàng)建與MySQL數(shù)據(jù)目錄中,通過(guò)刷新日志,可以強(qiáng)制MySQL關(guān)閉和重新打開(kāi)日志文件,F(xiàn)lush logs刷新日志或者執(zhí)行mysqladmin flush-logs 如果正使用MySQL復(fù)制功能,在復(fù)制服務(wù)器上可以維護(hù)更多日志文件,這種日志我們稱(chēng)為接替日志。啟動(dòng)日志功能會(huì)降低MySQL數(shù)據(jù)庫(kù)的性能。

錯(cuò)誤日志

在mysql數(shù)據(jù)庫(kù)中,錯(cuò)誤日志功能是默認(rèn)開(kāi)啟的。默認(rèn)情況下,錯(cuò)誤日志存儲(chǔ)在mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)目錄中。錯(cuò)誤日志文件通常的名稱(chēng)為hostname.err。其中,hostname表示服務(wù)器主機(jī)名。 錯(cuò)誤日志信息可以自己進(jìn)行配置的,錯(cuò)誤日志所記錄的信息是可以通過(guò)log-error和log-warnings來(lái)定義的,其中l(wèi)og-error是定義是否啟用錯(cuò)誤日志的功能和錯(cuò)誤日志的存儲(chǔ)位置,log-warnings是定義是否將警告信息也定義至錯(cuò)誤日志中。

默認(rèn)情況下錯(cuò)誤日志大概記錄以下幾個(gè)方面的信息:服務(wù)器啟動(dòng)和關(guān)閉過(guò)程中的信息(未必是錯(cuò)誤信息,如mysql如何啟動(dòng)InnoDB的表空間文件的、如何初始化自己的存儲(chǔ)引擎的等等)、服務(wù)器運(yùn)行過(guò)程中的錯(cuò)誤信息、事件調(diào)度器運(yùn)行一個(gè)事件時(shí)產(chǎn)生的信息、在從服務(wù)器上啟動(dòng)服務(wù)器進(jìn)程時(shí)產(chǎn)生的信息 注1:MySQL有很多系統(tǒng)變量可以設(shè)置,系統(tǒng)變量設(shè)置不同,會(huì)導(dǎo)致系統(tǒng)運(yùn)行狀態(tài)的不同。因此mysql提供兩組命令,分別查看系統(tǒng)設(shè)置和運(yùn)行狀態(tài)。

1、查看系統(tǒng)設(shè)置:

SHOW [GLOBAL | SESSION] VARIABLES [like_or_where] 
SHOW VARIABLES: shows the values of MySQL system variables.

2、運(yùn)行狀態(tài):

SHOW [GLOBAL | SESSION] STATUS [like_or_where] 
SHOW STATUS: provides server status information.

修改系統(tǒng)配置

方法1:配置文件設(shè)置my.cnf 如:binlog_cache_size = 1M

方法2:set global binlog_cache_size = 1048576;

注:查看mysql的版本

[root@localhost ~]# mysql -V
mysql  Ver 14.14 Distrib 5.7.40, for linux-glibc2.12 (x86_64) using  EditLine wrapper

mysql> status;
--------------
mysql  Ver 14.14 Distrib 5.7.40, for linux-glibc2.12 (x86_64) using  EditLine wrapper
?
Connection id:      11
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.7.40 MySQL Community Server (GPL)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /tmp/mysql.sock
Uptime:         87 days 2 hours 22 min 4 sec
?
Threads: 1  Questions: 61  Slow queries: 0  Opens: 114  Flush tables: 1  Open tables: 107  Queries per second avg: 0.000
--------------

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.40    |
+-----------+
1 row in set (0.00 sec)

一般而言,日志級(jí)別的定義沒(méi)有會(huì)話變量都只是在全局級(jí)別下進(jìn)行定義 錯(cuò)誤日志的狀態(tài):

mysql> show global variables like '%log_error%';
+---------------------+---------------------------------+
| Variable_name       | Value                           |
+---------------------+---------------------------------+
| binlog_error_action | ABORT_SERVER                    |
| log_error           | /usr/local/mysql/data/mysql.log |
| log_error_verbosity | 3                               |
+---------------------+---------------------------------+
3 rows in set (0.00 sec)

其中 log_error定義為錯(cuò)誤日志文件路徑 log_error_verbosity:

verbosity valuemessage types logged
1errors only
2errors and warnings
3errors,warinigs,and notes(default)

更改錯(cuò)誤日志位置可以使用log-error來(lái)設(shè)置形式如下

[root@localhost ~]# vim /etc/my.cnf
log-error = /usr/local/mysql/data/mysqld.err

查看mysql錯(cuò)誤日志

[root@localhost ~]# tail /usr/local/mysql/data/mysqld.err

為了方便維護(hù)需要,有時(shí)候會(huì)希望將錯(cuò)誤日志中的內(nèi)容做備份并重新開(kāi)始記錄,這時(shí)候就可以利用MySQL 的FLUSH LOGS 命令來(lái)告訴MySQL 備份舊日志文件并生成新的日志文件。備份文件名以“.old”結(jié)尾。

刪除錯(cuò)誤日志:

        在mysql5.5.7之前:數(shù)據(jù)庫(kù)管理員可以刪除很長(zhǎng)時(shí)間之前的錯(cuò)誤日志,以保證mysql服務(wù)器上的硬盤(pán)空間。mysql數(shù)據(jù)庫(kù)中,可以使用mysqladmin命令開(kāi)啟新的錯(cuò)誤日志。mysqladmin命令的語(yǔ)法如下:mysqladmin –uroot –p flush-logs也可以登錄mysql數(shù)據(jù)庫(kù)中使用FLUSH LOGS語(yǔ)句來(lái)開(kāi)啟新的錯(cuò)誤日志。

        在mysql5.5.7之后:服務(wù)器將關(guān)閉此項(xiàng)功能。只能使用重命名原來(lái)的錯(cuò)誤日志文件,手動(dòng)沖洗日志創(chuàng)建一個(gè)新的:方式如下:

[root@localhost ~]# cd /usr/local/mysql/data/
[root@localhost data]# mv mysqld.err mysql.bak
[root@localhost data]# mysqladmin -uroot -p flush-logs
Enter password: 		#輸入root密碼

更多信息請(qǐng)查閱官方文檔:

MySQL :: MySQL 8.0 Reference Manual :: 5.4.2 The Error Log

MySQL :: MySQL 8.0 Reference Manual :: 5.4.2 The Error Log

MySQL :: MySQL 5.7 Reference Manual :: 5.4.2 The Error Log

二進(jìn)制日志

主要記錄MySQL數(shù)據(jù)庫(kù)的變化,二進(jìn)制日志以一種有效的格式,并且是事務(wù)安全的方式包含更新日志中可用的信息。二進(jìn)制日志包含了所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)。二進(jìn)制日志還包含關(guān)于每個(gè)更新數(shù)據(jù)庫(kù)的語(yǔ)句的執(zhí)行時(shí)間,它不包含沒(méi)有修改任何數(shù)據(jù)的語(yǔ)句。使用二進(jìn)制日志的主要目的是最大可能地恢復(fù)數(shù)據(jù)庫(kù)。啟動(dòng)二進(jìn)制日志,默認(rèn)情況下二進(jìn)制日志是關(guān)閉的 編輯配置文件My.ini 或my.cnf

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
log_bin=my-bin				//二進(jìn)制日志[路徑[指定日志文件的名字]]
Expire_logs_days = 10 									//清除日志的天數(shù)
Max_binlog_size = 100M 									//單個(gè)日志文件的大小限制,超出會(huì)新建一個(gè)默認(rèn)為1GB
server_id=1												//mysql5.7版本以后需要添加serverid
[root@localhost ~]# service mysqld restart

Show variables 或show variables like 'log_%'; 語(yǔ)句來(lái)查詢(xún)?nèi)罩驹O(shè)置

mysql> show variables like 'log_bin%';
+---------------------------------+------------------------------------+
| Variable_name                   | Value                              |
+---------------------------------+------------------------------------+
| log_bin                         | ON                                 |
| log_bin_basename                | /usr/local/mysql/data/my-bin       |
| log_bin_index                   | /usr/local/mysql/data/my-bin.index |
| log_bin_trust_function_creators | OFF                                |
| log_bin_use_v1_row_events       | OFF                                |
+---------------------------------+------------------------------------+
5 rows in set (0.00 sec)

查看二進(jìn)制日志

MySQL二進(jìn)制日志存儲(chǔ)了所有的變更信息,MySQL二進(jìn)制日志經(jīng)常使用。當(dāng)MySQL創(chuàng)建二進(jìn)制日志文件時(shí),首先創(chuàng)建一個(gè)以’filename’為名稱(chēng),以’.index’為后綴的文件;在創(chuàng)建一個(gè)以’filename’為名稱(chēng),以’.000001’為后綴的文件。當(dāng)MySQL服務(wù)重啟一次,以’.000001’為后綴的文件會(huì)增加一個(gè),并且后綴名加1遞增。如果日志長(zhǎng)度超過(guò)max_binlog_size的上限,也會(huì)創(chuàng)建一個(gè)新的日志。 Show binary logs;可以查看當(dāng)前的二進(jìn)制日志文件個(gè)數(shù)及其文件名。二進(jìn)制日志并不能直接查看,如果想要查看日志內(nèi)容,可以通過(guò)mysqlbinlog命令查看。

mysql> show binary logs;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| my-bin.000001 |       154 |
+---------------+-----------+
1 row in set (0.00 sec)

或者

mysql> show master logs;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| my-bin.000001 |       154 |
+---------------+-----------+
1 row in set (0.00 sec)

查看二制日志的內(nèi)容

退出mysql在命令行

[root@mysql ~]# mysqlbinlog myusql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
mysqlbinlog: File 'myusql-bin.000001' not found (Errcode: 2 - No such file or directory)
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

刪除二進(jìn)制日志

MySQL的二進(jìn)制文件可以配置自動(dòng)刪除,同時(shí)MySQL提供了手動(dòng)刪除二進(jìn)制文件的方法:

RESET MASTER 刪除所有的二進(jìn)制日志文件;PURGE MASTER LOGS只刪除部分二進(jìn)制日志文件。 Resetmaster; 刪除所有二進(jìn)制日志 Purge master logs to ‘二進(jìn)制名’ 刪除單個(gè)二進(jìn)制日志之前的

語(yǔ)法格式:

PURGE { BINARY | MASTER } LOGS {
    TO 'log_name'
  | BEFORE datetime_expr
}

例:

mysql> purge master logs to 'my-bin.000001';
Query OK, 0 rows affected (0.02 sec)
 
mysql> purge master logs before '20230101';			#刪除指定日期之前的日志
Query OK, 0 rows affected, 1 warning (0.02 sec)

暫時(shí)停止二進(jìn)制日志的功能

如果MySQL的配置文件已經(jīng)啟動(dòng)了二進(jìn)制日志,MySQL會(huì)一直記錄二進(jìn)制日志,修改配置文件,可以停止二進(jìn)制日志,但是需要重啟MySQL數(shù)據(jù)庫(kù)。MySQL提供了暫時(shí)停止二進(jìn)制日志的功能,通過(guò)SET SQL_LOG_BIN語(yǔ)句可以使MySQL暫時(shí)停止二進(jìn)制

mysql> set sql_log_bin=1;			#0暫停 1恢復(fù)
Query OK, 0 rows affected (0.00 sec)	

事務(wù)日志(或稱(chēng)redo日志)

事務(wù)日志(InnoDB特有的日志)可以幫助提高事務(wù)的效率。使用事務(wù)日志,存儲(chǔ)引擎在修改表的數(shù)據(jù)時(shí)只需要修改其內(nèi)存拷貝,再把修改行為記錄到持久在硬盤(pán)上的事務(wù)日志中,而不用每次都將修改的數(shù)據(jù)本身持久到磁盤(pán)。事務(wù)日志采用追加的方式,因此寫(xiě)日志的操作是磁盤(pán)上一小塊區(qū)域內(nèi)的順序I/O,而不像隨機(jī)I/O需要在磁盤(pán)的多個(gè)地方移動(dòng)磁頭,所以采用事務(wù)日志的方式相對(duì)來(lái)說(shuō)要快得多。事務(wù)日志持久以后,內(nèi)存中被修改的數(shù)據(jù)在后臺(tái)可以慢慢的刷回到磁盤(pán)。目前大多數(shù)的存儲(chǔ)引擎都是這樣實(shí)現(xiàn)的。 如果數(shù)據(jù)的修改已經(jīng)記錄到事務(wù)日志并持久化,但數(shù)據(jù)本身還沒(méi)有寫(xiě)回磁盤(pán),此時(shí)系統(tǒng)崩潰,存儲(chǔ)引擎在重啟時(shí)能夠自動(dòng)恢復(fù)這部分修改的數(shù)據(jù)。具有的恢復(fù)方式則視存儲(chǔ)引擎而定。

查看事務(wù)日志的定義:

mysql> show global variables like '%log%';
#省略部分內(nèi)容
| innodb_flush_log_at_timeout                | 1 
| innodb_flush_log_at_trx_commit             | 1 
| innodb_locks_unsafe_for_binlog             | OFF                  
| innodb_log_buffer_size                     | 16777216            
| innodb_log_checksums                       | ON                  
| innodb_log_compressed_pages                | ON                  
| innodb_log_file_size                       | 50331648          #日志文件大小  
| innodb_log_files_in_group                  | 2                 # DB中設(shè)置幾組事務(wù)日志,默認(rèn)是2   
| innodb_log_group_home_dir                  | ./				 #定義innodb事務(wù)日志組的位置,此位置設(shè)置默認(rèn)為MySQL的datadir
#省略部分內(nèi)容
每個(gè)事務(wù)日志都是大小為50兆的文件(不同版本的mysql有差異): 在mysql中默認(rèn)以ib_logfile0,ib_logfile1名稱(chēng)存在

innodb_flush_log_at_trx_commit # 在事務(wù)提交時(shí)innodb是否同步日志從緩沖區(qū)到文件中,當(dāng)這個(gè)值為1(默認(rèn)值)之時(shí),在每個(gè)事務(wù)提交時(shí),日志緩沖被寫(xiě)到日志文件,對(duì)日志文件做到磁盤(pán)操作的刷新,性能會(huì)很差造成大量的磁盤(pán)I/O但這種方式最安全;如果設(shè)為2,每次提交事務(wù)都會(huì)寫(xiě)日志,但并不會(huì)執(zhí)行刷的操作。每秒定時(shí)會(huì)刷到日志文件。要注意的是,并不能保證100%每秒一定都會(huì)刷到磁盤(pán),這要取決于進(jìn)程的調(diào)度。每次事務(wù)提交的時(shí)候?qū)?shù)據(jù)寫(xiě)入事務(wù)日志,而這里的寫(xiě)入僅是調(diào)用了文件系統(tǒng)的寫(xiě)入操作,而文件系統(tǒng)是有 緩存的,所以這個(gè)寫(xiě)入并不能保證數(shù)據(jù)已經(jīng)寫(xiě)入到物理磁盤(pán)。設(shè)置為0,日志緩沖每秒一次地被寫(xiě)到日志文件,并且對(duì)日志文件做到磁盤(pán)操作的刷新,但是在一個(gè)事務(wù)提交不做任何操作。

注:刷寫(xiě)的概念

刷寫(xiě)其實(shí)是兩個(gè)操作,刷(flush)和寫(xiě)(write),區(qū)分這兩個(gè)概念是很重要的。在大多數(shù)的操作系統(tǒng)中,把Innodb的log buffer(內(nèi)存)寫(xiě)入日志(調(diào)用系統(tǒng)調(diào)用write),只是簡(jiǎn)單的把數(shù)據(jù)移到操作系統(tǒng)緩存中,操作系統(tǒng)緩存同樣指的是內(nèi)存。并沒(méi)有實(shí)際的持久化數(shù)據(jù)。所以,通常設(shè)為0和2的時(shí)候,在崩潰或斷電的時(shí)候會(huì)丟失最后一秒的數(shù)據(jù),因?yàn)檫@個(gè)時(shí)候數(shù)據(jù)只是存在于操作系統(tǒng)緩存。之所以說(shuō)“通常”,可能會(huì)有丟失不只1秒的數(shù)據(jù)的情況,比如說(shuō)執(zhí)行flush操作的時(shí)候阻塞了。

總結(jié)

設(shè)為1當(dāng)然是最安全的,但性能頁(yè)是最差的(相對(duì)其他兩個(gè)參數(shù)而言,但不是不能接受)。如果對(duì)數(shù)據(jù)一致性和完整性要求不高,完全可以設(shè)為2,如果只最求性能,例如高并發(fā)寫(xiě)的日志服務(wù)器,設(shè)為0來(lái)獲得更高性能

慢查詢(xún)?nèi)罩荆簊low query log

        顧名思義,慢查詢(xún)?nèi)罩局杏涗浀氖菆?zhí)行時(shí)間較長(zhǎng)的query,也就是我們常說(shuō)的slow query。 慢查詢(xún)?nèi)罩静捎玫氖呛?jiǎn)單的文本格式,可以通過(guò)各種文本編輯器查看其中的內(nèi)容。其中 記錄了語(yǔ)句執(zhí)行的時(shí)刻,執(zhí)行所消耗的時(shí)間,執(zhí)行用戶(hù),連接主機(jī)等相關(guān)信息。 慢查詢(xún)?nèi)罩镜淖饔茫?慢查詢(xún)?nèi)罩臼怯脕?lái)記錄執(zhí)行時(shí)間超過(guò)指定時(shí)間的查詢(xún)語(yǔ)句。通過(guò)慢查詢(xún)?nèi)罩荆梢圆檎页瞿男┎樵?xún)語(yǔ)句的執(zhí)行效率很低,以便進(jìn)行優(yōu)化。一般建議開(kāi)啟,它對(duì)服務(wù)器性能的影響微乎其微,但是可以記錄mysql服務(wù)器上執(zhí)行了很長(zhǎng)時(shí)間的查詢(xún)語(yǔ)句??梢詭椭覀兌ㄎ恍阅軉?wèn)題的。MySQL 還提供了專(zhuān)門(mén)用來(lái)分析滿(mǎn)查詢(xún)?nèi)罩镜墓ぞ叱绦騧ysqldumpslow,用來(lái)幫助數(shù)據(jù)庫(kù)管理人員解決可能存在的性能問(wèn)題。

查看慢查詢(xún)?nèi)罩镜亩x:

mysql> show global variables like '%slow_query_log%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_query_log      | OFF                                  |
| slow_query_log_file | /usr/local/mysql/data/mysql-slow.log |
+---------------------+--------------------------------------+
2 rows in set (0.01 sec)
 
mysql> show global variables like '%long%';
+----------------------------------------------------------+-----------+
| Variable_name                                            | Value     |
+----------------------------------------------------------+-----------+
| long_query_time                                          | 10.000000 |
| performance_schema_events_stages_history_long_size       | 10000     |
| performance_schema_events_statements_history_long_size   | 10000     |
| performance_schema_events_transactions_history_long_size | 10000     |
| performance_schema_events_waits_history_long_size        | 10000     |
+----------------------------------------------------------+-----------+
5 rows in set (0.00 sec)

啟動(dòng)和設(shè)置慢查詢(xún)?nèi)罩荆?/p>

方法1:通過(guò)配置文件my.cnf開(kāi)啟慢查詢(xún)?nèi)罩荆?/p>

注:在不同的mysql版本中,開(kāi)啟慢查詢(xún)?nèi)罩緟?shù)不太一樣,不過(guò)都可以通過(guò) show variables like "%slow%" 和show variables like "%long%"查看出來(lái)。

mysql> show global variables like '%slow%';
+---------------------------+--------------------------------------+
| Variable_name             | Value                                |
+---------------------------+--------------------------------------+
| log_slow_admin_statements | OFF                                  |
| log_slow_slave_statements | OFF                                  |
| slow_launch_time          | 2                                    |
| slow_query_log            | OFF                                  |
| slow_query_log_file       | /usr/local/mysql/data/mysql-slow.log |
+---------------------------+--------------------------------------+
5 rows in set (0.00 sec)

        其中: slow_query_log: off關(guān)閉狀態(tài) on開(kāi)啟狀態(tài) slow_query_log_file 慢查詢(xún)?nèi)罩敬娣诺攸c(diǎn) long_query_time選項(xiàng)來(lái)設(shè)置一個(gè)時(shí)間值,時(shí)間以秒為單位,可以精確到微秒。如果查詢(xún)時(shí)間超過(guò)了這個(gè)時(shí)間值(默認(rèn)為10秒),這個(gè)查詢(xún)語(yǔ)句將被記錄到慢查詢(xún)?nèi)罩局? 設(shè)置為0的話表示記錄所有的查詢(xún)。 slow_launch_time 表示如果建立線程花費(fèi)了比這個(gè)值更長(zhǎng)的時(shí)間,slow_launch_threads 計(jì)數(shù)器將增加 注:如果不指定存儲(chǔ)路徑,慢查詢(xún)?nèi)罩灸J(rèn)存儲(chǔ)到mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)文件下,如果不指定文件名,默認(rèn)文件名為hostname-slow.log 修改my.cnf文件:

[mysqld]
slow_query_log=1
slow_query_log_file=/usr/local/mysql/data/mysql-slow.log
long_query_time=1
slow_launch_time=1
#重啟mysqld服務(wù) 再次查詢(xún)慢查詢(xún)?nèi)罩径x

方法2:通過(guò)登錄mysql服務(wù)器直接定義,方式如下:

mysql> set global slow_query_log=1;		#開(kāi)啟慢查詢(xún)?nèi)罩?
Query OK, 0 rows affected (0.00 sec)
 
mysql> set session long_query_time=0.0001;		#更改時(shí)間(當(dāng)前session中,退出則重置)
 
 
Query OK, 0 rows affected (0.00 sec)
 
mysql> set global long_query_time=0.0001;		#更改時(shí)間(全局中,重啟服務(wù)則重置)
Query OK, 0 rows affected (0.00 sec)
 
mysql> show variables like 'long%';			#查詢(xún)定義時(shí)間
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 0.000100 |
+-----------------+----------+
1 row in set (0.00 sec)

查看慢查詢(xún)?nèi)罩?/p>

[root@mysql ~]# cat /usr/local/mysql/data/mysql-slow.log 

        用系統(tǒng)查看文件內(nèi)容命令如cat直接查看慢日志文件第一行表示記錄日志時(shí)的時(shí)間。其格式是 YYYY-MM-DD HH:MM:SS。我們可以看出上面的查詢(xún)記錄于 2016 年8 月 29 日下午 15:47:24 - 注意:這個(gè)是服務(wù)器時(shí)間. MySql 用戶(hù)、服務(wù)器以及主機(jī)名第三行表示總的查詢(xún)時(shí)間、鎖定時(shí)間、"發(fā)送"或者返回的行數(shù) Query_time: 0.000304 表示用了0.000304秒 Lock_time: 0.000128 表示鎖了0.000128秒 Rows_sent: 4 表示返回4行 Rows_examined: 4 表示一共查了4行 SET timestamp=UNIXTIME; 這是查詢(xún)實(shí)際發(fā)生的時(shí)間 何將其變成一個(gè)有用的時(shí)間,將 Unix 時(shí)間轉(zhuǎn)成一個(gè)可讀的時(shí)間,可以使用 date –d@日志中的時(shí)間戳以看到查詢(xún)進(jìn)行的同時(shí)記錄了該日志 ,但是對(duì)于一臺(tái)超負(fù)載的服務(wù)器常常并非如此。因此記?。篠ETtimestamp= value 才是實(shí)際的查詢(xún)的執(zhí)行時(shí)間。

        慢查詢(xún)分析mysqldumpslow 們可以通過(guò)打開(kāi)log文件查看得知哪些SQL執(zhí)行效率低下。從日志中,可以發(fā)現(xiàn)查詢(xún)時(shí)間超過(guò)long_query_time時(shí)間的query為慢查詢(xún),而小于long_query_time時(shí)間的沒(méi)有出現(xiàn)在此日志中。 如果慢查詢(xún)?nèi)罩局杏涗泝?nèi)容很多,可以使用mysqldumpslow工具(MySQL客戶(hù)端安裝自帶)來(lái)對(duì)慢查詢(xún)?nèi)罩具M(jìn)行分類(lèi)匯總。mysqldumpslow對(duì)日志文件進(jìn)行了分類(lèi)匯總,顯示匯總后摘要結(jié)果 進(jìn)入log的存放目錄,運(yùn)行

[root@mysql ~]# mysqldumpslow /usr/local/mysql/data/mysql-slow.log 

        注: mysqldumpslow -s c -t 10 /database/mysql/slow-query.log 這會(huì)輸出記錄次數(shù)最多的10條SQL語(yǔ)句,其中: -s, 是表示按照何種方式排序,c、t、l、r分別是按照記錄次數(shù)、時(shí)間、查詢(xún)時(shí)間、返回的記錄數(shù)來(lái)排序,ac、at、al、ar,表示相應(yīng)的倒序; -t, 是top n的意思,即為返回前面多少條的數(shù)據(jù); -g, 后邊可以寫(xiě)一個(gè)正則匹配模式,大小寫(xiě)不敏感的;

        例如: /path/mysqldumpslow -s r -t 10/database/mysql/slow-log 得到返回記錄集最多的10個(gè)查詢(xún)。/path/mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log 得到按照時(shí)間排序的前10條里面含有左連接的查詢(xún)語(yǔ)句。

總結(jié)

到此這篇關(guān)于MySQL四大類(lèi)日志的文章就介紹到這了,更多相關(guān)MySQL日志4大類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL不區(qū)分大小寫(xiě)配置方法

    MySQL不區(qū)分大小寫(xiě)配置方法

    MySQL 表內(nèi)數(shù)據(jù)條件查詢(xún)不區(qū)分大小寫(xiě)是因?yàn)榕判蛞?guī)則的問(wèn)題,本文主要介紹了MySQL不區(qū)分大小寫(xiě)配置方法,對(duì)大家的學(xué)習(xí)或者工作有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2024-01-01
  • MySQL內(nèi)存及虛擬內(nèi)存優(yōu)化設(shè)置參數(shù)

    MySQL內(nèi)存及虛擬內(nèi)存優(yōu)化設(shè)置參數(shù)

    這篇文章主要介紹了MySQL內(nèi)存及虛擬內(nèi)存優(yōu)化設(shè)置參數(shù),需要的朋友可以參考下
    2016-05-05
  • master and slave have equal MySQL server UUIDs 解決方法

    master and slave have equal MySQL server UUIDs 解決方法

    使用rsync配置了大量mysql,省去了大量編譯和配置的時(shí)間,隨逐個(gè)修改master和slave服務(wù)器的my.cnf,后,發(fā)現(xiàn)數(shù)據(jù)不能同步
    2013-07-07
  • php mysql訪問(wèn)數(shù)據(jù)庫(kù)的步驟詳解

    php mysql訪問(wèn)數(shù)據(jù)庫(kù)的步驟詳解

    這篇文章主要介紹了php mysql訪問(wèn)數(shù)據(jù)庫(kù)的步驟詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 詳解使用navicat連接遠(yuǎn)程linux mysql數(shù)據(jù)庫(kù)出現(xiàn)10061未知故障

    詳解使用navicat連接遠(yuǎn)程linux mysql數(shù)據(jù)庫(kù)出現(xiàn)10061未知故障

    這篇文章主要介紹了navicat連接遠(yuǎn)程linux mysql數(shù)據(jù)庫(kù)出現(xiàn)10061未知故障,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Mysql中JDBC的三種查詢(xún)(普通、流式、游標(biāo))詳解

    Mysql中JDBC的三種查詢(xún)(普通、流式、游標(biāo))詳解

    這篇文章主要介紹了Mysql中JDBC的三種查詢(xún)(普通、流式、游標(biāo))詳解,JDBC(Java DataBase Connectivity:java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系型數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),它是由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成的,需要的朋友可以參考下
    2023-08-08
  • mysql刪除表數(shù)據(jù)如何恢復(fù)

    mysql刪除表數(shù)據(jù)如何恢復(fù)

    這篇文章主要介紹了mysql刪除表數(shù)據(jù)如何恢復(fù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 超詳細(xì)匯總21個(gè)值得收藏的mysql優(yōu)化實(shí)踐

    超詳細(xì)匯總21個(gè)值得收藏的mysql優(yōu)化實(shí)踐

    這篇文章主要分享的是超詳細(xì)匯總21個(gè)值得收藏的mysql優(yōu)化實(shí)踐,對(duì)正在學(xué)習(xí)的同學(xué)有一定的參考價(jià)值,需要的同學(xué)可以參考一下
    2022-01-01
  • MySQL索引結(jié)構(gòu)詳細(xì)解析

    MySQL索引結(jié)構(gòu)詳細(xì)解析

    MySQL官方對(duì)索引的定義為:索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。可以得到索引的本質(zhì):索引是數(shù)據(jù)結(jié)構(gòu)
    2022-03-03
  • CentOS 7下mysql 5.7 安裝教程

    CentOS 7下mysql 5.7 安裝教程

    這篇文章主要為大家詳細(xì)介紹了CentOS 7下mysql 5.7 安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論