Mysql是大家常用的数据库。在做机场巴士智慧系统的时候,项目组也使用了一下,确实是很好用,挺符合简单方便的思路。在实际使用的过程中,发现除了默认的设置外,mysql还需要额外修改一些配置,以更适合生产系统的实际情况。这里面需要感谢我们的DBA(于光雪同学),很多都是她做的。我这里只是把我们为什么增加这类配置的背景思路以及操作说明一下。
后续还应该有几个类似的常用配置,一样样说。:-)
背景思路
之所以需要开启这个访问日志功能,是因为我们在系统开发的过程中,某次数据库系统突然崩溃了,而我们虽然快速的恢复了系统,但并不能十分确定是谁、哪段功能、什么时间导致了这次问题,所以才有了这次需要开启访问日志的功能。需要注意的是,在创建新用户时,需要进行数据库表 accesslog 的授权,否则用户登陆时会报错。这也是代价之一。
操作
使用 root 用户登陆,进行如下操作。
1.创建访问日志存放的数据库
在这里,强烈建议使用独立的数据库进行存储,而不是复用在当前数据库。因为访问日志管理的角色本质上应该归属于DBA,而不是各个业务系统。
create database accesslog character set utf8;
2.切换到accesslog 数据库
USE `accesslog`;
3.创建访问日志存放的数据表
这里需要注意的是表和字段都需要有注释,养成好习惯。
CREATE TABLE `accesslog` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `thread_id` int(11) DEFAULT NULL COMMENT '线程ID', `log_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '登录时间', `localname` varchar(30) DEFAULT NULL COMMENT '登录名称带IP', `matchname` varchar(30) DEFAULT NULL COMMENT '登录用户user的全称', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='访问日志';
4.用户授权
我们需要给数据库的用户授权,分别赋予插入accesslog表的权限(注:用户必须要拥有该表的插入权限,否则将出现登录失败问题)
grant insert,select,update on accesslog.* to 'user1'@'localhost';
5.启用访问数据插入
修改mysql配置文件my.cnf,添加以下内容:
init-connect='insert into accesslog.accesslog values(null,connection_id(),now(),user(),current_user());'
6.重启数据库
service mysqld restart;