mysql init_connect 引數的其他用處

babyyellow發表於2011-03-29
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章