Mysql general_log日志
開啟general_log,會將所有到達Mysql Server的SQL語句記錄,
包括數據庫連接方信息,數據庫、表打開信息,連接線程,CRUD等
一般不會開啟開功能,因為log的量會非常龐大,所以即開即用。
genral_log 有兩種存儲模式:
1.根目錄下文件存儲
2.mysql默認數據庫下的 genral_log 表存儲
但個別情況下可能會臨時的開一會兒general log以供排障使用。
例如:
不清楚程序執行了哪些sql語句,但是又要排除錯誤,找不到原因。可以短暫的開啟general log日志。
開啟
mysql5.0版本,如果要開啟slow log、general log,需要重啟。
從MySQL5.1.6版開始,general query log和slow query log開始支持寫到文件或者數據庫表兩種方式。
並且日志的開啟,輸出方式的修改,都可以在Global級別動態修改。
1.更改my.cnf配置文件
grep general_log /etc/my.cnf general_log = 1 general_log_file = /tmp/general.log
- 重新啟動mysql,這個操作相當於是永久生效。
- 當然這種方式是不允許在生產上采用的。因為要重啟mysql,會中斷mysql的業務。同時general.log會記錄所有的關於mysql的DDL和DML語句,非常消耗資源,一般都是在協助排除mysql故障時,臨時短暫的開啟幾分鍾。事后都要關閉的。
2.在mysql命令控制台操作
/* 需要root用戶才有訪問此文件的權限 */ # 查看狀態 show global variables like '%general%'; -- 輸出:general_log | OFF 默認是關閉的 # 開啟 -- 設置日志文件保存位置 set global general_log_file='/tmp/general_log'; -- 開啟日志功能 set global general_log=on; -- 查看狀態 show global variables like '%general%'; -- 輸出:general_log | ON
3.將日志保存在mysql數據庫general_log表中
# 設置輸出類型為 table set global log_output='table'; # 開啟日志功能 set global general_log=on; # 切換到數據庫:mysql use mysql; # 設置輸出類型為 table select * from general_log;
指令總結
# 查看日志是否開啟
show variables like 'general_log';
# 查看日志輸出類型 table或file
show variables like 'log_output';
# 查看日志文件保存位置
show variables like 'general_log_file';
# 設置日志文件保存位置
set global general_log_file='/tmp/general_log';
# 開啟日志功能
set global general_log=on;
# 設置輸出類型為 table
set global log_output='table';
# 設置輸出類型為file
set global log_output='file';
命令關閉 genral_log
SET GLOBAL general_log = 'OFF';
文件清空
# 找到general_log.CSV文件 cat /dev/null > general_log.csv
清空mysql默認數據庫 genral_log 表數據
truncate table mysql.general_log; -- 注意:這個表只能執行select或者truncate,沒有insert,update,delete權限來操作。慢查詢日志的中mysq.slow_log也是這權限。
轉移表數據 genral_log->genral_log_bak
create table mysql.general_log_bak as select * from mysql.;
轉載:
mysql general_log表添加索引
https://www.jianshu.com/p/41f80c676f55