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

时间:2015-11-05 16:05:03

标签: 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?
  4. 我发现通过使用[mysqldump]部分更改my.cnf,我可以使用INTO OUTFILE命令将文件写入文件一次。当我尝试再次运行它时,它会抱怨,因为该文件已经存在。我也尝试了TEE命令,但得到了一条不受支持的声明'当我试图运行它。看起来这个命令是在MySQL 4.x中引入的,我使用MySQL 5.x。

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

1 个答案:

答案 0 :(得分:0)

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

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();