2020-11-28 19:43:06
binlog,即归档日志,是MySQL数据库记录所有更改操作的关键工具,但不包括SELECT和SHOW等查询操作,因为它们并未实际修改数据。然而,即使某些操作看起来并未导致数据库变化,也可能被记录在binlog中,用于后续的恢复或审计。
binlog的重要功能包括时间点恢复(Point-in-Time recovery),通过start-datetime/stop-datetime或start-position/stop-position选择性读取,以及数据同步,将更改同步到其他MySQL服务器。此外,binlog的审计功能有助于检测数据库安全威胁,如注入攻击。
binlog文件存储的内容遵循特定格式,写入机制简单而有序。事务执行时,先写入内存的binlog cache,事务提交时,将整个事务内容写入binlog文件,同时清空缓存。系统为每个线程分配了binlog cache,所有线程共享同一份binlog文件。write操作快速,仅写入page cache,真正持久化到磁盘由fsync操作完成,其时机由sync_binlog参数控制。
binlog_cache_size参数根据会话分配,超出内存限制的binlog会被暂存到磁盘。max_binlog_size则限制单个binlog文件的大小,超过后将自动分割为新的文件。为了平衡性能和数据完整性,一般不建议将sync_binlog设置为0,常见设置为100~1000之间的值,但这也意味着可能丢失最近N个事务的记录。
最后,binlog的存储位置和清理策略是通过相关参数进行管理的,确保系统的稳定和效率。