我正在使用 MySQL 5.5,并SHOW ERRORS
用于检测存储过程中的错误。但我需要从SHOW ERRORS
结果中获取消息以插入到我的日志表中。我该怎么做,。?
结果SHOW ERRORS
是这样的:
Level Code Message
========================================================
Error 1146 Table 'mysql.my_table' doesn't exist
我正在使用 MySQL 5.5,并SHOW ERRORS
用于检测存储过程中的错误。但我需要从SHOW ERRORS
结果中获取消息以插入到我的日志表中。我该怎么做,。?
结果SHOW ERRORS
是这样的:
Level Code Message
========================================================
Error 1146 Table 'mysql.my_table' doesn't exist
如果 MySQL 有 TRY-CATCH 子句,那么您可以捕获错误并写入有关它的信息。
我建议您在应用程序级别执行此操作 - 捕获错误并将信息写入日志文件/表。
我认为在 5.5 中没有办法做到这一点,但是如果您已更新到 5.6+,您可以执行以下操作:
我使用GET DIAGNOSTICS来访问错误信息,然后将这些信息用作插入错误日志的输入。
创建结构,例如:
CREATE TABLE table_that_exists
(
column_that_exists INT(11) NOT NULL
, PRIMARY KEY (column_that_exists)
);
CREATE TABLE tbl_error_log
(
id INT(11) NOT NULL AUTO_INCREMENT
, err_no INT(4)
, err_msg VARCHAR(50)
, source_proc VARCHAR(50)
, PRIMARY KEY (id)
);
运行查询以产生错误并显示 SHOW_ERRORS 的输出:
SELECT anything FROM table_that_exists;
SHOW ERRORS;
如何访问数据以用于其他程序/错误管理的示例:
GET DIAGNOSTICS CONDITION 1
@P1 = MYSQL_ERRNO, @P2 = MESSAGE_TEXT;
SELECT @P1, @P2;
INSERT INTO tbl_error_log (err_no, err_msg, source_proc)
VALUES (@P1, @P2, 'sp_faulty_procedure');
SELECT * FROM tbl_error_log;