On Unix, the mysql client logs statements
executed interactively to a history file. By default, this file
.mysql_history in your home
directory. To specify a different file, set the value of the
MYSQL_HISTFILE environment variable.
Statement logging occurs as follows:
Statements are logged only when executed interactively. Statements are noninteractive, for example, when read from a file or a pipe. It is also possible to suppress statement logging by using the
Statements are ignored and not logged if they match any pattern in the “ignore” list. This list is described later.
mysql logs each nonignored, nonempty statement line individually.
If a nonignored statement spans multiple lines (not including the terminating delimiter), mysql concatenates the lines to form the complete statement, maps newlines to spaces, and logs the result, plus a delimiter.
Consequently, an input statement that spans multiple lines can be logged twice. Consider this input:
mysql> SELECT -> 'Today is' -> , -> CURDATE() -> ;
In this case, mysql logs the
“SELECT”, “'Today is'”,
“,”, “CURDATE()”, and “;”
lines as it reads them. It also logs the complete statement,
SELECT 'Today is' ,
CURDATE(), plus a delimiter. Thus, these lines appear
in logged output:
SELECT 'Today is' , CURDATE() ; SELECT 'Today is' , CURDATE();
As of MySQL 5.6.8, mysql ignores for logging
purposes statements that match any pattern in the
“ignore” list. By default, the pattern list is
"*IDENTIFIED*:*PASSWORD*", to ignore
statements that refer to passwords. Pattern matching is not case
sensitive. Within patterns, two characters are special:
?matches any single character.
*matches any sequence of zero or more characters.
To specify additional patterns, use the
--histignore option or set the
MYSQL_HISTIGNORE environment variable. (If
both are specified, the option value takes precedence.) The
value should be a list of one or more colon-separated patterns,
which are appended to the default pattern list.
Patterns specified on the command line might need to be quoted
or escaped to prevent your command interpreter from treating
them specially. For example, to suppress logging for
statements in addition to statements that refer to passwords,
invoke mysql like this:
shell> mysql --histignore="*UPDATE*:*DELETE*"
.mysql_history file should be protected
with a restrictive access mode because sensitive information
might be written to it, such as the text of SQL statements that
contain passwords. See Section 188.8.131.52, “End-User Guidelines for Password Security”.
If you do not want to maintain a history file, first remove
.mysql_history if it exists. Then use
either of the following techniques to prevent it from being
MYSQL_HISTFILEenvironment variable to
/dev/null. To cause this setting to take effect each time you log in, put it in one of your shell's startup files.
.mysql_historyas a symbolic link to
/dev/null; this need be done only once:
shell> ln -s /dev/null $HOME/.mysql_history