#### 6.4.5.5 配置审核日志特征

本节介绍如何配置审计日志特性，例如审计日志插件写入事件的文件、写入事件的格式、是否启用日志文件压缩和加密、空间管理等。

-   [审计日志文件的命名约定](audit-log-logging-configuration.html#audit-log-file-name)

-   [选择审核日志文件格式](audit-log-logging-configuration.html#audit-log-file-format)

-   [压缩审计日志文件](audit-log-logging-configuration.html#audit-log-file-compression)

-   [加密审计日志文件](audit-log-logging-configuration.html#audit-log-file-encryption)

-   [手动解压缩和解密审计日志文件](audit-log-logging-configuration.html#audit-log-file-uncompression-decryption)

-   [MySQL 8.0.17 之前的审计日志文件加密](audit-log-logging-configuration.html#audit-log-file-encryption-old)

-   [审计日志文件的空间管理](audit-log-logging-configuration.html#audit-log-space-management)

-   [审计日志的编写策略](audit-log-logging-configuration.html#audit-log-strategy)

笔记

此处描述的加密功能适用于 MySQL 8.0.17，除了将当前加密功能与以前更有限的功能进行比较的部分；看[MySQL 8.0.17 之前的审计日志文件加密](audit-log-logging-configuration.html#audit-log-file-encryption-old).

有关影响审计日志记录的函数和系统变量的更多信息，请参阅[审计日志功能](audit-log-reference.html#audit-log-routines)， 和[审核日志选项和变量](audit-log-reference.html#audit-log-options-variables).

审计日志插件还可以根据事件内容或事件源自的帐户控制将哪些审计事件写入审计日志文件。看[第 6.4.5.7 节，“审核日志过滤”](audit-log-filtering.html).

##### 审计日志文件的命名约定

要配置审计日志文件名，请设置[`审计日志文件`](audit-log-reference.html#sysvar_audit_log_file)服务器启动时的系统变量。默认名称是`审计日志`在服务器数据目录中。为获得最佳安全性，请将审核日志写入仅 MySQL 服务器和有正当理由查看日志的用户可访问的目录。

该插件解释[`审计日志文件`](audit-log-reference.html#sysvar_audit_log_file)value 由可选的前导目录名称、基本名称和可选的后缀组成。如果启用压缩或加密，则有效文件名（实际用于创建日志文件的名称）与配置的文件名不同，因为它有额外的后缀：

-   如果启用压缩，插件会添加一个后缀`.gz`.

-   如果启用了加密，插件会添加一个后缀`.*`pwd_id`*.enc`， 在哪里*`pwd_id`*指示用于日志文件操作的加密密码。审计日志插件将加密密码存储在密钥环中；看[加密审计日志文件](audit-log-logging-configuration.html#audit-log-file-encryption).

    有效的审计日志文件名是在配置的文件名中添加了适用的压缩和加密后缀而产生的名称。例如，如果配置[`审计日志文件`](audit-log-reference.html#sysvar_audit_log_file)值为`审计日志`，有效文件名是下表所示的值之一。

| 启用的功能 | 有效文件名 |
| ----- | ----- |
| 无压缩或加密 | `审计日志` |
| 压缩 | `审计日志.gz` |
| 加密 | `审计日志。*`pwd_id`*.enc` |
| 压缩、加密 | `audit.log.gz.*`pwd_id`*.enc` |

*`pwd_id`*表示用于加密或解密文件的密码的ID。*`pwd_id`*格式是*`pwd_timestamp-seq`*， 在哪里：

-   *`pwd_timestamp`*是 UTC 值`*`YYYYMMDD`*T*`嗯嗯`*`指示密码创建时间的格式。

-   *`序列`*是一个序列号。序列号从 1 开始，对于具有相同密码的密码递增*`pwd_timestamp`*价值。

    这里有一些例子*`pwd_id`*密码 ID 值：


```
20190403T142359-1
20190403T142400-1
20190403T142400-2
```

为了构造相应的密钥环 ID 用于在密钥环中存储密码，审计日志插件添加了前缀`审计日志-`到*`pwd_id`*价值观。对于刚刚显示的示例密码 ID，对应的密钥环 ID 为：

```
audit_log-20190403T142359-1
audit_log-20190403T142400-1
audit_log-20190403T142400-2
```

审计日志插件当前用于加密的密码ID是最大的*`pwd_timestamp`*价值。如果多个密码有*`pwd_timestamp`*值，当前密码 ID 是序列号最大的 ID。例如，在前面的一组密码 ID 中，其中两个具有最大的时间戳，`20190403T142400`, 所以当前密码 ID 是序号最大的那个 (`2`）。

审计日志插件在初始化和终止期间根据有效的审计日志文件名执行某些操作：

-   在初始化期间，插件会检查具有审计日志文件名的文件是否已经存在，如果存在则重命名它。（在这种情况下，插件假定先前的服务器调用在审计日志插件运行时意外退出。）然后插件写入一个新的空审计日志文件。

-   在终止期间，插件重命名审计日志文件。

-   文件重命名（无论是在插件初始化期间还是终止期间）根据自动基于大小的日志文件轮换的常规规则进行；看[手动审核日志文件轮换](audit-log-logging-configuration.html#audit-log-manual-rotation).

##### 选择审核日志文件格式

要配置审核日志文件格式，请设置[`审计日志格式`](audit-log-reference.html#sysvar_audit_log_format)服务器启动时的系统变量。这些格式可用：

-   `新的`: 新型 XML 格式。这是默认设置。

-   `老的`: 旧式 XML 格式。

-   `JSON`: JSON 格式。

    有关每种格式的详细信息，请参阅[第 6.4.5.4 节，“审核日志文件格式”](audit-log-file-formats.html).

    如果你改变[`审计日志格式`](audit-log-reference.html#sysvar_audit_log_format), 建议你也改[`审计日志文件`](audit-log-reference.html#sysvar_audit_log_file).例如，如果设置[`审核日志格式`](audit-log-reference.html#sysvar_audit_log_format)到`JSON`设置[`审核日志文件`](audit-log-reference.html#sysvar_audit_log_file)到`审计json`。否则，较新的日志文件的格式将与较旧的文件不同，但它们都将具有相同的基本名称，并且在格式更改时没有任何指示。

##### 压缩审核日志文件

可以为任何日志格式启用审核日志文件压缩。

要配置审核日志文件压缩，请设置[`审计日志压缩`](audit-log-reference.html#sysvar_audit_log_compression)服务器启动时的系统变量。允许值为`没有一个`（无压缩；默认设置）和`GZIP`（GNU压缩）。

如果同时启用了压缩和加密，则压缩发生在加密之前。要手动恢复原始文件，请先解密，然后解压缩。看见[手动解压缩和解密审核日志文件](audit-log-logging-configuration.html#audit-log-file-uncompression-decryption).

##### 加密审核日志文件

可以为任何日志格式启用审核日志文件加密。加密基于用户定义的密码（审计日志插件生成的初始密码除外）。要使用此功能，必须启用MySQL密钥环，因为审核日志使用它存储密码。可以使用任何钥匙圈组件或插件；有关说明，请参阅[第6.4.4节，“MySQL密钥环”](keyring.html).

要配置审核日志文件加密，请设置[`审计日志加密`](audit-log-reference.html#sysvar_audit_log_encryption)服务器启动时的系统变量。允许值为`没有一个`（无加密；默认设置）和`AES`（AES-256-CBC密码加密）。

要在运行时设置或获取加密密码，请使用以下审核日志功能：

-   要设置当前加密密码，请调用[`审核日志加密密码设置（）`](audit-log-reference.html#function_audit-log-encryption-password-set).此功能将新密码存储在钥匙圈中。如果启用了加密，它还会执行日志文件旋转操作，重命名当前日志文件，并开始使用密码加密的新日志文件。文件重命名根据基于大小的日志文件自动旋转的常规规则进行；看见[手动审核日志文件轮换](audit-log-logging-configuration.html#audit-log-manual-rotation).

    [](<>)[](<>)

    如果[`审核日志密码历史记录保存天数`](audit-log-reference.html#sysvar_audit_log_password_history_keep_days)系统变量为非零，调用[`审核日志加密密码设置（）`](audit-log-reference.html#function_audit-log-encryption-password-set)还会导致旧存档的审核日志加密密码过期。有关审核日志密码历史记录（包括密码存档和过期）的信息，请参阅该变量的说明。

-   要获取当前的加密密码，请调用[`审核日志加密密码获取`](audit-log-reference.html#function_audit-log-encryption-password-get)毫无争议。要通过ID获取密码，请传递一个参数，该参数指定当前密码或存档密码的密钥环ID。

     [](<>)[](<>)

    要确定存在哪些审核日志密钥环ID，请查询性能模式[`钥匙圈`](performance-schema-keyring-keys-table.html)表：

     [](<>)[](<>)

    ```
    mysql> SELECT KEY_ID FROM performance_schema.keyring_keys
           WHERE KEY_ID LIKE 'audit_log%'
           ORDER BY KEY_ID;
    +-----------------------------+
    | KEY_ID                      |
    +-----------------------------+
    | audit_log-20190415T152248-1 |
    | audit_log-20190415T153507-1 |
    | audit_log-20190416T125122-1 |
    | audit_log-20190416T141608-1 |
    +-----------------------------+
    ```

    有关审核日志加密功能的更多信息，请参阅[审核日志功能](audit-log-reference.html#audit-log-routines).

    当审计日志插件初始化时，如果发现日志文件加密已启用，它将检查密钥环是否包含审计日志加密密码。如果没有，插件会自动生成一个随机初始加密密码，并将其存储在密钥环中。要发现此密码，请调用[`审核日志加密密码获取`](audit-log-reference.html#function_audit-log-encryption-password-get).

    如果同时启用了压缩和加密，则压缩发生在加密之前。要手动恢复原始文件，请先解密，然后解压缩。看见[手动解压缩和解密审核日志文件](audit-log-logging-configuration.html#audit-log-file-uncompression-decryption).

##### 手动解压缩和解密审核日志文件

可以使用标准工具对审核日志文件进行解压缩和解密。这应该只针对已关闭（存档）且不再使用的日志文件，而不是审核日志插件当前正在编写的日志文件。您可以识别归档的日志文件，因为它们已被audit log插件重命名，以便在文件名中的基本名称后面包含一个时间戳。

在本次讨论中，假设[`审核日志文件`](audit-log-reference.html#sysvar_audit_log_file)即将`审计日志`。在这种情况下，存档的审核日志文件的名称如下表所示。

| 启用的功能 | 存档文件名 |
| ----- | ----- |
| 没有压缩或加密 | `审计*`时间戳`*.日志` |
| 压缩 | `审计*`时间戳`*.日志。广州` |
| 加密 | `审计*`时间戳`*.日志*`pwd_id`*.enc` |
| 压缩、加密 | `审计*`时间戳`*.日志。广州*`pwd_id`*.enc` |

如中所述[审核日志文件的命名约定](audit-log-logging-configuration.html#audit-log-file-name), *`pwd_id`*格式是*`pwd_时间戳-seq`*因此，存档的加密日志文件的名称实际上包含两个时间戳。第一个指示文件旋转时间，第二个指示创建加密密码的时间。

考虑以下一组已存档的加密日志文件名称：

```
audit.20190410T205827.log.20190403T185337-1.enc
audit.20190410T210243.log.20190403T185337-1.enc
audit.20190415T145309.log.20190414T223342-1.enc
audit.20190415T151322.log.20190414T223342-2.enc
```

每个文件名都有一个唯一的旋转时间戳。相比之下，密码时间戳不是唯一的：

-   前两个文件具有相同的密码ID和序列号(`20190403T185337-1`).他们有相同的加密密码。

-   后两个文件具有相同的密码ID(`20190414T223342`)但是不同的序列号(`1.`, `2.`)。这些文件有不同的加密密码。

    要手动解压缩压缩的日志文件，请使用**解压缩**, **gzip-d**，或同等命令。例如：


```
gunzip -c audit.timestamp.log.gz > audit.timestamp.log
```

要手动解密加密的日志文件，请使用**openssl**命令例如：

```
openssl enc -d -aes-256-cbc -pass pass:password -md sha256
    -in audit.timestamp.log.pwd_id.enc
    -out audit.timestamp.log
```

要执行该命令，必须获得*`暗语`*，即加密密码。要做到这一点，请使用[`审核日志加密密码获取`](audit-log-reference.html#function_audit-log-encryption-password-get)。例如，如果审核日志文件名为`审计20190415T151322。日志20190414T22342-2。enc`，密码ID为`20190414T22342-2`钥匙圈ID是`审计-log-20190414T22342-2`.按如下方式检索密钥环密码：

```
SELECT audit_log_encryption_password_get('audit-log-20190414T223342-2');
```

如果对审核日志同时启用了压缩和加密，则压缩会在加密之前发生。在本例中，文件名为`.gz`和`.*`pwd_id`*.enc`添加后缀，对应于这些操作发生的顺序。要手动恢复原始文件，请反向执行操作。也就是说，首先解密文件，然后解压缩：

```
openssl enc -d -aes-256-cbc -pass pass:password -md sha256
    -in audit.timestamp.log.gz.pwd_id.enc
    -out audit.timestamp.log.gz
gunzip -c audit.timestamp.log.gz > audit.timestamp.log
```

##### MySQL 8.0.17之前的审核日志文件加密

本节介绍MySQL 8.0.17之前和之后的审计日志文件加密功能的差异，MySQL 8.0.17是实现密码历史记录（包括密码存档和过期）的时候。它还指出了审计日志插件如何处理从低于8.0.17的版本升级到MySQL 8.0.17或更高版本的问题。

| 特色 | MySQL 8.0.17之前的版本 | 从MySQL 8.0.17开始 |
| --- | ----------------- | --------------- |
| 密码数 | 只有一个密码 | 允许使用多个密码 |
| 加密日志文件名 | `.enc`后缀 | `.*`pwd_id`*.enc`后缀 |
| 密码密钥环ID | `审计日志` | `审计日志-*`pwd_id`*` |
| 密码历史记录 | 不 | 对 |

在MySQL 8.0.17之前，没有密码历史记录，因此设置新密码会使旧密码无法访问，导致MySQL Enterprise Audit无法读取使用旧密码加密的日志文件。如果您预计需要手动解密这些文件，则必须保留以前密码的记录。

如果在从较低版本升级到MySQL 8.0.17或更高版本时启用了审核日志文件加密，则审核日志插件将执行以下升级操作：

-   在插件初始化期间，插件会检查密钥环ID为的加密密码`审计日志`.如果找到密码，插件将使用中的密钥环ID复制密码`审计日志-*`pwd_id`*`格式化并将其用作当前加密密码。（有关*`pwd_id`*语法，参见[审核日志文件的命名约定](audit-log-logging-configuration.html#audit-log-file-name).)

-   现有加密日志文件的后缀为`.enc`.该插件不会将其重命名为后缀`.*`pwd_id`*.enc`，但只要ID为的密钥`审计日志`留在钥匙圈里。

-   当密码清理发生时，如果插件在`审计日志-*`pwd_id`*`格式，它还会使密钥环ID为的密码过期`审计日志`，如果存在的话。（此时，后缀为的加密日志文件`.enc`而不是`.*`pwd_id`*.enc`插件无法读取，因此假定您不再需要它们。）

##### 审计日志文件的空间管理

审核日志文件可能会变得相当大，并消耗大量磁盘空间。要管理使用的空间，请使用以下方法：

-   日志文件旋转。这涉及通过重命名当前日志文件来旋转它，然后使用原始名称打开一个新的当前日志文件。旋转可以手动执行，也可以配置为自动执行。

-   如果启用了自动旋转，则修剪旋转的JSON格式日志文件。可以根据日志文件的年龄（从MySQL 8.0.24开始）或组合日志文件的大小（从MySQL 8.0.26开始）执行修剪。

    要配置审核日志文件空间管理，请使用以下系统变量：

-   如果[`审核日志旋转大小`](audit-log-reference.html#sysvar_audit_log_rotate_on_size)为0（默认值），则禁用自动日志文件旋转：

    -   除非手动执行，否则不会发生旋转。

    -   要旋转当前文件，请手动重命名它，然后启用[`审核日志刷新`](audit-log-reference.html#sysvar_audit_log_flush)关闭它并使用原始名称打开新的当前日志文件；看见[手动审核日志文件轮换](audit-log-logging-configuration.html#audit-log-manual-rotation).

    -   不会修剪旋转的JSON格式日志文件；[`审核日志最大大小`](audit-log-reference.html#sysvar_audit_log_max_size)和[`审核日志删除秒`](audit-log-reference.html#sysvar_audit_log_prune_seconds)没有效果。

-   如果[`审核日志旋转大小`](audit-log-reference.html#sysvar_audit_log_rotate_on_size)大于0时，将启用自动审核日志文件轮换：

    -   当对当前日志文件的写入导致其大小超过[`审核日志旋转大小`](audit-log-reference.html#sysvar_audit_log_rotate_on_size)价值，以及在某些其他条件下；看见[自动审核日志文件循环](audit-log-logging-configuration.html#audit-log-automatic-rotation)。自动旋转时，审核日志插件会重命名当前日志文件，并使用原始名称打开新的当前日志文件。

    -   如果[`审核日志最大大小`](audit-log-reference.html#sysvar_audit_log_max_size)或[`审核日志删除秒`](audit-log-reference.html#sysvar_audit_log_prune_seconds)具有大于0的值。

    -   [`审核日志刷新`](audit-log-reference.html#sysvar_audit_log_flush)没有效果。

笔记

对于JSON格式的日志文件，当[`审核日志格式unix时间戳`](audit-log-reference.html#sysvar_audit_log_format_unix_timestamp)系统变量在运行时更改。但是，这并不是出于空间管理的目的，而是为了让给定的JSON格式日志文件中的所有记录都包含或不包含`时间`领域

笔记

旋转（重命名）的日志文件不会自动删除。例如，使用基于大小的日志文件旋转，重命名的日志文件具有唯一的名称，并且会无限期累积。它们不会从名称序列的末尾旋转。为避免过度使用空间：

-   从MySQL 8.0.24开始（对于JSON格式的日志文件）：启用日志文件修剪，如中所述[审核日志文件修剪](audit-log-logging-configuration.html#audit-log-pruning).

-   否则（对于非JSON文件，或者对于所有日志格式，在MySQL 8.0.24之前）：定期删除旧文件，必要时首先备份它们。如果备份的日志文件已加密，如果以后需要解密文件，还应将相应的加密密码备份到安全的地方。

    以下各节将更详细地描述日志文件的旋转和修剪。

-   [手动审核日志文件轮换](audit-log-logging-configuration.html#audit-log-manual-rotation)

-   [自动审核日志文件循环](audit-log-logging-configuration.html#audit-log-automatic-rotation)

-   [审核日志文件修剪](audit-log-logging-configuration.html#audit-log-pruning)

###### 手动审核日志文件轮换

如果[`审核日志旋转大小`](audit-log-reference.html#sysvar_audit_log_rotate_on_size)为0（默认值），除非手动执行，否则不会发生日志旋转。在这种情况下，当[`审核日志刷新`](audit-log-reference.html#sysvar_audit_log_flush)值从禁用变为启用。日志文件重命名必须在服务器外部完成。假设日志文件名为`审计日志`你需要维护三个最新的日志文件，在名称之间循环`审计日志1.`通过`审计日志3.`.在Unix上，手动执行旋转，如下所示：

1.  在命令行中，重命名当前日志文件：

    ```
    mv audit.log.2 audit.log.3
    mv audit.log.1 audit.log.2
    mv audit.log audit.log.1
    ```

    这种策略覆盖了当前的`审计日志3.`内容，对归档日志文件的数量及其使用的空间进行绑定。

2.  此时，插件仍在写入当前日志文件，该文件已重命名为`审计日志1.`。连接到服务器并刷新日志文件，以便插件将其关闭并重新打开新的日志文件`审计日志`文件：

    ```
    SET GLOBAL audit_log_flush = ON;
    ```

    [`审核日志刷新`](audit-log-reference.html#sysvar_audit_log_flush)它的特殊之处在于它的价值依然存在`关`因此，在再次启用它以执行另一次刷新之前，无需显式禁用它。

笔记

如果启用了压缩或加密，日志文件名包括表示已启用功能的后缀，如果启用了加密，日志文件名还包括密码ID。如果文件名包含密码ID，请确保在手动重命名的任何文件名中保留该ID，以便确定用于解密操作的密码。

笔记

对于JSON格式的日志记录，手动重命名审核日志文件会使日志读取功能无法使用它们，因为审核日志插件无法再确定它们是日志文件序列的一部分（请参阅[第6.4.5.6节，“读取审核日志文件”](audit-log-file-reading.html)考虑设置[`审核日志旋转大小`](audit-log-reference.html#sysvar_audit_log_rotate_on_size)大于0则改为使用基于大小的旋转。

###### 自动审核日志文件循环

如果[`审核日志旋转大小`](audit-log-reference.html#sysvar_audit_log_rotate_on_size)大于0，设置为[`审核日志刷新`](audit-log-reference.html#sysvar_audit_log_flush)没有效果。相反，每当对当前日志文件的写入导致其大小超过[`审核日志旋转大小`](audit-log-reference.html#sysvar_audit_log_rotate_on_size)值时，审核日志插件会自动重命名当前日志文件，并使用原始名称打开一个新的当前日志文件。

在以下情况下，也会发生基于大小的自动旋转：

-   在插件初始化期间，如果已经存在具有审核日志文件名的文件（请参阅[审核日志文件的命名约定](audit-log-logging-configuration.html#audit-log-file-name)).

-   在插件终止期间。

-   当[`审核日志加密密码设置（）`](audit-log-reference.html#function_audit-log-encryption-password-set)如果启用了加密，则调用函数来设置加密密码。（如果禁用加密，则不会发生旋转。）

    插件通过在原始文件的基本名称后插入时间戳来重命名原始文件。例如，如果文件名为`审计日志`，插件将其重命名为`审计20210115T140633。日志`时间戳是一个UTC值`*`YYYYMMDD`*T*`HHMMS`*`总体安排对于XML日志记录，时间戳表示旋转时间。对于JSON日志记录，时间戳是写入文件的最后一个事件的时间戳。

    如果日志文件已加密，则原始文件名已包含一个时间戳，指示加密密码的创建时间（请参阅[审核日志文件的命名约定](audit-log-logging-configuration.html#audit-log-file-name)).在本例中，旋转后的文件名包含两个时间戳。例如，一个名为`审计日志20210110T130749-1。enc`将重命名为以下值：`审计20210115T140633。日志20210110T130749-1。enc`.

###### 审核日志文件修剪

如果启用了自动日志文件旋转，审计日志插件支持修剪旋转的JSON格式审计日志文件。要使用此功能，请执行以下操作：

-   设置`审核日志格式`到`JSON`另外，还要考虑改变。[`审核日志文件`](audit-log-reference.html#sysvar_audit_log_file); 看见[选择审核日志文件格式](audit-log-logging-configuration.html#audit-log-file-format).)

-   设置[`审核日志旋转大小`](audit-log-reference.html#sysvar_audit_log_rotate_on_size)大于0以指定自动日志文件旋转的字节大小。

-   默认情况下，不会对自动旋转的JSON格式日志文件进行修剪。要启用修剪，请将以下系统变量之一设置为大于0的值：

    -   设置[`审核日志最大大小`](audit-log-reference.html#sysvar_audit_log_max_size)大于0以指定旋转日志文件的组合大小的字节限制，超过该限制，文件将被修剪。[`审核日志最大大小`](audit-log-reference.html#sysvar_audit_log_max_size)从MySQL 8.0.26开始提供。

    -   设置[`审核日志删除秒`](audit-log-reference.html#sysvar_audit_log_prune_seconds)大于0以指定在经过旋转的日志文件被修剪后的秒数。[`审核日志删除秒`](audit-log-reference.html#sysvar_audit_log_prune_seconds)从MySQL 8.0.24开始提供。

        非零值[`审核日志最大大小`](audit-log-reference.html#sysvar_audit_log_max_size)优先于[`审核日志删除秒`](audit-log-reference.html#sysvar_audit_log_prune_seconds)。如果在插件初始化时两者都设置为大于0，则会在服务器错误日志中写入警告。如果客户端在运行时将两者设置为大于0，则会向客户端返回警告。

        笔记

        错误日志中的警告被写为注释，即信息消息。为确保此类消息出现在错误日志中且不会被丢弃，请确保错误日志详细程度足以包含信息消息。例如，如果使用基于优先级的日志筛选，如中所述[第5.4.2.5节，“基于优先级的错误日志过滤（日志\_滤器\_内部“](error-log-priority-based-filtering.html)，设置[`日志错误详细`](server-system-variables.html#sysvar_log_error_verbosity)将系统变量的值设置为3。

    如果启用，JSON格式日志文件的修剪操作如下：

-   当自动旋转发生时；有关发生这种情况的条件，请参阅[自动审核日志文件循环](audit-log-logging-configuration.html#audit-log-automatic-rotation).

-   当全球[`审核日志最大大小`](audit-log-reference.html#sysvar_audit_log_max_size)或[`审核日志删除秒`](audit-log-reference.html#sysvar_audit_log_prune_seconds)系统变量在运行时设置。

    如果组合大小大于[`审核日志最大大小`](audit-log-reference.html#sysvar_audit_log_max_size)，审核日志插件将删除最旧的文件，直到它们的大小总和不超过限制。

    对于基于旋转日志文件年龄的修剪，修剪点是当前时间减去[`审核日志删除秒`](audit-log-reference.html#sysvar_audit_log_prune_seconds)。在旋转JSON格式的日志文件中，每个文件名的时间戳部分表示写入文件的最后一个事件的时间戳。审计日志插件使用文件名时间戳来确定哪些文件只包含早于修剪点的事件，并将其删除。

##### 编写审计日志的策略

审计日志插件可以使用多种日志写入策略中的任意一种。无论采用何种策略，日志记录都是在尽最大努力的基础上进行的，不保证一致性。

要指定写入策略，请设置[`审计日志策略`](audit-log-reference.html#sysvar_audit_log_strategy)服务器启动时的系统变量。默认情况下，策略值为`异步的`插件异步登录到缓冲区，等待缓冲区是否已满。可以告诉插件不要等待(`表演`)或者使用文件系统缓存同步登录(`半同步`)或者使用`sync（）`在每次写请求后调用(`同步的`).

对于异步写入策略[`审核日志缓冲区大小`](audit-log-reference.html#sysvar_audit_log_buffer_size)系统变量是以字节为单位的缓冲区大小。在服务器启动时设置此变量以更改缓冲区大小。该插件使用单个缓冲区，初始化时分配缓冲区，终止时删除缓冲区。插件不会为非同步写入策略分配此缓冲区。

异步日志记录策略具有以下特点：

-   对服务器性能和可扩展性的影响最小。

-   在尽可能短的时间内阻塞生成审计事件的线程；也就是说，分配缓冲区的时间加上将事件复制到缓冲区的时间。

-   输出进入缓冲区。一个单独的线程处理从缓冲区到日志文件的写入。

    使用异步日志记录，如果在写入文件期间出现问题，或者插件没有完全关闭（例如，如果服务器主机意外退出），日志文件的完整性可能会受到影响。要降低这种风险，请设置[`审计日志策略`](audit-log-reference.html#sysvar_audit_log_strategy)使用同步日志记录。

    缺点`表演`策略是在缓冲区已满时丢弃事件。对于负载较重的服务器，审核日志可能缺少事件。
