linux下mariadb开启常规日志、二进制日志以及如何使用闪回


戳我跳转官方文档
注1:建议直接看官方文档,更加全面, 英文的看起来真的好累啊,本文也是基于官方文档的
注2:本文只是介绍并实践我认为比较常用的功能和命令,并不是对官方文档的翻译,文中并没有涉及到各种日志的所有功能。
注3:mariadb和mysql基本上通用

I、配置文件

首先使用命令查看配置文件
$ mysql --help
在这里插入图片描述
我的配置文件在/etc/mysql/my.cnf
初始状态的配置文件是这个样子的:
在这里插入图片描述

II、General Query Log

General Query Log记录的是sql语句日志。

记录到数据库

保存到mariadb根目录

打开配置文件,添加如下代码:

[mariadb]
log_output=TABLE
general_log

(注意[mariadb]这个一定要有)
然后重启mariadb
现在mariadb下的general_log表中就会有操作数据了
在这里插入图片描述
可以查看时间、用户、地址、命令和参数。

记录到文件

记录到安装目录下

[mariadb]
log_output=FILE
general_log
general_log_file=queries.log

如果使用的是相对路径,那么会保存到mysql的安装目录下,如果不清楚的话请直接使用查找命令吧$ find / -name "queries.log"
重启mariadb,然后随便打开一个表刷新数据,再打开queries.log查看是否记录
在这里插入图片描述
成功保存到文件。

修改记录目录

使用mariadb默认日志存储目录

/var/log/mysql/是mariadb默认的日志存储目录,默认开启的error_log记录会保存到改目录下,如果要使用这个目录,在配置文件中使用绝对路径即可

[mariadb]
log_output=FILE
general_log
general_log_file=/var/log/mysql/queries.log
自定义日志存储目录

如果你想单独存放mariadb的General Query Log,比如说存放到/var/log/mariadb这个目录下
首先在日志文件中这样配置

[mariadb]
log_output=FILE
general_log
general_log_file=/var/log/mariadb_log/mariadb.log

然后新建mariadb目录$ mkdir mariadb_log
然后重启mysql
……
……
……
操作一番后发现,咦 日志文件呢?
进入mariadb,使用命令激活日志记录mariadb > SET GLOBAL general_log=1;(该命令见官方文档)
报错权限不够
在这里插入图片描述
新建的目录没有给mysql权限,所以无法创建日志文件

$ chown -R mysql /var/log/mariadb_log
$ chgrp -R mysql /var/log/mariadb_log

添加权限,重启mariadb
进入数据库随便操作一下,然后查看是否有日志文件:
在这里插入图片描述
日志正常记录

III、Binary Log

启用Binary Log

戳我跳转官方文档
二进制日志,官方定义是记录对数据库的数据和结构所做的所有修改,二进制日志由一个index文件和一系列log文件组成。
注1:select 和show 这种没有对数据库进行修改的命令不会被记录,这些命令的日志可以在General Query Log里查看。
注2:官方申明mariadb服务启用二进制日志会造成运行效率略微下降。
二进制日志主要用来对数据库进行备份和恢复 (删库跑路的时候要删的东西又多一个)

官方启动Binary Log的方式是: To enable binary logging, start the server with the --log-bin[=name] option.
可是我始终无法通过这种方式启动:
在这里插入图片描述
网上的其他文章也没有用这种添加参数启动Binary Log的,如果有了解的小伙伴请留言指点一下。
那么还是通过修改配置文件来启动Binary Log。
修改my.cnf

[mariadb]
……
log_bin='/var/log/mariadb/mysql-bin'

注:文件名不用添加后缀,如果添加了也会被自动忽略
重启mariadb就可以看见该目录下多了几个文件
在这里插入图片描述

查看Binary Log

