MySQL开启BIN日志

开启binlog

[mysqld]
log-bin=mysql-bin
server_id=1
# 配置定时清理
expire_logs_days = 5
# binlog每个日志文件大小
max_binlog_size = 200m
# binlog日志格式,MySQL默认采用的是STATEMENT,建议使用MIXED
binlog_format = MIXED

重新启动mysql

binlog日志格式

  1. STATEMENT模式(SBR)

基于SQL语句的复制(statement-based replication),每一条会修改数据的sql语句都会记录到binlog中。
优点:
不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能
缺点:
某些情况会导致master-slave中的数据不一致,例如sleep(),last_insert_id()等

  1. ROW模式(RBR)

基于行的复制(row-based replication),不记录每条sql语句的上下文信息,仅记录哪条数据被修改了,修改成什么样。
优点:
任何情况都可以复制,并且不会出现特定情况下存储过程、function等调用或者触发无法被正确复制的问题
缺点:
binlog日志文件会非常大
master上执行update语句时,所有变化都会写到binlog里面,SBR只会写一次,所以会导致频繁发生binlog的并发写问题

  1. MIXED模式

上面两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

使用日志文件恢复数据

步骤一、找到要恢复数据的binlog文件

show variables like '%log_bin%';

image.png

步骤二:把日志文件导出为.sql文件

导出命令有两种,一种根据 事务区间导出,一种根据日期区间导出

事务区间导出命令:

mysqlbinlog --no-defaults --start-position=1 --stop-position=10 E:\phpstudy_pro\Extensions\MySQL5.7.26\log\mysql-bin.000001 -d 数据库名 > d:\test_pot.sql

日期区间导出命令:

mysqlbinlog --no-defaults --start-datetime="2022-08-10 9:16:59" --stop-datetime="2022-08-13 5:06:48" E:\phpstudy_pro\Extensions\MySQL5.7.26\log\mysql-bin.000001 -d 数据库名> d:\test.sql


标题:MySQL开启BIN日志
作者:admin
地址:http://www.mjdg.store/articles/2023/06/27/1687835715019.html

    评论
    0 评论
avatar

取消