#### 4.5.1.3 mysql Client Logging

[]()[]()[]()[]()[]()[]()[]()[]()[]()

 The [**mysql**](mysql.html) client can do these types of logging for statements executed interactively:

* On Unix, [**mysql**](mysql.html) writes the statements to a history file. By default, this file is named `.mysql_history` in your home directory. To specify a different file, set the value of the `MYSQL_HISTFILE` environment variable.

* On all platforms, if the `--syslog` option is given, [**mysql**](mysql.html) writes the statements to the system logging facility. On Unix, this is `syslog`; on Windows, it is the Windows Event Log. The destination where logged messages appear is system dependent. On Linux, the destination is often the `/var/log/messages` file.

 The following discussion describes characteristics that apply to all logging types and provides information specific to each logging type.

* [How Logging Occurs](mysql-logging.html#mysql-logging-how-logging-occurs)

* [Controlling the History File](mysql-logging.html#mysql-logging-history-file)

* [syslog Logging Characteristics](mysql-logging.html#mysql-logging-syslog)

##### How Logging Occurs

 For each enabled logging destination, 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 [`--batch`](mysql-command-options.html#option_mysql_batch) or [`--execute`](mysql-command-options.html#option_mysql_execute) option.

* Statements are ignored and not logged if they match any pattern in the “ignore” list. This list is described later.

* [**mysql**](mysql.html) logs each nonignored, nonempty statement line individually.

* If a nonignored statement spans multiple lines (not including the terminating delimiter), [**mysql**](mysql.html) 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**](mysql.html) logs the “SELECT”, “'Today is'”, “,”, “CURDATE()”, and “;” lines as it reads them. It also logs the complete statement, after mapping `SELECT\n'Today is'\n,\nCURDATE()` to `SELECT 'Today is' , CURDATE()`, plus a delimiter. Thus, these lines appear in logged output:

```
SELECT
'Today is'
,
CURDATE()
;
SELECT 'Today is' , CURDATE();
```

[**mysql**](mysql.html) 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`](mysql-command-options.html#option_mysql_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 `UPDATE` and `DELETE` statements in addition to statements that refer to passwords, invoke [**mysql**](mysql.html) like this:

```
mysql --histignore="*UPDATE*:*DELETE*"
```

##### Controlling the History File

 The `.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 6.1.2.1, “End-User Guidelines for Password Security”](password-security-user.html). Statements in the file are accessible from the [**mysql**](mysql.html) client when the **up-arrow** key is used to recall the history. See [Disabling Interactive History](mysql-tips.html#mysql-history).

 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 created again:

* Set the `MYSQL_HISTFILE` environment 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.

* Create `.mysql_history` as a symbolic link to `/dev/null`; this need be done only once:

  ```
  ln -s /dev/null $HOME/.mysql_history
  ```

##### syslog Logging Characteristics

 If the `--syslog` option is given, [**mysql**](mysql.html) writes interactive statements to the system logging facility. Message logging has the following characteristics.

 Logging occurs at the “information” level. This corresponds to the `LOG_INFO` priority for `syslog` on Unix/Linux `syslog` capability and to `EVENTLOG_INFORMATION_TYPE` for the Windows Event Log. Consult your system documentation for configuration of your logging capability.

 Message size is limited to 1024 bytes.

 Messages consist of the identifier `MysqlClient` followed by these values:

* `SYSTEM_USER`

   The operating system user name (login name) or `--` if the user is unknown.

* `MYSQL_USER`

   The MySQL user name (specified with the [`--user`](mysql-command-options.html#option_mysql_user) option) or `--` if the user is unknown.

* `CONNECTION_ID`:

   The client connection identifier. This is the same as the [`CONNECTION_ID()`](information-functions.html#function_connection-id) function value within the session.

* `DB_SERVER`

   The server host or `--` if the host is unknown.

* `DB`

   The default database or `--` if no database has been selected.

* `QUERY`

   The text of the logged statement.

 Here is a sample of output generated on Linux by using `--syslog`. This output is formatted for readability; each logged message actually takes a single line.

```
Mar  7 12:39:25 myhost MysqlClient[20824]:
  SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
  DB_SERVER:'127.0.0.1', DB:'--', QUERY:'USE test;'
Mar  7 12:39:28 myhost MysqlClient[20824]:
  SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
  DB_SERVER:'127.0.0.1', DB:'test', QUERY:'SHOW TABLES;'
```