*.indx 文件是引导文件,里面记录的是二进制文件的地址
在这里插入图片描述
*.000001 这样的才是二进制日志,如果直接打开会是这个样子的:
在这里插入图片描述
mariadb有专门浏览日志的工具mysqlbinlog (戳我跳转官方文档)
使用mysqlbinlog打开Binary Log文件$ mysqlbinlog mysql-bin.000001
结果报错mysqlbinlog: unknown variable 'default-character-set=utf8mb4'
这是mysqlbinlog无法识别binlog中的配置中的default-character-set=utf8mb4这个指令。
我去查看我的配置文件my.cnf,可是其中并没有default-character-set的配置,
但是有这样两行语句:
在这里插入图片描述
这部分代码表示还导入了其他配置文件,将这两行注释掉,只使用my.cnf当作配置文件,然后重启mariadb,mysqlbinlog就没有报错了。
打开二进制日志,内容是这个样子的:
在这里插入图片描述

使用Binary Log进行数据数据恢复

以我的理解,二进制日志相当于把你进行的增删改操作记录备份了一遍,比如说我把一张表给清空了,那可以找到这张表的日志文件,把清空以前的操作全部执行一遍,相当于把增和改操作再执行一遍,数据就恢复了。
具体操作参考:mysql利用mysqlbinlog命令恢复误删除数据

清理Binary Log

启用二进制日志以后,会不断记录日志,硬盘占用会越来越大,需要定期清理日志文件。

全部删除

进入mariadb,使用命令mariadb > RESET MASTER;
索引文件和二进制文件都被删除然后重新开始记录。
在这里插入图片描述
注:该命令可以携带参数[TO # ]
根据文档,在MariaDB 10.1.6版本以后,携带[TO #]参数时,新增的二进制文件会编号会从#开始。

条件删除

戳我跳转官方文档
语法:PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr };
第一个参数里,BINARYMASTER是等效的,填哪个都行。
第二个参数里第一个可选参数TO ‘log_name’ 指定删除某个具体的日志文件
第二个参数里的第二个可选参数 BEFORE ‘datetime_expr’ 指定删除某个具体时间之前的日志文件
官方的栗子如下:
PURGE BINARY LOGS TO 'mariadb-bin.000063';
PURGE BINARY LOGS BEFORE '2013-04-21';
PURGE BINARY LOGS BEFORE '2013-04-22 09:55:22';

Flashback(闪回)

戳我跳转官方文档
根据二进制文件对数据库进行回滚操作,Mariadb从10.2.4版本以后开始支持Flashback。
这个功能简直是各种手残的救星!
请容我先把我的mariadb升个级
首先要设置Binary Log存储模式为ROW(存储模式有3种,详见官方文档),请不要忽略这一步骤,存储模式不为ROW,flashback可能无法对增、删进行闪回。

[mariadb]
...
binlog_format=ROW

然后重启mariadb
(建议清空一下二进制日志)
准备测试数据
在这里插入图片描述
然后做一下修改
在这里插入图片描述

//在mariadb中查看当前使用的是哪个日志文件
mysql > show master logs;

//然后退出mariadb,进入二进制日志目录下,使用mysqlbinlog命令,对象选择正在使用的日志文件
$ mysqlbinlog mysql-bin.000001 -B -T 'user' > flashback.sql

-B 参数表示 flashback
-T 参数表示指定表,'user'是我指定的表名
> flashback.sql 保存为sql文件

//然后让mariadb运行sql文件进行闪回操作
$ mysql < flashback.sql

被修改的数据就恢复了
在这里插入图片描述
flashback还支持时间参数:
--start-datetime开始时间
--stop-datetime结束时间

为了更直观,先把这个表添加时间字段,然后每隔1分钟添加一行数据
在这里插入图片描述
使用闪回操作撤销15:09:00到15:12:00之间的插入操作。

$ mysqlbinlog mysql-bin.000001 -B -T 'user' --start-datetime '2019-10-08 15:09:00' --stop-datetime '2019-10-08 15:12:00' > flashback.sql
$ mysql < flashback.sql

在这里插入图片描述
成功的撤销了数据的插入。
删库删表的闪回你们自己测试去吧

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值