溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Mysql的主要幾種日志及慢查詢方法

發(fā)布時間:2020-05-21 10:06:13 來源:網(wǎng)絡(luò) 閱讀:228 作者:三月 欄目:MySQL數(shù)據(jù)庫

本文主要給大家簡單講講Mysql的主要幾種日志及慢查詢方法,相關(guān)專業(yè)術(shù)語大家可以上網(wǎng)查查或者找一些相關(guān)書籍補充一下,這里就不涉獵了,我們就直奔主題吧,希望Mysql的主要幾種日志及慢查詢方法這篇文章可以給大家?guī)硪恍嶋H幫助。

mysql日志主要有以下幾種:

l     錯誤日志:log_error

l     通用查詢?nèi)罩荆篻eneral_log

l     二進制日志:binlog

l     慢速查詢?nèi)罩荆簂og_slow_queries

l     中繼日志:relay_log

l     事務(wù)日志:innodb_log

由于版本的不同,以下的目錄文件目錄也有所不同。

 

1、錯誤日志


 【W(wǎng)indows下】       修改主配置文件my.ini

            [mysqld]

           Error-bin[=dir\[filename]]    

//dir:指定錯誤日志的存儲路徑;filename:指定錯誤文件的文件名

 

刪除錯誤日志:

Mysqladmin -u root -p flush-logs;

 

      【Linux下】

修改主配置文件my.cnf

            [mysqld]

            log-error=mysql_error.log(絕對路徑或若直接文件名則會存儲到數(shù)據(jù)目錄下)

            log_warnings={on|off|2}:將不將警告信息記錄日志

                log_warnings表示警告信息是否記錄在錯誤日志中,1和0也就是on和off表示記錄和不記錄,2則表示失敗拒絕的連接信息。

        在mysql云服務(wù)器上查看錯誤日志的配置:

            mysql> show global variables like '%log%';

 

2、通用查詢?nèi)罩荆ǚ浅V匾。。。?/p>


        mysql所有查詢語句都會被記錄。

        默認關(guān)閉此項記錄,一般作調(diào)試用,平時開啟會記錄大量數(shù)據(jù)占用磁盤空間。

        存儲位置:文件,表(table,mysql.general_log)

        默認存儲在數(shù)據(jù)目錄下。

        Linux環(huán)境下,修改主配置文件my.cnf。

            [mysqld]

            general_log={on|off}

            general_log_file=mysql_general.log (絕對路徑或若直接文件名則會存儲到數(shù)據(jù)目錄下)

            log_output={file|table|file,table|none}:日志輸出類型

  

在不重啟MYSQL服務(wù)的情況下,操作通用查詢?nèi)罩荆?/p>

 

mysql> set global general_log=on;   //開啟

 

mysql> set global general_log=off;   //關(guān)閉

 

mysql> mysqladmin -u root -p flush-logs   //刪除日志(先刪除舊的,再創(chuàng)建一個新的)

  

