本文主要給大家簡單講講Mysql的主要幾種日志及慢查詢方法,相關專業術語大家可以上網查查或者找一些相關書籍補充一下,這里就不涉獵了,我們就直奔主題吧,希望Mysql的主要幾種日志及慢查詢方法這篇文章可以給大家帶來一些實際幫助。
mysql日志主要有以下幾種:
l 錯誤日志:log_error
l 通用查詢日志:general_log
l 二進制日志:binlog
l 慢速查詢日志:log_slow_queries
l 中繼日志:relay_log
l 事務日志:innodb_log
由于版本的不同,以下的目錄文件目錄也有所不同。
1、錯誤日志
【Windows下】 修改主配置文件my.ini
[mysqld]
Error-bin[=dir\[filename]]
//dir:指定錯誤日志的存儲路徑;filename:指定錯誤文件的文件名
刪除錯誤日志:
Mysqladmin -u root -p flush-logs;
【Linux下】
修改主配置文件my.cnf
[mysqld]
log-error=mysql_error.log(絕對路徑或若直接文件名則會存儲到數據目錄下)
log_warnings={on|off|2}:將不將警告信息記錄日志
log_warnings表示警告信息是否記錄在錯誤日志中,1和0也就是on和off表示記錄和不記錄,2則表示失敗拒絕的連接信息。
在mysql云服務器上查看錯誤日志的配置:
mysql> show global variables like '%log%';
2、通用查詢日志(非常重要?。。。?/p>
mysql所有查詢語句都會被記錄。
默認關閉此項記錄,一般作調試用,平時開啟會記錄大量數據占用磁盤空間。
存儲位置:文件,表(table,mysql.general_log)
默認存儲在數據目錄下。
Linux環境下,修改主配置文件my.cnf。
[mysqld]
general_log={on|off}
general_log_file=mysql_general.log (絕對路徑或若直接文件名則會存儲到數據目錄下)
log_output={file|table|file,table|none}:日志輸出類型
在不重啟MYSQL服務的情況下,操作通用查詢日志:
mysql> set global general_log=on; //開啟
mysql> set global general_log=off; //關閉
mysql> mysqladmin -u root -p flush-logs //刪除日志(先刪除舊的,再創建一個新的)
3、二進制日志(非常重要?。。。?/p>
1》用于記錄引起數據改變或存在引起數據改變的潛在可能性的語句(statement)或改變后的結果(row),也可能是二者混合。
2》包含了所有更新了的數據或者已經潛在更新了數據的所有語句,記錄了數據的更改以及數據更改的事件events和位置position。
3》主要目的是在恢復時能夠最大可能地恢復數據庫,默認開啟的。
4》Linux環境下,修改主配置文件my.cnf。
log_bin=/path/to/bin_log_file:
這是個只讀變量,表明存放日志的目錄位置,不能在此處寫on或off,若不指定路徑會存儲在數據目錄下。
max_binlog_size=1073741824:
設置單個二進制文件的最大尺寸,以字節為單位,超過此值大小就會自動滾動。
sync_binlog={1|0|N}:
表示每幾次事務提交后是否立即將內存中的二進制日志同步到內存(binlog_cache)中。
1表示立即提交;0則不提交;N可為任意值,表示每N次;值不同對應的性能也不同,0和1的性能差別可高達5倍之多。寫入磁盤的操作是使用fdatasync()函數。
binlog_format={statement|row|mixed}:
binlog日志存放的格式
expire_logs_days=N:
二進制日志的有效天數
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;
查看當前正在使用的二進制日志文件:
mysql> show master status;
查看二進制日志文件中的事件:
mysql> show binlog events [in 'log_name'] [from pos] [limit [offset,] row_count]
查看二進制日志的參數配置
MariaDB [(none)]> show global variables where variable_name like '%log_bin%' or variable_name like '%binlog%';
9》清除二進制日志
清除所有日志(不存在主從復制關系)
mysql> reset master;
清除指定日志之前的所有日志
mysql> purge master logs to '日志';
清除某一時間點前的所有日志
mysql> purge master logs before '年-月-日 時:分:秒';
清除 n 天前的所有日志
mysql> purge master logs before current_date - interval 10 day;
由于二進制日志的重要性,請僅在確定不再需要將要被刪除的二進制文件,
或者在已經對二進制日志文件進行歸檔備份,
或者已經進行數據庫備份的情況下,才進行刪除操作,且不要使用 rm 命令刪除。
10》暫停二進制日志
Set SQL_LOG_BIN=0; //暫停二進制日志
Set SQL_LOG_BIN=1; //啟動二進制日志
4、慢速查詢日志(非常重要?。。。?/p>
記錄所有執行時間超過long_query_time秒的sql語句,可用于找到執行時間長的查詢,以用于優化。
默認未開啟,開啟優先級比查詢日志高,默認是超過10秒的才會被記錄。
存儲位置:文件,表(table,mysql.slog_log)
Linux環境下,修改主配置文件/etc/my.cnf,在[mysqld]下添加“long_query_time”和“log-slow-queries=文件路徑名”,重啟mysqld服務。
log_slow_queries={on|off}:是否開啟慢查詢日志(5.5以前)
slow_query_log={on|off}:是否開啟慢查詢日志(和上面沒有區別,5.6以后)
slow_query_log_file=xxxx-slom.log:慢查詢日志存放位置,默認為“主機名-slow.log”。相對路徑的話,默認為數據目錄下。
log_output={file|table|file,table|none}:表示存放日志的方式
log_query_time=N :表示多長時間的查詢被認為慢查詢,默認為10秒。
mysql自帶了對慢查詢日志的統計分析工具:mysqldumpslow
操作慢查詢日志:
mysql> set global slow_query_log=on; //開啟慢查詢日志
mysql> set global slow_query_log=off; //關閉慢查詢日志
刪除慢查詢日志:直接刪除慢查詢日志文件,通過mysqladmin -u root -p flush-logs重新生成一個新的慢查詢日志。
Mysql的主要幾種日志及慢查詢方法就先給大家講到這里,對于其它相關問題大家想要了解的可以持續關注我們的行業資訊。我們的板塊內容每天都會捕捉一些行業新聞及專業知識分享給大家的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。