ITPub博客

首页 > Linux操作系统 > Linux操作系统 > mysql init_connect 参数的其他用处

mysql init_connect 参数的其他用处

原创 Linux操作系统 作者:babyyellow 时间:2011-03-29 12:26:57 0 删除 编辑
mysql 默认是autocommit=1 的,

我们线上都设置一般是init_connect='set autocommit=0; set names gbk;' 这样的。 

init_connect 是可以动态在线调整的,这样就有了一些其他的用处。 
经过测试init_connect 是用户登录到数据库上之后,在执行第一次查询之前执行 里面的内容的。 
如果init_connect  的内容有语法错误,导致执行失败,会导致用户无法执行查询,从mysql 退出。 

init_connect 对具有super  权限的用户是无效的。

我们可以用init_connect 来登记用户的信息,例如一个测试如下: 
创建测试表:
mysql.sock@test> create  table t1 ( cur_user varchar(100), n_user varchar(100),in_time timestamp  default current_timestamp()) ;
Query OK, 0 rows affected (0.09 sec)


设定 init_connect : 
mysql.sock@(none)>  set global init_connect='insert into test.t1 (cur_user,n_user) values (current_user(),user())';                 
Query OK, 0 rows affected (0.00 sec)

普通用户登录: 
[root@test740_9 ~]# mysql -u lsl -plsl test
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1101066
Server version: 5.1.41-log MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



查询用户信息:
mysql.sock@test> select * from t1; 
+----------+---------------+---------------------+
| cur_user | n_user        | in_time             |
+----------+---------------+---------------------+
| lsl@%    | lsl@localhost | 2011-03-29 10:50:58 |
+----------+---------------+---------------------+
1 row in set (0.00 sec)

记录了用户的客户端信息,当然还可以记录更多的信息,例如database() 记录当前数据库等等。 

本次测试是直接将记录日志表,建在测试用户下,

注意: 对于所有的普通级别的用户,必须全部都要对日志表具有读写权限, 否则将导致,没有权限的用户无法使用数据库。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/133735/viewspace-691196/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
oracle MySQL Postgresql 专职数据库dba。 系统架构师。 mysql 官方认知dba 。 15年专职dba 经验。

注册时间:2010-12-02

  • 博文量
    253
  • 访问量
    1497396