Helllo,我的问题如下:使用php,是否可以创建一个与MySQL数据库的所有交互日志,该日志通常可以由phpMyadmin访问。有没有一个具体的问题或例子可以让我看看?谢谢你抽出时间。
有一种简单的方法可以捕获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';
小心,一般日志会变大,测试完成后,请始终关闭日志
使用触发器命令。首先为特定表创建一个日志表,然后在其中插入所有触发器输出。
这是样品:
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,也请告诉我。祝你好运。
要启用查询日志,请将其放入[mysqld]
部分的/etc/my.cnf
中
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/