重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
MySQL日志在哪
目前成都创新互联公司已为上千的企业提供了网站建设、域名、网络空间、绵阳服务器托管、企业网站设计、中山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
MySQL日志一般保存在/var/log/目录下,但还需要看具体的配置文件才能确定,具体方法如下:
1、首先登陆 mysql:mysql -u root -p
2、然后查看是否启用了日志mysqlshow variables like 'log_%';
3、查看当前的日志mysql show master status;
4、你需要知道的mysql的日志类型:错误日志: -log-err
查询日志: -log
慢查询日志: -log-slow-queries
更新日志: -log-update
二进制日志: -log-bin
5、修改配置/etc/my.cnf(以下为日志文件保存位置)[mysqld]
log=/var/log/mysqld_common.log
log-error=/var/log/mysqld_err.log
log-bin=/var/log/mysqld_bin.bin
mysql的审计功能
mysql服务器自身没有提供审计功能,但是我们可以使用init-connect + binlog的方法进行mysql的操作审计。由于mysql binlog记录了所有对数据库长生实际修改的sql语句,及其执行时间,和connection_id但是却没有记录connection_id对应的详细用户信息。在后期审计进行行为追踪时,根据binlog记录的行为及对应的connection-id 结合 之前连接日志记录 进行分析,得出最后的结论。
1. 设置init-connect
1.1 创建用于存放连接日志的数据库和表
create database accesslog;
CREATE TABLE accesslog.accesslog (`id` int(11) primary key auto_increment, `time` timestamp, `localname` varchar(30), `matchname` varchar(30))
1.2 创建用户权限
可用现成的root用户用于信息的读取
grant select on accesslog.* to root;
如果存在具有to *.* 权限的用户需要进行限制。
这里还需要注意用户必须对accesslog表具有insert权限
grant select on accesslog.* to user@’%’;
1.3 设置init-connect
在[mysqld]下添加以下设置:
init-connect=’insertinto accesslog.accesslog(id, time, localname, matchname)
values(connection_id(),now(),user(),current_user());’
------注意user()和current_user()的区别
log-bin=xxx
这里必须开启binlog
1.4 重启数据库生效
shell /etc/init.d/mysql restart
2. 记录追踪
2.1 thread_id确认
可以用以下语句定位语句执行人
Tencent:~ # mysqlbinlog --start-datetime='2011-01-26 16:00:00'
--stop-datetime='2011-01-26 17:00:00' /var/lib/mysql/mysql-bin.000010
| grep -B 5 'wsj'
COMMIT/*!*/;
# at 767
#110126 16:16:43 server id 1 end_log_pos 872 Query thread_id=19 exec_time=0 error_code=0
use test/*!*/;
SET TIMESTAMP=1296029803/*!*/;
create table wsj(id int unsigned not null)
--
BEGIN
/*!*/;
# at 940
#110126 16:16:57 server id 1 end_log_pos 1033 Query thread_id=19 exec_time=0 error_code=0
SET TIMESTAMP=1296029817/*!*/;
insert into wsj(id) values (1)
--
BEGIN
/*!*/;
# at 1128
#110126 16:16:58 server id 1 end_log_pos 1221 Query thread_id=19 exec_time=0 error_code=0
SET TIMESTAMP=1296029818/*!*/;
insert into wsj(id) values (2)
2.2 用户确认
thread_id 确认以后,找到元凶就只是一条sql语句的问题了。
mysql select * from accesslog where id=19;
+----+---------------------+---------------------+-----------+
| id | time | localname | matchname |
+----+---------------------+---------------------+-----------+
| 19 | 2011-01-26 16:15:54 | test@10.163.164.216 | test@% |
+----+---------------------+---------------------+-----------+
1 row in set (0.00 sec)
3. Q
Q:使用init-connect会影响服务器性能吗?
A:理论上,只会在用户每次连接时往数据库里插入一条记录,不会对数据库产生很大影响。除非连接频率非常高(当然,这个时候需要注意的就是如何进行连接复用和控制,而非是不是要用这种方法的问题了)---如果采用长连接并且缓存的话,可以提高性能
Q:access-log表如何维护?
A: 由于是一个log系统,推荐使用archive存储引擎,有利于数据厄压缩存放。如果数据库连接数量很大的话,建议一定时间做一次数据导出,然后清表。
Q:表有其他用途么?
A:有!access-log表当然不只用于审计,当然也可以用于对于数据库连接的情况进行数据分析,例如每日连接数分布图等等,只有想不到没有做不到。---可以用来测试读写分离,验证负载均衡等
Q:会有遗漏的记录吗?
A:会的,init-connect 是不会在super用户登录时执行的。所以access-log里不会有数据库超级用户的记录,这也是为什么我们不主张多个超级用户,并且多人使用的原因。--这种审计不会记录root等具有super权限的账号对数据库的访问
根据笔者上一篇文章—Linux系统上记录用户操作的审计日志 。本文来利用相同的方法记录MYSQL操作的审计日志。
使用用mysql工具连接MySQL server的所有操作会默认记录到~/.mysql_history文件中,这个文件会把所有操作记录下来,包括创建用户和修改用户的明文密码,这在生产系统上是不安全的。如果不想保存,仅仅删除是不行的(文件不存在会再建立),要直接将其软连接到垃圾箱。
ln -s /dev/null ~/.mysql_history
利用上一篇文章相同的方法记录MYSQL操作的审计日志,是因为mysql工具本身就是有一个shell, 每次mysql连接退出后,都会把此次操作的信息记录到~/.mysql_history文件中。那么可以重新定义MYSQL_HISTFILE环境变量来保存mysql日志。
先看置于/etc/profile.d目录下的环境变量的脚本mysql_history.sh,和loginlog类似。
在测试时,发现平时使用的普通用户在操作mysql后无法记录,而root用户(平时没有操作过mysql)可以记录成功。后来在在~/.mysql_history文件找到了操作记录,估计是这个文件还存在的原因,删除后才记录到新的MYSQL_HISTFILE定义的路径。
和loginlog一样,需要定期删除过期日志,以下脚本置于/etc/cron.weekly 目录下。
delete_time=15
find /opt/mysqllog/ -mtime +$delete_time -name '*.log' -exec rm -r {} \;
但是相比于loginlog,mysqllog有两点暂时没有解决。
1、定义最大的记录条数history.maxSize不知在哪定义,my.cnf?
2、每一条命令的时间记录添加。
审计机关及各部门坚持填写审计工作日志,是加强审计机关管理教育的重要内容,也是促进廉政勤政,提高审计机关作风效能建设,营造审计机关良好的工作秩序和环境的重要措施。
一、审计工作日志的概念
审计工作日志,是指记载审计机关各科室在工作日所开展的工作事项的一种应用文体,属于日记的范畴。但工作日志与通常的个人日记二者又有明显区别。一般讲,日记具有个人性质的特点,并对每天所遇到的事和所做的'事的记录,兼记对这些事情的感受,或直接抒发自己的感情。而审计工作日志,多指非个人的,是审计机关及所属部门对工作事项、工作完成情况和工作中遇到问题和解决方法的记录,同时也是对工作情况的总结,包括经验教训和收获等的记录。审计工作日志,也不同于《审计机关审计项目质量控制办法(试行)》(中华人民共和国审计署令第6号)中规定的“ 审计日记”,审计日记是审计人员以人为单位按时间顺序反映其每日实施审计全过程的书面记录。
二、写审计工作日志的好处
写审计工作日志,是审计机关进行管理教育的重要措施,是加强机关作风效能建设的有效手段。坚持写审计工作日志好处主要有三点:
一是可以培养认真、严谨、细致的工作作风 。细节决定成败,作风决定形象,形象重于泰山。只有坚持严谨细致的作风,勤勤恳恳、履职尽职,把工作中的点点滴滴都认真做到了、做好了,才能把你的本职工作真正完成好,才能树立和维护审计监督机关良好的社会形象。
二是可以增强审计工作的计划性 。每天做了哪些工作,还有什么需要注意的事项,思考一下明天的工作内容,做一些备忘录以应对所开展的工作,可以使审计工作计划更周密,工作开展起来会更加得心应手。
三是可以增强审计干部的逻辑思维能力 。把每天的工作情况转变成文字的过程,也是对已完成的工作进行梳理的过程,这就会使你的思路更清晰,不仅会增强成就感,而且会使你更加自信,更勤奋地面对新的一天。此外,写审计工作日志,还可以对所开展的审计活动起着检索工作的作用。
总之,坚持写审计工作日志是一个良好的工作习惯,贵在持之以恒,所以长期坚持写审计工作日志,对于深化审计工作有百益而无一害。
三、怎样写审计工作日志
写审计工作日志其实不难,不要视为畏途,最简单的方式,就是你把它当成一个工作日记,平铺直叙地写当天都做了哪些工作,并在结尾的时侯总结一下当天的经验教训或者收获等。
具体说来,审计工作日志的内容要素应包括以下四点:
1、当天的工作重点,即主要精力用于做了些什么;
2、值得记录的工作方法,即在当天的工作中学习和领悟到的工作方法;
3、工作中的失误及解决方式,不要怕问题暴露,这是为了避免犯同样的错误;
4、明天或今后一段的工作中需要注意的事项,如连续性的工作,今天完成到什么地步,明天继续实施时从哪里开始,其中有什么变化等。
四、写审计工作日志的要求
1、全面及时了解审计工作和审计活动的开展情况,持之以恒地将每天工作情况完整记录下来,最好不要代记、补记;
2、为便于书写工作日志,可设计制作内容简明、书写方便的工作日志表;
3、写审计工作日志字迹要清晰,内容要属实,不得弄虚作假;
4、审计工作日志要妥善保管,以便查询或作为工作考勤的重要依据。