mysql如何在存储过程中输出日志信息

 更新时间:2023年11月09日 14:36:18   作者:Bruce小鬼  
这篇文章主要介绍了mysql如何在存储过程中输出日志信息问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql在存储过程中输出日志信息 

直接用select 打印输出

SELECT 'Comment';

用concat连接变量输出

declare myvar INT default 0;
SET myvar = 5;
SELECT concat('myvar is ', myvar);

输出:

myvar is 5

格外创建一个有一列文本列的表,然后往里面塞信息

declare myvar INT default 0;
SET myvar = 5;
insert into tmptable select concat('myvar is ', myvar);

将上面的sql语句封装成一个存储过程log,以后要用的话就直接调用下面的语句就可以了

CALL log(concat('the value is', myvar));

直接输出到一个文本里面

select "penguin" as log into outfile '/tmp/result.txt';

这个命令会有严格的限制,只能将输出文本放在本地,然后给予其创建和写的权限 

一旦输出了一个文本,无法重写,这样可以阻止恶意执行sql注入

mysql存储过程中错误日志记录实现

根据官方提供的信息,及查阅多个博客综合,且自己在环境中试验并验证方案可行。

接下来进入正题,我会尽力写的更通俗易懂一些。

第一步

建一张日志表,具体字段可以根据需求来设计,下图是我的参考

以上字段按顺序分别是ID,存储过程名称,错误代码,错误描述,插入时间,间隔时间。

第二步

在存储过程中添加以上字段的变量

-- 日志记录参数
    DECLARE v_id VARCHAR(50);-- 日志表ID
    DECLARE v_name VARCHAR(50) DEFAULT 'PROC_IMPORTNEWCONTRACT_REAL'; -- 过程名称
    DECLARE v_code VARCHAR(10) DEFAULT '00000';-- 错误码
    DECLARE v_msg_text TEXT DEFAULT 'SUCCESS';-- 返回消息默认为SUCCESS
    DECLARE v_date DATETIME DEFAULT NOW();-- 插入时间默认当前时间
    DECLARE v_invatime DATETIME DEFAULT NOW();-- 间隔时间默认当前时间

以上代码是放在BEGIN下面的

最后一步、事务提交与日志记录

 

以上代码是放在BEGIN   END的END前面的,其中间的逻辑代码无需改变,如果你有特殊需求可以再改造。

参考资料:

上述的CONTINUE意思为sql发生异常时,为保证存储过程继续往下执行,执行ROLLBACK,进而执行日志记录的操作。

如果将CONTINUE改为EXIT,则意为产生异常时,该存储过程会退出,无法执行日志记录的操作,因为该存储过程直接退出了。

RETURNED_SQLSTATE,返回报错代码,MESSAGE_TEXT返回报错具体信息,官方提供的信息里面是上面的写法。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何实现MySQL的索引

    如何实现MySQL的索引

    这篇文章主要介绍了如何实现MySQL的索引,MySQL中索引分三类,有B+树索引、Hash索引和全文索引,下面我们一起来看看MySQL索引的具体实现,需要的小伙伴可以参考一下
    2022-01-01
  • MySQL主从延迟全链路根因诊断与解决方法

    MySQL主从延迟全链路根因诊断与解决方法

    本文介绍了MySQL主从复制延迟的诊断与优化方法,从复制原理出发,分析了主从延迟的四大根因:硬件资源不对等、大事务与长事务、锁冲突和网络抖动,并提供了详细的诊断步骤和优化建议,包括开启并行复制、治理大事务和DDL操作、缓存解耦等,需要的朋友可以参考下
    2026-04-04
  • 全面解析MySQL索引长度限制问题与解决方案

    全面解析MySQL索引长度限制问题与解决方案

    MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧
    2025-06-06
  • MySQL导入sql文件的三种方法小结

    MySQL导入sql文件的三种方法小结

    本文主要介绍了MySQL导入sql文件的三种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 专业级的MySQL开发设计规范及SQL编写规范

    专业级的MySQL开发设计规范及SQL编写规范

    这篇文章主要介绍了专业级的MySQL开发设计规范及SQL编写规范,需要的朋友可以参考下
    2020-11-11
  • MySQL实现两张表数据的同步

    MySQL实现两张表数据的同步

    本文将介绍mysql 触发器实现两个表的数据同步,需要学习MySQL的童鞋可以参考。
    2016-10-10
  • Windows系统中完全卸载MySQL数据库实现重装mysql

    Windows系统中完全卸载MySQL数据库实现重装mysql

    这篇文章主要介绍了Windows系统中完全卸载MySQL数据库实现重装mysql数据库的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • Mysql优化order by语句的方法详解

    Mysql优化order by语句的方法详解

    本篇文章我们将了解ORDER BY语句的优化,在文中给大家提到了mysql中的两种排序方式,需要的朋友参考下吧
    2018-08-08
  • MySql数据库备份的几种方式

    MySql数据库备份的几种方式

    这篇文章主要介绍了MySql数据库备份的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • MySQL 关闭子表的外键约束检察方法

    MySQL 关闭子表的外键约束检察方法

    下面小编就为大家带来一篇MySQL 关闭子表的外键约束检察方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论