Mysql57开启binary log功能

  • 前言

操作系统:windwos 11

Mysql安装位置:D:\Program\mysql-5.7.37-winx64

my.ini位置:D:\Program\mysql-5.7.37-winx64\my.ini

二进制日志(binnary log)以事件形式记录了对MySQL数据库执行更改的所有操作。

binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但可以通过查询通用日志来查看MySQL执行过的所有语句。

需要注意的一点是,即便update操作没有造成数据变化,也是会记入binlog

binlog有两个常用的使用场景:

  1. 主从复制:mysql replication在master端开启binlog,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。

  2. 数据恢复:通过mysqlbinlog工具来恢复数据。

  • 确认MySQL是否已经开启binary log功能

SHOW VARIABLES LIKE 'log_bin';

未开启如图(OFF):

  • 修改配置文件my.ini

[mysqld]
#设置3306端口
port=3306

#数据库服务ID号,如果使用log-bin需要设置,并保证唯一
server-id=20230403001

#指定log_bin二进制文件的存储路径windows下不支持虚拟路径
#1.指定绝对路径C:\Mysql\Log\log_bin系统生成规则C:\Mysql\Log\log_bin.000001
#2.直接写生成文件名log_bin系统生成规则D:\Program\mysql-5.7.37-winx64\data\log_bin.000001
log-bin=mysql_bin

#binlog_format设置说明
#STATEMENT模式(SBR)
#每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
#ROW模式(RBR)业内目前推荐使用的是ROW模式,准确性高,但文件大
#不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
#MIXED模式(MBR)
#以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
binlog-format=ROW

#bin_log日志的过期时间
expire_logs_days = 30

#收集哪些数据库日志,默认为全部数据库进行日志收集,可反向设置不收集:[mysqld] binlog_ignore_db 可百度binlog_do_db 与 binlog_ignore_db
#binlog_do_db = db1
#binlog_do_db = db2

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
  • 重启数据库

net stop MySQL57

net start MySQL57

开启如图(NO):

Mysql57开启binary log功能_第1张图片

  • 模拟产生操作运行 增 删 改 查 语句

运行中...

  • 恢复相关关键字(另起一篇文章记录)

        通过mysqlbinlog 找到删除的数据

        MySQL数据库Binlog解析工具--binlog2sql

  • mysql与binary log相关的查询语句

#注意:MySQL默认是没有开启二进制日志的。
#基础参数查看:
#开关:
select @@log_bin;
#日志路径及名字
select @@log_bin_basename;
#服务ID号:
select @@server_id;
#二进制日志格式:
select @@binlog_format;
#双一标准之二:
select @@sync_binlog;;
# 查看日志的开启情况
show variables like '%log_bin%';
#查看一共多少个binlog
show BINARY logs;
#查看mysql正在使用的日志文件
show master status;
#event查看
-- Log_name:binlog文件名
-- Pos:开始的position    
-- Event_type:事件类型
-- Format_desc:格式描述,每一个日志文件的第一个事件,多用户没有意义,MySQL识别binlog必要信息
-- Server_id:mysql服务号标识
-- End_log_pos:事件的结束位置号 
-- Info:事件内容
show binlog events in 'mysql-bin.000001';
 
 
-- 查看binglog几天删除一次默认为0不删除  保留一个全备周期;
show variables like '%expire%';
 
-- 刷新会生成新的 binlog
flush logs; 
   
 
-- 查看bingmax_binlog_size 最大为18446744073709547520 
show global variables like '%binlog_cache%';

你可能感兴趣的:(mysql,java,php)