init_connect + binlog 记录 mysql 操作日志

简介

mysql 的 init_connect 变量是每个客户端连上数据库服务器时执行的一组数据,这组数据可以是一个或者多个sql语句。

A string to be executed by the server for each client that connects. The string consists of one or more SQL statements, separated by semicolon characters.

mysql 的 binlog 日志用于记录所有更新了数据库内容的sql语句,以事件的形式保存。

The server's binary log consists of files containing “events” that describe modifications to database contents.

一、记录连接信息

创建表存放日志

CREATE DATABASE accesslog;

CREATE TABLE accesslog.accesslog (

`id` INT (11) PRIMARY KEY auto_increment,

`time` TIMESTAMP,

`localname` VARCHAR (30),

`matchname` VARCHAR (30)

)

设置用户权限

GRANT SELECT ON accesslog.* to root@localhost IDENTIFIED BY 'password'

设置init_connect

在 mysql 配置文件里(my.cnf或者my.ini)里[mysqld]里添加如下设置

init_connect='INSERT INTO accesslog.accesslog VALUES(connection_id(),now(),user(),current_user());'

然后重启数据库。

二、查询binlog

查询binlog是否打开

mysql> show variables like 'log_bin';

如果没有开启则开启binlog 打开mysql配置文件

vim /etc/my.cnf

在[mysqld] 区块添加如下设置

logb-bin=mysql-bin

mysql-bin是日志文件的前缀名 然后重启服务器生效

查看binlog日志位置

binlog 日志默认存储在数据目录,即 mysql 配置文件里的 datadir 目录。如果log-bin写了完整的目录,则日志文件在相应目录。 在目录下能看到如下文件就是啦

导出日志

mysql 自带的工具 mysqlbinlog 用于导出binlog日志,格式如下:

/mysql/bin/mysqlbinlog --database=test --start-date="2016-03-25 00:00:00"  --stop-date="2016-03-28 15:00:00" /mysql/data/mysql-bin.000071 > test

--database: 指定数据库名

--start-date: 开始时间

--stop-date: 结束时间

如果star-date 到 stop-date 跨越了好几个binlog文件可以通过mysql-bin.000*的方式模糊指定。 这样就导出了 2016-03-25 00:00:00 到 2016-03-28 15:00:00 之间执行的所有修改过数据的sql语句了。 格式如下

160328 18:33:29是执行时间 thread id 是客户端连接数据的id,即上面存储到accelog的id 同时还可以这样提取出某张表的sql语句

cat test.sql | grep ‘TABLE_NAME’ > xx.sql

审计与恢复

如上,通过查找binlog能找到客户端连接数据库的id,去查前面建立的accesslog表就可以找到是哪个用户操作的。 另外,当发生了误操作之后可以利用该方法恢复数据。 假如2016-3-25 13:10:00 发生了误操作。首先找到最近的一次数据库备份,假如是2016-03-01 00:00:00 那么则导出从2016-03-01 00:00:00到2016-3-25 13:10:00之间的binlog记录,然后删除其中的误操作语句(一定要删除)。接下来执行数据库备份,然后执行binlog导出的sql记录即可将数据库恢复至最新版本。

og-bin=mysql-bin_init_connect + binlog 记录 mysql 操作日志相关推荐

  1. centos6配置日志外发_CentOS6下记录后台操作日志的两种方式

    CentOS6下记录后台操作日志的两种方式 平时为了记录登录CentOS Linux系统的操作命令,需要将操作日志记录下来,下面介绍两种方式 1.利用script以及scriptreplay工具 sc ...

  2. ssm实现文件上传到SFTP服务器,centos7系统配置记录SFTP操作日志

    1.修改ssh配置 [root@elk-node2 ~]# vim /etc/ssh/sshd_config 大概132行把下面这个句注释掉 #Subsystem       sftp    /usr ...

  3. ssm 项目记录用户操作日志和异常日志

    ssm 项目记录用户操作日志和异常日志 参考文章: (1)ssm 项目记录用户操作日志和异常日志 (2)https://www.cnblogs.com/mei-m/p/10231792.html (3 ...

  4. Spring Boot + Aop 记录用户操作日志

    目录 一.前言 二.实战 1.设计用户操作日志表: sys_oper_log 2.引入依赖 3.自定义用户操作日志注解 4.自定义用户操作日志切面 5.MyLog注解的使用 6.最终效果 三.总结 一 ...

  5. jfinal mysql 配置文件_JFinal 如何将操作日志存入到数据库中

    展开全部 操作日志, 也分粗细颗粒. 比如常见的 配置JFinal的Handler, 配置LogHandler的处理器,Handler可以接管所有web请求, 这里可以做粗颗粒的处理, 对每一个请62 ...

  6. Spring Boot AOP记录用户操作日志

    一.引入必要依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId> ...

  7. Spring Boot Aop结合Swagger记录用户操作日志

    1.引入依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swag ...

  8. Linux记录用户操作日志

    前言 我这里计划用SLS做服务器日志审计,安装Logtail后通过 [分隔符-文本] 的方式,采集服务器各种相关日志,大概需要以下内容(目录可能是错的,这个是做等保的评测的兄弟发过来的) /var/l ...

  9. mysql记录操作日志

    分为文件记录日志和数据库记录日志两种方式,效果相同 一 文件记录数据库操作日志: 首先进入mysql输入指令 show variables like 'gen%'; general_log是开启还是关 ...

最新文章

  1. 自定义变量 配置文件_跟我一起学.NetCore之自定义配置源热更新对象绑定
  2. md5可以解密吗_Python训练营作业1:加密解密
  3. 树莓派c语言led,用树莓派实现RGB LED的颜色控制——C语言版本号
  4. Java的IO:BIO | NIO | AIO
  5. 基因组浏览器使用 (EPGG)
  6. STM32 寄存器库和固件库
  7. 【5分钟 Paper】Continuous Control With Deep Reinforcement Learning
  8. 【静脉检测】基于matlab手指静脉图像检测【含Matlab源码 1654期】
  9. 查看计算机桌面隐藏文件夹,怎么查看隐藏文件?2种方法教你查看电脑中的隐藏文件...
  10. 汽车主要电子控制系统模块
  11. iPhone5/iPad4越狱后10.3.3降级8.4.1详细教程
  12. java char类型 unicode字符集 utf-8字符编码
  13. 软件需求与分析课堂讨论一
  14. Chapter 8 Part-of-Speech Tagging
  15. Echarts 生成地图html
  16. C++11 强类型枚举和普通枚举
  17. 支持向量机回归预测SVR——MATLAB超详细代码实现过程
  18. 移动端tab切换时下划线的滑动效果
  19. 分屏情况下,微信截图,屏幕错位或者截屏页面下移
  20. 汽车主动悬挂系matlab,基于Matlab的汽车主动悬架控制器设计与仿真.doc

热门文章

  1. Maven出现User setting file does not exist ...\.m2\setting.xml的问题解决(同时也解决用户.m2目录下无setting.xml文件)
  2. 如何判断一个字符串在JavaScript中是否包含某个字符?
  3. 如何在Python中将字典键作为列表返回?
  4. 在Python中创建单例
  5. 静态类和单例模式之间的区别?
  6. IPFS Series -- Bitswap Protocol
  7. 《python 与数据挖掘 》一1.3 Python开发环境的搭建
  8. Cannot run Eclipse; JVM terminated. Exit code=13
  9. iptables对请求的URL作IP访问控制
  10. 使用Silverlight4无边窗口