Mysql的tee功能是用來記錄使用者的操作記錄的,由於對mysql進行大量的更改操作,比如刪除,修改,添加等動作等等,涉及到生產環境中時候,這些操作有時候很有必要把整個操作記錄下來,以便核對尋找。Tee功能類似於oracle中的spool,下面對幾種tee的不同保方式測試:
一、直接指定檔案
出於這種是由於之前使用spool的時候每次spool時候都會使用spool '檔案路徑',結束後便用spool off即可。下面是測試:
初看結果,好像是正確指定了檔案和路徑,那麼我們去這個路徑是否看到這個tee.log呢,進入mysql使用者根目錄下的tmp目錄查看,已經產生了tee.log檔案,然後運行一些簡單操作測試是否記錄成功;
查看tee.log檔案;發現都是即時記錄了所有的操作記錄和結果。跟oracle有點不同的是,oracle每次都是在spool off之後才產生(應該沒有記錯)。關閉即用notee或者\t命令。
二、通過啟動帶參數--tee
啟動使用命令:mysql -uroot -p --tee=/home/mysql/tmp/ceshi.log -S /usr/local/mysql/tmp/3306/mysql.sock登入成功後,按正常同樣再測試一次操作記錄
查看ceshi.log,所有記錄均即時記載。
三、通過更改設定設定檔my.cnf
測試環境,先kill掉mysqld服務(生產環境一般沒有在my.cnf中增加該配置,這裡僅僅只是用來測試)。
關閉mysql,然後修改mysql的設定檔中的[client]選項段,添加以下內容:
[client]
port = 3306
socket = /usr/local/mysql/tmp/3306/mysql.sock
default-character-set = utf8
tee = /home/mysql/tmp/result.log
再次啟動mysql,查看/home/mysql/tmp/下是否產生了result.log檔案,一看沒有,奇怪了,按理說這樣的方式是正確的,在網上找了下大部分都講到了這三點,也沒有見誰說這種方式不行。會不會是版本有問題,我本機裝的是32位的mysql 5.1.57版本。於是換台機器,換個64位的mysql 5.1.50版本測試下;
一樣的配置一樣重新啟動了mysql。測試後發現還是沒有出現結果記錄;
原來寫入mysql設定檔中,在不同版本中有差異,目前有一些有些版本的mysql資料庫的tee功能在寫入設定檔的時候不生效,但是支援終端下命令列直接操作,例如上面2個版本都是沒有效果的,所以寫入設定檔中並不保險。目前還不清楚原因何在,猜測也有可能是某些版本存在bug ,希望知道的不吝賜教。