2013-11-22 134 views
0

Helllo,我的問題是以下幾點:使用php,是否有可能創建一個與MySQL數據庫的所有交互日誌,通常可以通過phpMyadmin訪問。是否有我可以查看的特定查詢或示例? 謝謝你的時間。創建MySql日誌

回答

2

有簡單的方法來捕獲SQL日誌。這個日誌稱爲通用日誌。它捕獲所有客戶端執行的所有sql。

啓用通用日誌。

mysql> SET GLOBAL general_log = 'ON'; 

其中是日誌位於?

mysql> SHOW variables like '%general_log%'; 
+------------------+--------------------+ 
| Variable_name | Value    | 
+------------------+--------------------+ 
| general_log  | ON     | 
| general_log_file | /tmp/your_path.log | 
+------------------+--------------------+ 

你想更改位置?

mysql> SET GLOBAL general_log_file = 'what you want'; 

關閉日誌

mysql> SET GLOBAL general_log = 'OFF'; 

要小心,一般的日誌將增長大,測試完成後,一定要關閉日誌

+0

哇,這是很好的答案。比我的回答好。我也會爲此尋找和研究。 :) – Jerielle

+0

@Jerielle坦率地說,我也學到了新的技能,你回答;-) –

+0

你總是歡迎。 :) – Jerielle

2

使用觸發命令。首先爲特定表創建一個日誌表,然後在其中插入所有的觸發輸出。

這裏的樣本:

CREATE TABLE `sales_category` (
    `salescatid` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `salescatname` VARCHAR(128) NOT NULL, 
    `salescatdesc` VARCHAR(512) NOT NULL, 
    UNIQUE INDEX `salescatname` (`salescatname`), 
    UNIQUE INDEX `salescatid` (`salescatid`) 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB 



2. Create table for log 

CREATE TABLE `category_log` (
    `action` ENUM('CREATE','UPDATE','DELETE') NULL DEFAULT NULL, 
    `salescatid` INT(10) UNSIGNED NOT NULL, 
    `salescatname` VARCHAR(255) NOT NULL, 
    `salescatdesc` VARCHAR(255) NOT NULL, 
    INDEX `id` (`salescatid`) 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB; 

3. Add triggers 

    //FOR ADD 

    DELIMITER # 
    CREATE TRIGGER ai_category 
    AFTER INSERT ON sales_category 
    FOR EACH ROW 
    BEGIN 
     INSERT INTO category_log(action,salescatid,salescatname,salescatdesc) 
     VALUES('CREATE',NEW.salescatid,NEW.salescatname,NEW.salescatdesc); 
    END;# 


    //FOR UPDATE 

    DELIMITER # 
    CREATE TRIGGER au_category 
    AFTER UPDATE ON sales_category 
    FOR EACH ROW 
    BEGIN 
     INSERT INTO category_log(action,salescatid,salescatname,salescatdesc) 
     VALUES('UPDATE',NEW.salescatid,NEW.salescatname,NEW.salescatdesc); 
    END;# 


    //FOR DELETE 

    DELIMITER # 
    CREATE TRIGGER ad_category 
    AFTER DELETE ON sales_category 
    FOR EACH ROW 
    BEGIN 
     INSERT INTO category_log(action,salescatid,salescatname,salescatdesc) 
     VALUES('DELETE',OLD.salescatid,OLD.salescatname,OLD.salescatdesc); 
    END;# 

這是你在找什麼?這是CRUD過程,但它是通過SQL命令完成的。如果你打電話給我,我認爲你應該把它放在一個函數中。我也是一個初學者,所以如果有一個bug也請告訴我。祝你好運。

0

要啓用查詢日誌,把這個/etc/my.cnf[mysqld]部分

log = /path/to/query.log 

記住這個日誌文件可以g排在繁忙的服務器

更新上非常大的:

例如MySQL 5.1.12的,你應該使用

general_log=1 

與MySQL 5.1.29,日誌選項已被棄用。指定日誌文件使用

general_log_file=/path/to/query.log 

改爲。見http://dev.mysql.com/doc/refman/5.6/en/query-log.html

在數據庫上啓用查詢日誌記錄(注意字符串「表」應放在字面,而不是取代任何表名)

SET global general_log = 1; 
SET global log_output = 'table'; 

查看日誌

select * from mysql.general_log 

禁用在數據庫上查詢日誌記錄

SET global general_log = 0; 

請參閱:http://www.jovicailic.org/2012/07/how-to-enable-general-query-log-in-mysql-under-linux/