手机电影网站怎么做的,云南信息港,网站建设首页该放什么软件,wordpress 链接提交之前在生产做修改数据的时候不小心改错了一行数据#xff0c;本来以为会被通报批评#xff0c;但是同事利用binlog日志查看到了之前的旧数据#xff0c;并且帮我回滚了#xff0c;学到了#xff0c;所以写了一篇binlog的文章分享给大家。
MySQL的Binary Log#xff08;简…之前在生产做修改数据的时候不小心改错了一行数据本来以为会被通报批评但是同事利用binlog日志查看到了之前的旧数据并且帮我回滚了学到了所以写了一篇binlog的文章分享给大家。
MySQL的Binary Log简称binlog是一种重要的数据库日志系统用于记录数据库服务器上所有更改数据的活动。Binlog是MySQL数据库中的一种二进制格式的日志文件它主要记录了对数据库数据进行修改的所有操作事件。这些操作不仅包括数据变更如INSERT、UPDATE、DELETE等DML语句还包括数据定义如CREATE、ALTER、DROP等DDL语句以及与事务相关的事件如BEGIN、COMMIT、ROLLBACK。
Binlog的主要作用包括
数据恢复Point-in-Time Recovery, PITR通过重放binlog中的事件可以将数据库恢复到任意指定的时间点实现数据备份后的增量恢复或灾难恢复。主从复制Replication在MySQL的主从架构中主库将binlog发送给从库从库通过解析并执行这些事件来保持与主库的数据同步。审计由于binlog记录了所有数据变更的详细操作可以用于监控数据变化、追踪问题原因或满足合规性要求的审计需求。
必要知识 Linux安装Mysql图文解说详细版安装包tar包版 Linux安装Mysql图文解说详细版
开启binlog
那么说了这么多我们来看看binlog长什么样首先我们要查看我们的mysql有没有开启binlog
SHOW VARIABLES LIKE log_bin;如果是off则说明没有开启binlog我们把他开启
vim /etc/my.cnfserver_id1
log_binmysql-bin
binlog_formatROW查看binlog show variables like log_bin%;可以看到成功开启
我们在 MySQL 的配置文件 my.cnf 中可以配置以下与二进制日志binlog相关的参数
log_bin这个参数用于启用二进制日志。你可以设置它的值为 ON 或者 OFF。例如log_binON。binlog_format这个参数用于设置二进制日志的格式。MySQL 支持多种二进制日志的格式包括 STATEMENT、ROW 和 MIXED。例如binlog_formatROW。expire_logs_days这个参数用于设置二进制日志的过期时间。当二进制日志的时间超过这个值时MySQL 会自动删除这些日志。例如expire_logs_days7。max_binlog_size这个参数用于设置每个二进制日志文件的最大大小。当一个二进制日志文件的大小达到这个值时MySQL 会自动创建一个新的二进制日志文件。例如max_binlog_size100M。binlog_do_db 和 binlog_ignore_db这两个参数用于设置哪些数据库的操作会被记录到二进制日志中以及哪些数据库的操作会被忽略。例如binlog_do_dbdatabase1 和 binlog_ignore_dbdatabase2。
其中data文件里面这两个就是我们的binlog文件 可以看到一个里面存储的事二进制字节一个存储的是有效的文件列表
验证binlog
前面我们说过binlog会记录不仅包括数据变更如INSERT、UPDATE、DELETE等DML语句还包括数据定义如CREATE、ALTER、DROP等DDL语句
我们创建一个表
CREATE TABLE account (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(15),
balance DECIMAL(10,2)
);
并且往里面添加一些数据
insert into account (name,balance) values (zhangsan,10.10);我们再查看我们的binlog日志注意mysqlbinlog 命令是在我们mysql的bin文件夹下面的一个命令
mysqlbinlog --no-defaults --base64-outputdecode-rows -v ../data/mysql-bin.00000*之后我们就可以看到我们刚刚添加的操作 如果我们更新一下里面的数据我们再看看会发生什么模拟生产上的误操作
update account set balance 20 where name zhangsan;可以看到binlog里面完整地记录了原值和更新后的值这对我们误操作的数据恢复是非常有用的。
例如实际生产过程中我们在一个时间段里面2024-04-20 13:20:00到 2024-04-20 15:00:00操作了生产的数据结果给操作错了这个时候我们加上时间范围参数可以查看这个时间段数据库修改的数据的信息
mysqlbinlog --no-defaults --base64-outputdecode-rows -v --start-datetime2024-04-20 13:20:00 --stop-datetime2024-04-20 15:00:00 ../data/mysql-bin.000002 就可以看到我们刚刚误操作的数据了这个时候我们只需要在把金额从20元改为10元即可。正常来说开发的同事是不能直接操作生产数据库的但是应为我们公司比较特殊所以经常要在生产执行sql如果遇见这种情况一定要发你的sql出来给同事检查或者领导审核一下避免不必要的损失。