黑馬mysql筆記?
最好開兩個窗口,一個用于mysql命令,一個用于liunx命令
目錄
錯誤日志
二進制日志
?介紹
日志格式
mysq默認二進制日志文件為ROW
日志查看
二進制日志查看命令?
?默認日志文件格式下查看日志內容
?更改日志文件格式查看日志內容
日志刪除
查詢日志
不推薦開啟查詢日志
慢查詢日志
錯誤日志
錯誤日志是 MySQL 中最重要的日志之一,它記錄了當 mysqld 啟動和停止時,以及服務器在運行過程中發生任何嚴重錯誤時的相關信息當數據庫出現任何故障導致無法正常使用時,建議首先查看此日志。
該日志是默認開啟的,默認存放目錄 /var/log/,默認的日志文件名為 mysqld.log 。查看日志位置:
1.mysq窗口執行
?show variables like '%log_error%'
2.liunx下執行:tail -50 /var/log/mysqld.log
tail -50 /var/log/mysqld.log #查看后50行head -50 /var/log/mysqld.log #查看前50行?
3.測試
3.1 liunx下執行:
tail -f?/var/log/mysqld.log //表示實時刷新該文件
3.2 vim /var/lib/mysql/auto.cnf
vim /var/lib/mysql/auto.cnf
3.3改變mysql的uuid,位數一遍就出錯。
重啟mysql:
systemctl restart mysqld
查看錯誤日志,表示uuid無效,并顯示在什么位置
二進制日志
?
介紹
二進制日志(BINLOG)記錄了所有的DDL(數據定義語言create)語句和 DML(數據操縱語言,增刪改)語句,但不包括數據查詢語句(SELECT、SHOW)。
作用:災難時的數據恢復;MySQL的主從復制。
在MVSOL8版本中,默認二進制日志是開啟著的,涉及到的參數如下:
show variables like '%log_bin%'
liunx執行:
cd??/var/lib/mysql
ls -l
日志格式
mysq默認二進制日志文件為ROW
MySQL服務器中提供了多種格式來記錄二進制記錄,具體格式及特點如下:
日志格式??? | ?含義 |
---|---|
STATEMENT? ? | 基于SQL語句的日志記錄,記錄的是SQL語句,對數據進行修改的SQL都會記錄在日志文件中。 |
ROW | 基于行的日志記錄,記錄的是每一行的數據變更(記錄變更前和變更后的數據)(默認) |
MINED? | 混合了STATEMENT和ROW兩種格式,默認采用STATEMENT,在某些特殊情況下會自動切換為ROW進行記錄 |
查看方式:show variables like '%binlog_format%';
執行后會返回當前日志格式。
日志查看
二進制日志查看命令?
mysqlbinlog[參數選項]logfilename
?默認日志文件格式下查看日志內容
?
由于日志是以二進制方式存儲的,不能直接讀取,需要通過二進制日志查詢工具 mysqlbinlog 來查看,具體語法:
mysqlbinlog[參數選項]logfilename參數選項:-d 指定數據庫名稱,只列出指定的數據庫相關的操作。-o 忽略掉日志中的前n行命令。-v 將行事件(數據變更)重構為SOL語句。-w 將行事件(數據變更)重構為SQL語句,并輸出注釋信息
?測試
日志文件默認是row類型,liunx 里應該加上 -v 執行:mysqlbinlog -v binlog.000002
執行結果:
?更改日志文件格式查看日志內容
1.執行 vim /etc/my.cnf
2.添加binlog_format = STATEMENT
3.保存后重啟mysql:systemctl restart mysqld?
又生成了日志 binlog.000003,因為改了日志格式,所以后面日志將會寫入00003
4.測試?
4.1.輸入update score set math = math + 1
update score set math = math + 1 where id = 2
4.2.mysqlbinlog ?binlog.000003
mysqlbinlog binlog.000003文件中會出現記錄:
日志刪除
?
對于比較繁忙的業務系統,每天生成的binlog數據巨大,如果長時間不清除,將會占用大量磁盤空間。可以通過以下幾種方式清理日志:
指令 | 含義 |
---|---|
reset master | 刪除全部 binlog 日志,刪除之后,日志編號,將從 binlog.000001重新開始 |
purge master logs to ‘binlog.***’ | 刪除 *** 編號之前的所有日志 |
purge master logs before ‘yyyy-mm-dd hh24:mi:ss’ | 刪除日志為”yyyy-mm-dd hh24:mi:ss”之前產生的所有日志 |
mysql下執行:??
?purge master logs to ‘binlog.000002'
也可以在mysql的配置文件中配置二進制日志的過期時間,設置了之后,二進制日志過期會自動刪除.
mysql下執行
show variables like '%binlog_expire_logs_seconds%'
這里是30day,可以在mysql配置文件中調整為其他時間。
查詢日志
不推薦開啟查詢日志
簡述:查詢日志中記錄了客戶端的所有操作語句,而二進制日志不包含查詢數據的SQL語句。默認情況下,查詢日志是未開啟的。如果需要開啟查詢日志,可以設置一下配置:
進入MySQL的配置文件 /etc/my.cnf 文件?vim? /etc/my.cnf
添加如下內容:
#該選項用來開啟查詢日志,可選值:0或者1;0代表關閉,1代表開啟
general_log=1#設置日志的文件名為mysql_query.log,如果沒有指定,默認的文件名為 host_name.log
general_log_file=mysql_query.log
重啟服務 systemctl restart mysqld
會記錄所有sql語句,不再展示執行過程,只展示日志記錄
慢查詢日志
?簡述:設置一個時間,這個sql語句執行超過這個時間了,就記錄在日志里。
慢查詢日志記錄了所有執行時間超過參數 long_query_time 設置值并且掃描記錄數不小于 min_examined_row_limit的所有的SQL語句的日志,默認未開啟。long_query_time 默認為 10 秒,最小為0,精度可以到微秒。
#慢查詢日志,1開啟
slow_query_log=1
#執行時間參數,默認10s改成2s
long_query_time=2
?更改配置文件,重啟mysql。
?發現有慢查詢日志文件了,執行實時刷新慢查詢日志。
執行百萬級查詢
日志記錄為
默認情況下,不會記錄管理語句,也不會記錄不使用索引進行查找的查詢。可以使用log_slow_admin_statements和更改此行為log_queries_not_using_indexes,如下所述,了解即可。
#記錄執行較慢的管理語句
log_slow_admin_statements = 1
#記錄執行較慢的未使用索引的語句
log_queries_not_using_indexes = 1