The General Query Log contains a listing of general information from client connects, disconnects, and queries. It is invaluable for debugging, yet it poses as a hindrance to performance (citation?).
An example view of a General Query Log is seen below:
To determine if the General Log is currently being captured:
SELECT @@general_log; -- 1 = Capture is active; 0 = It is not.
To determine the filename of the capture file:
SELECT @@general_log_file; -- Full path to capture file
If the fullpath to the file is not shown, the file exists in the datadir
.
Windows example:
+----------------------------------------------------------+
| @@general_log_file |
+----------------------------------------------------------+
| C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Data\\GuySmiley.log |
+----------------------------------------------------------+
Linux:
+-----------------------------------+
| @@general_log_file |
+-----------------------------------+
| /var/lib/mysql/ip-ww-xx-yy-zz.log |
+-----------------------------------+
When changes are made to the general_log_file
GLOBAL variable, the new log is saved in the datadir
. However, the fullpath may no longer be reflected by examining the variable.
In the case of no entry for general_log_file
in the configuration file, it will default to @@hostname
.log in the datadir
.
Best practices are to turn OFF capture. Save the log file to a backup directory with a filename reflecting the begin/end datetime of the capture. Deleting the prior file if a filesystem move did not occur of that file. Establish a new filename for the log file and turn capture ON (all show below). Best practices also include a careful determination if you even want to capture at the moment. Typically, capture is ON for debugging purposes only.
A typical filesystem filename for a backed-up log might be:
/LogBackup/GeneralLog_20160802_1520_to_20160802_1815.log
where the date and time are part to the filename as a range.
For Windows note the following sequence with setting changes.
SELECT @@general_log; -- 0. Not being captured
SELECT @@general_log_file; -- C:\\ProgramData\\MySQL\\MySQL Server 5.6\\Data\\GuySmiley.log
SELECT @@datadir; -- C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Data\\
SET GLOBAL general_log_file='GeneralLogBegin_20160803_1420.log'; -- datetime clue
SET GLOBAL general_log=1; -- Turns on actual log capture. File is created under `datadir`
SET GLOBAL general_log=0; -- Turn logging off