2013-11-22 66 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/