3、二進制日志(非常重要!?。。?/p>

        1》用于記錄引起數(shù)據(jù)改變或存在引起數(shù)據(jù)改變的潛在可能性的語句(statement)或改變后的結(jié)果(row),也可能是二者混合。

        2》包含了所有更新了的數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)的所有語句,記錄了數(shù)據(jù)的更改以及數(shù)據(jù)更改的事件events和位置position。

        3》主要目的是在恢復(fù)時能夠最大可能地恢復(fù)數(shù)據(jù)庫,默認開啟的。

        4》Linux環(huán)境下,修改主配置文件my.cnf。

            log_bin=/path/to/bin_log_file:

                這是個只讀變量,表明存放日志的目錄位置,不能在此處寫on或off,若不指定路徑會存儲在數(shù)據(jù)目錄下。

            max_binlog_size=1073741824:

                設(shè)置單個二進制文件的最大尺寸,以字節(jié)為單位,超過此值大小就會自動滾動。

            sync_binlog={1|0|N}:

                表示每幾次事務(wù)提交后是否立即將內(nèi)存中的二進制日志同步到內(nèi)存(binlog_cache)中。

                1表示立即提交;0則不提交;N可為任意值,表示每N次;值不同對應(yīng)的性能也不同,0和1的性能差別可高達5倍之多。寫入磁盤的操作是使用fdatasync()函數(shù)。

            binlog_format={statement|row|mixed}:

                binlog日志存放的格式

            expire_logs_days=N:

                二進制日志的有效天數(shù)

        

        5》可以用mysqlbinlog命令查看二進制日志文件。

            mysqlbinlog:

                 yyyy-mm-dd hh:mm:ss

                 --start-datetime=

                 --stop-datetime=

                 -j, --start-position=#

                  --stop-position=#

                  --user, --host, --password

        8》在mysql中查看二進制

            查看二進制日志文件列表:

                 mysql> show master|binary logs; 

            查看當(dāng)前正在使用的二進制日志文件:

                mysql> show master status;

            查看二進制日志文件中的事件:

                mysql> show binlog events [in 'log_name'] [from pos] [limit [offset,] row_count]

            查看二進制日志的參數(shù)配置

                MariaDB [(none)]> show global variables where variable_name like '%log_bin%' or variable_name like '%binlog%';

           

        9》清除二進制日志

            清除所有日志(不存在主從復(fù)制關(guān)系)

                mysql> reset master;

            清除指定日志之前的所有日志

                mysql> purge master logs to '日志';

            清除某一時間點前的所有日志

                mysql> purge master logs before '年-月-日 時:分:秒';

            清除 n 天前的所有日志

                mysql> purge master logs before current_date - interval 10 day;

            由于二進制日志的重要性,請僅在確定不再需要將要被刪除的二進制文件,

            或者在已經(jīng)對二進制日志文件進行歸檔備份,

            或者已經(jīng)進行數(shù)據(jù)庫備份的情況下,才進行刪除操作,且不要使用 rm 命令刪除。

            

        10》暫停二進制日志

 

Set SQL_LOG_BIN=0;     //暫停二進制日志

 

Set SQL_LOG_BIN=1;     //啟動二進制日志

  

4、慢速查詢?nèi)罩荆ǚ浅V匾。。。?/p>


        記錄所有執(zhí)行時間超過long_query_time秒的sql語句,可用于找到執(zhí)行時間長的查詢,以用于優(yōu)化。

        默認未開啟,開啟優(yōu)先級比查詢?nèi)罩靖?,默認是超過10秒的才會被記錄。

        存儲位置:文件,表(table,mysql.slog_log)

        Linux環(huán)境下,修改主配置文件/etc/my.cnf,在[mysqld]下添加“l(fā)ong_query_time”和“l(fā)og-slow-queries=文件路徑名”,重啟mysqld服務(wù)。

            log_slow_queries={on|off}:是否開啟慢查詢?nèi)罩荆?.5以前)

            slow_query_log={on|off}:是否開啟慢查詢?nèi)罩荆ê蜕厦鏇]有區(qū)別,5.6以后)

            slow_query_log_file=xxxx-slom.log:慢查詢?nèi)罩敬娣盼恢?,默認為“主機名-slow.log”。相對路徑的話,默認為數(shù)據(jù)目錄下。

            log_output={file|table|file,table|none}:表示存放日志的方式

            log_query_time=N :表示多長時間的查詢被認為慢查詢,默認為10秒。   

        mysql自帶了對慢查詢?nèi)罩镜慕y(tǒng)計分析工具:mysqldumpslow

        

    操作慢查詢?nèi)罩荆?/p>

mysql> set global slow_query_log=on;      //開啟慢查詢?nèi)罩?/p>

 

mysql> set global slow_query_log=off;      //關(guān)閉慢查詢?nèi)罩?/p>

 

刪除慢查詢?nèi)罩荆褐苯觿h除慢查詢?nèi)罩疚募?,通過mysqladmin -u root -p flush-logs重新生成一個新的慢查詢?nèi)罩尽?/p>

Mysql的主要幾種日志及慢查詢方法就先給大家講到這里,對于其它相關(guān)問題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會捕捉一些行業(yè)新聞及專業(yè)知識分享給大家的。

向AI問一下細節(jié)
AI