MySQL 从存储过程追加到日志文件

标签 mysql stored-procedures logging logfile

我已经进行了大量的谷歌搜索,并阅读了很多不同的堆栈交换帖子。我正在尝试在存储过程中进行一些日志记录。

我已经研究过但尚未取得完全成功:

  1. mysql stored procedure with INTO OUTFILE
  2. https://dba.stackexchange.com/questions/27553/mysqldump-error-cant-create-write-to-file
  3. MySQL how do you append to a file with INTO OUTFILE?

我发现通过使用 [mysqldump] 部分更改 my.cnf,然后我能够使用 INTO OUTFILE 命令写入该文件一次。当我尝试再次运行它时,它会提示,因为该文件已经存在。我还尝试过 TEE 命令,但当我尝试运行它时收到“不受支持的语句”。看起来这个命令是在 MySQL 4.x 中引入的,而我使用的是 MySQL 5.x。

我的最终目标是能够在发现某些条件时通过记录信息来写入文件,该文件可以像跟踪文件一样使用。我真的不在乎它是如何完成的,只要我能做到就行。关于如何完成此任务的任何想法,或者我对 TEE 命令做错了什么?

最佳答案

您可以创建一个临时表,输入每个阶段所需的数据,然后在删除之前选择所有内容。像这样的东西:

DROP PROCEDURE IF EXISTS MY_PROC;
DELIMITER ;;

CREATE PROCEDURE MY_PROC()
BEGIN
   DECLARE n INT DEFAULT 0;
   DECLARE i INT DEFAULT 0;
   DECLARE l_user_id INT DEFAULT 0;
   SELECT COUNT(*) FROM users INTO n;
   SET i=0;
   CREATE temporary TABLE if not exists tmplog (i_value varchar(20), user_id varchar(20)) engine = memory;

   WHILE i<n DO
      SELECT user_id INTO l_user_id FROM users LIMIT i,1;
      INSERT INTO tmplog VALUES(i, l_user_id );
      SET i = i + 1;
   END WHILE;
   SELECT * FROM tmplog;
   DROP TABLE tmplog;
End;
;;
DELIMITER ;
CALL MY_PROC();

关于MySQL 从存储过程追加到日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33549366/

相关文章:

file - 播放框架将整个控制台输出存储到日志文件

python - Loguru:如何混淆日志中的数据

php - Laravel 有很多更新关系

php - 在一个php页面中的MYSQL多选查询

.net - 我可以从存储过程返回varchar(max)吗?

c# - ASP.NET FormView 无法执行存储过程

php - 如何从本地mysql更新数据到远程mysql服务器?

php - MySQL 搜索结果 - 按相关性排序

sql - 在 Select 语句中使用存储过程的结果

javascript - ExpressJS 中记录器模块定义的问题