

# 启用 MariaDB 二进制日志注释
<a name="USER_LogAccess.MariaDB.BinarylogAnnotation"></a>

在 MariaDB 数据库实例中，您可以使用 `Annotate_rows` 事件注释某个行事件，并在注释中包含导致行事件的 SQL 查询的副本。此方法提供了与对 RDS for MySQL 数据库实例启用 `binlog_rows_query_log_events` 参数类似的功能。

您可以通过创建自定义参数组并将 `binlog_annotate_row_events` 参数设置为 **1** 来全局启用二进制日志注释。您还可以通过调用 `SET SESSION binlog_annotate_row_events = 1` 在会话级别启用注释。使用 `replicate_annotate_row_events` 将二进制日志注释复制到副本实例（如果已对其启用二进制日志记录）。使用这些设置需要特殊权限。

下面是 MariaDB 中的基于行的事务的示例。基于行的日志记录的使用通过将事务隔离级别设置为“已提交读”来触发。

```
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE square(x INT PRIMARY KEY, y INT NOT NULL) ENGINE = InnoDB;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN
INSERT INTO square(x, y) VALUES(5, 5 * 5);
COMMIT;
```

没有注释时，事务的二进制日志条目与下面的类似：

```
BEGIN
/*!*/;
# at 1163
# at 1209
#150922  7:55:57 server id 1855786460  end_log_pos 1209         Table_map: `test`.`square` mapped to number 76
#150922  7:55:57 server id 1855786460  end_log_pos 1247         Write_rows: table id 76 flags: STMT_END_F
### INSERT INTO `test`.`square`
### SET
###   @1=5
###   @2=25
# at 1247
#150922  7:56:01 server id 1855786460  end_log_pos 1274         Xid = 62
COMMIT/*!*/;
```

以下语句为此相同事务启用会话级注释，然后在提交事务后禁用这些注释：

```
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE square(x INT PRIMARY KEY, y INT NOT NULL) ENGINE = InnoDB;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET SESSION binlog_annotate_row_events = 1;
BEGIN;
INSERT INTO square(x, y) VALUES(5, 5 * 5);
COMMIT;
SET SESSION binlog_annotate_row_events = 0;
```

当有注释时，事务的二进制日志条目与下面的类似：

```
BEGIN
/*!*/;
# at 423
# at 483
# at 529
#150922  8:04:24 server id 1855786460  end_log_pos 483  Annotate_rows:
#Q> INSERT INTO square(x, y) VALUES(5, 5 * 5)
#150922  8:04:24 server id 1855786460  end_log_pos 529  Table_map: `test`.`square` mapped to number 76
#150922  8:04:24 server id 1855786460  end_log_pos 567  Write_rows: table id 76 flags: STMT_END_F
### INSERT INTO `test`.`square`
### SET
###   @1=5
###   @2=25
# at 567
#150922  8:04:26 server id 1855786460  end_log_pos 594  Xid = 88
COMMIT/*!*/;
```