init_connect + binlog 记录 mysql 操作日志
2016-03-28 00:00
851 查看
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记录即可将数据库恢复至最新版本。
相关文章推荐
- 自动恢复MySQL数据库的日志文件思路分享及解决方案
- 当mysqlbinlog版本与mysql不一致时可能导致出哪些问题
- msyql show命令汇总
- mysqlbinlog恢复MySQL
- Xtrabackup + mysqlbinlog还原数据库
- mysqlbinlog:"ERROR: Error in Log_event::read..."
- 数据库文件恢复技术
- 在CMD下备份和恢复Mysql数据库
- mysqlbinlog使用
- mysql 学习笔记 day02
- mysql 学习笔记 day04
- Oracle 数据库 修复/恢复工具 PRM/DUL 工具说明
- Oracle Flashback
- mysql修改root密码、登录、导入导出等命令小记
- mysql 除法精度运算
- 数据库备份和还原
- Mysql触发器-保留 日后参考
- mysql表格拆分总结
- [MySQL] 利用 MySql日志文件 恢复数据
- GTID的常见错误和处理方法