环境:mysql5.7.12
查看是否开启binlog
执行:show binary logs;
输出错误,没有开启binlog。
修改my.ini文件
不要修改错了,是如下目录:
C:ProgramDataMySQLMySQL Server 5.7my.ini
配置文件中加入如下配置:
# Binary Logging.
log-bin=db-log#
binlog-format=Row
log-bin:表示日志文件名,这里也可以写绝对路径如:log-bin=e:dbdatadb-log
binlog-format:的取值有三个:
STATEMENT,ROW,MIXED。
① STATEMENT模式(SBR)
每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
② ROW模式(RBR)
不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
③ MIXED模式(MBR)
以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
通过上面的配置后重启mysql服务
net stop mysql57
net start mysql57
查看是否开启:
show variables like 'log_bin';
show binary logs;
如果日志文件没有给定决定路径,那日志默认路径在如下:
C:ProgramDataMySQLMySQL Server 5.7Data
binlog常用操作命令:
# 是否启用binlog日志show variables like 'log_bin';# 查看详细的日志配置信息show global variables like '%log%';# mysql数据存储目录show variables like '%dir%';# 查看binlog的目录show global variables like "%log_bin%";# 查看当前服务器使用的biglog文件及大小show binary logs;# 查看主服务器使用的biglog文件及大小# 查看最新一个binlog日志文件名称和Positionshow master status;# 事件查询命令# IN 'log_name' :指定要查询的binlog文件名(不指定就是第一个binlog文件)# FROM pos :指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)# LIMIT [offset,] :偏移量(不指定就是0)# row_count :查询总条数(不指定就是所有行)show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];# 查看 binlog 内容show binlog events;# 查看具体一个binlog文件的内容 (in 后面为binlog的文件名)show binlog events in 'master.000003';# 设置binlog文件保存事件,过期删除,单位天set global expire_log_days=3; # 删除当前的binlog文件reset master; # 删除slave的中继日志reset slave;# 删除指定日期前的日志索引中binlog日志文件purge master logs before '2019-03-09 14:00:00';# 删除指定日志文件purge master logs to 'master.000003';