只需一步,快速开始
主题 1005|帖子 1005|积分 3015
binlog是MySQL的二进制日志,并且是MySQL中最重要的日志。binlog记录了对MySQL数据库执行更改的所有操作,包括对数据库表结构的变更,对数据的变更,例如CREATE、ALTER TABLE、INSERT、UPDATE、DELETE…,但是不会记录查询语句select。需要注意的是,如果是update操作,即使是没有数据更新,也会记录在binlog日志中,binlog日志是以事件形式记录,并且还包含语句所执行的消耗时间。
master端开启binlog,master把二进制日志传递给slaves来达到master-slave数据保持一致。
可以通过mysqlbinlog工具解析binlog来恢复数据。
binlog存放在/var/lib/mysql里面的,如果是docker,则在相应的映射目录
在MySQL配置文件my.cnf或者my.ini中[mysqld]标签内修改
基于SQL语句的复制(statement-based replication),每一条会修改数据的sql语句都会记录到binlog中。 优点: 不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能 缺点: 某些情况会导致master-slave中的数据不一致,例如sleep(),last_insert_id()等
基于行的复制(row-based replication),不记录每条sql语句的上下文信息,仅记录哪条数据被修改了,修改成什么样。 优点: 任何情况都可以复制,并且不会出现特定情况下存储过程、function等调用或者触发无法被正确复制的问题 缺点: binlog日志文件会非常大 master上执行update语句时,所有变化都会写到binlog里面,SBR只会写一次,所以会导致频繁发生binlog的并发写问题
上面两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
您需要 登录 才可以下载或查看,没有账号?立即注册
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
民工心事