mysql的binlog日志

binlog日志的好处,binlog可以使我们进行数据恢复和主从复制的操作。
目前我使用的版本是mysql 5.7高版本的可能会有一些不同。但是基本都是一样的。

开启binlog日志

1、 查看是否开启了binlog日志

show variables like "%log_bin%"

查看log_bin 默认情况下是off(关闭)

mysql5.6 binlog参数 mysql中binlog_mysql


2、 编辑配置文件

vim /etc/my.cnf
[mysqld]
# 设置唯一id
server_id = 2
#设置日志路径,注意路经需要mysql用户有权限
log-bin=mysql-bin
# 设置日志格式
binlog_format = MIXED
#设置binlog清理时间
expire_logs_days = 30
#binlog每个日志文件大小
max_binlog_size = 100M
#binlog缓存大小
binlog_cache_size = 4M
#最大binlog缓存大小
max_binlog_cache_size = 512M

扩展: binlog日志的各个级别详情
简单描述:
Row Level: 记录的方式是行,即如果批量修改数据,记录的不是批量修改的SQL语句事件,而是每条记录被更改的SQL语句
Statement Level: 记录每一条修改数据的SQL语句
Mixed: MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。
查看binlog类型:

show global variables like "%binlog_format%";

详情: https://blog.csdn.net/qq_38826019/article/details/119718031
3、 重启mysql

systemctl restart mysqld

log_bin 变为on 表示成功。

show variables like "%bin_%"

通过binlog实现数据恢复

1、查看binlog当前在使用那个文件

show master status;

mysql5.6 binlog参数 mysql中binlog_mysql_02

2、截断日志文件,生成新的日志文件。

sql命令行:
flush-logs

日志文件从 mysql-bin.000025 变为 mysql-bin.000026,而 mysql-bin.000015 则记录着刚刚 insert 命令的日志。

3、 查看日志文件的内容
注意:在查看日志内容的时候,不建议查看当前数据库正在操作的日志文件,可能会出现问题。所以一定要记着flush-logs

show binlog events in 'mysql-bin.000025';

mysql5.6 binlog参数 mysql中binlog_数据库_03


4、 通过Binlog恢复数据

linux命令行:
/usr/bin/mysqlbinlog --database=要恢复的数据库名 /var/lib/mysql/bin-log-1.000025 | /usr/bin/mysql -uxxx -pxxxx -v 要恢复的数据库名

/usr/bin/mysqlbinlog 为binlog命令
--database=hello 指定数据库为hello的日志
/var/lib/mysql/bin-log-1.000001 为binlog日志
| 为管道符
/usr/bin/mysql -uroot -p123456zy -v 要恢复的数据库名 
 连接mysql、并指定需要恢复的数据库 -v 为显示详细信息

5、 通过指定的位置恢复数据

linux命令行:
/usr/bin/mysqlbinlog --start-position=573 --stop-position=718 --database=hello /var/lib/mysql/bin-log-1.000001 | /usr/bin/mysql -uroot -p123456zy -v hello

--start-position=573 开始位置
--stop-position=718  结束位置

mysql5.6 binlog参数 mysql中binlog_数据库_04

6、 通过指定时间恢复数据

linux命令行:
/usr/bin/mysqlbinlog --start-datetime="2021-06-27 20:58:18" --stop-datetime="2021-06-27 20:58:35" --database=hello /var/lib/mysql/bin-log-1.000001 | /usr/bin/mysql -uroot -p123456zy -v hello

--start-datetime="2021-06-27 20:58:18" 开始时间

--stop-datetime="2021-06-27 20:58:35" 结束时间

查看时间信息:

linux命令行:
/usr/bin/mysqlbinlog --no-defaults /var/lib/mysql/bin-log-1.000001

mysql5.6 binlog参数 mysql中binlog_mysql_05