在MySQL5.7中,默认情况下binlog是关闭的,需要手动开启。可以按照以下步骤开启binlog。
1.binlog介绍
MySQL的二进制日志记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。一般来说开启二进制日志大概会有1%的性能损耗。
二进制有两个最重要的使用场景:
1)MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
2)数据恢复,通过使用mysqlbinlog工具来使恢复数据。
二进制日志包括两类文件:
- 二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,
- 二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。
2.查看binlog是否开启
#binlog是否开开启及位置
show variables like 'log_bin'; #如果返回值为ON,则表示binlog已经开启
#binlog时效配置
show variables like '%expire%';
#查看binlog日志保存格式
show variables like 'binlog_format';
3.修改MySQL配置文件my.cnf
在[mysqld]下增加如下配置:
[mysqld]
server-id=1 #一定设置不然启动报错
log-bin=/home/logs/mysql-bin #binlog日志路径
expire_logs_days = 5 #超过5天定时清理,0表示Binlog文件永不过期,即不自动清除Binlog文件。
max_binlog_size = 100m #binlog每个日志文件大小
binlog_format = row #binlog日志格式
其中,log-bin=mysql-bin表示开启binlog,并将binlog文件保存在mysq-bin文件中。server-id表示MySQL服务器的唯一标识,可以设置为任意整数。
4.重启MySQL服务,使配置生效。
#windows
net stop mysql
net start mysql
#linux
service mysql stop
service mysql start
service mysql restart
或
systemctl start mysqld
systemctl status mysqld
systemctl stop mysqld
systemctl restart mysqld
5.查看binlog的内容
root@localhost >show binlog events;
+-----------------+-----+----------------+-----------+-------------+------------------
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+-----------------+-----+----------------+-----------+-------------+------------------
| mybinlog.000001 | 4 | Format_desc | 103 | 123 | Server ver: 5.7.42-log, Binlog ver: 4 |
| mybinlog.000001 | 123 | Previous_gtids | 103 | 154 | |
| mybinlog.000001 | 154 | Stop | 103 | 177 |
3 rows in set (0.00 sec)
这将显示所有的binlog事件,包括时间戳、事件类型、数据库、表名、操作等信息
注意:开启binlog会带来一定的性能开销,因此在生产环境中需要谨慎使用。同时,为了保证数据的一致性,应该定期备份binlog文件。
6.binlog常用命令
#查看所有的binlog日志列表
show master logs;
#查看master状态,即最后一个binlog日志的编号名称,及其最后一个操作时间pos结束点值
show master status;
#flush刷新binlog日志,此刻之后会产生一个新编号的binlog日志文件
flush logs;
#清空所有binlog日志,会删除所有日志,并让日志文件重新从000001开始 (生产上慎用)
reset master;
#查看binlog是否开启、位置
show variables like '%log_bin%';
----输出结果
+---------------------------------+------------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------------+
| log_bin | ON |
| log_bin_basename | /data/mysql/binlog/mysql-bin |
| log_bin_index | /data/mysql/binlog/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+------------------------------------+
6 rows in set (0.00 sec)
7.binlog格式有哪些
8.清理binlog
(1) 使用reset master,该命令将会删除所有日志,并让日志文件重新从000001开始。生产环境慎用
(2) 使用命令
#语法
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
例如
#删除指定binlog之前的binlog,磁盘上也跟着删除
purge master logs to "binlog_name.00000X" ;
#删除指定时间之前的binlog,磁盘上也跟着删除
purge master logs before "2023-09-10";
(3) 配置文件中增加 expire_logs_days=N 指定过了多少天日志自动过期清空或修改全局参数。该参数在MySQL8.0.中已废弃,由binlog_expire_logs_seconds代替
#5.7
set global expire_logs_days=5;
#8.0
set global binlog_expire_logs_seconds=259200;
9.查看binlog文件内容
9.1.查看binlog
binlog本身是一类二进制文件。二进制文件更省空间,写入速度更快,是无法直接打开来查看的。
#statement格式的二进制文件
mysqlbinlog mysql-bin.000001
#row格式,加上-v或者-vv参数
mysqlbinlog -vv mysql-bin.000001
#基于开始/结束时间
/usr/local/mysql/bin/mysqlbinlog --start-datetime="2013-03-01 00:00:00" --stop-datetime="2014-03-21 23:59:59" /usr/local/mysql/var/mysql-bin.000007 -r test2.sql
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





