Helllo,我的问题如下:使用php,是否可以创建与MySQL数据库的所有交互的日志,通常可以通过phpMyadmin访问。是否有我可以查看的特定查询或示例? 谢谢你的时间。
答案 0 :(得分: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,请告诉我。古德勒克。
答案 1 :(得分: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';
小心,一般日志会变大,测试完成后,总是关闭日志
答案 2 :(得分:0)
要启用查询日志,请将其放在/etc/my.cnf
部分的[mysqld]
log = /path/to/query.log
请记住,这个日志文件在繁忙的服务器上会变得非常大
更新
从mysql 5.1.12开始,你应该使用
general_log=1
使用mysql 5.1.29,不推荐使用log选项。指定日志文件使用
general_log_file=/path/to/query.log
代替。见http://dev.mysql.com/doc/refman/5.6/en/query-log.html
在数据库上启用查询日志记录(请注意,字符串'table'应按字面意思放置,不能用任何表名替换)
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/