MySQL的事务日志用于记录数据库的所有事务操作,它具有两种形式:
- 二进制日志(binary log):记录对数据的更改,用于数据恢复和主从复制。
- 中继日志(relay log):在从服务器上记录从主服务器读取的二进制日志事件,用于在从服务器上重放。
启用二进制日志:
sql
# 在MySQL配置文件中设置
log-bin=mysql-bin
# 或者在MySQL会话中设置
SET GLOBAL log_bin = ON;
二进制日志记录格式:
#190401 9:40:59 server id 1 end_log_pos 111 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1554111459/*!*/;
BEGIN
/*!*/;
# at 111
#190401 9:40:59 server id 1 end_log_pos 151 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1554111459/*!*/;
UPDATE products SET name='iPhone' WHERE id=1;
# at 151
#190401 9:40:59 server id 1 end_log_pos 191 Query thread_id=2 exec_time=0 error_code=0
COMMIT/*!*/;
# at 191
重要字段说明:
- end_log_pos: 下一事件的logfile位置。
- thread_id: 执行事件的线程ID。
- exec_time: 事件执行时间(微秒)。
- error_code: 事件的错误码。
- 事件类型(Query、Intvar、Rotate等)。
- 具体SQL语句或事件内容。
二进制日志的重要作用:
- 数据恢复:通过回放二进制日志中的事件可以实现数据库恢复到某个时间点的状态。
- 主从复制:从服务器可以通过请求并读取主服务器的二进制日志,实现两者数据的同步。
- 增量备份:通过备份二进制日志和相关的数据文件,可以实现对最近一段时间内数据变更的备份。