mysql 案例 ~ 程序端报错案例

本文针对MySQL数据库中常见的报错提示,如max_allowed_packet设置过小、sort_buffer_size资源耗尽、max_binlog_cache不足及JDBC连接错误等问题,提供了详细的分析与解决方案。文章强调了参数调整、SQL优化及合理设置超时时间的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 简介:汇总程序报错提示的相关问题

    问题 1 程序错误信息 max_allowed_packet 设置过小导致java程序写入失败
    答案  1 max_allowed_packet=32M 写入配置文件并重启
              2 set global max_allowed_packet=33554432
    问题2 mysql错误日志 sort
    错误日志:
    [ERROR] /usr/local/mysql/bin/mysqld: Sort aborted: Query execution was interrupted
    分析 sort_buffer_size默认2M,通常用于order by。属于session独享.我的推测是由于某个session会话导致的,通常情况下,是不会报错的
    解决: 定位慢日志,优化慢sql.因为sort_buffer_size是session独享,不建议调节太大
    问题3 程序执行事务时,报max_binlog_cache不足问题
    具体错误描述 ulti-statement TRANSACTION required more THAN 'max_binlog_cache_size' bytes of STORAGE、
     分析 1 事务根据生成binlog cache的大小算作事务的大小,由max_binlog_cache_size控制

             2 max_binlog_cache_size 默认大小为32K

             3 max_binlog_cache_size 是session级别独享的

    总结 1 调整 参数大小 2 对大事务进行拆分

    补充

    1 Binlog_cache_disk_use表示因为我们binlog_cache_size设计的内存不足导致缓存二进制日志用到了临时文件的次数

        Binlog_cache_use 表示 用binlog_cache_size缓存的次数

     2 当对应的Binlog_cache_disk_use 值比较大的时候 我们可以考虑适当的调高 binlog_cache_size 对应的值

   问题3 jdbc报连接错误问题

   具体错误描述 error code [1094]; Unknown thread id: 73125270; nested exception is java.sql.SQLException: Unknown thread id: 73125270

   分析 1 根据官网可以查看的错误代码解释,不过没什么用

           2 经过与研发沟通,确认研发设置了jdbc超时时间

  总结 jdbc超时时间的设置,一旦sql本身超过超时时间的设置,会发送kill session信息请求,导致jdbc报错

   优化你的sql或者将超时时间设大都有助于错误的减少出现

转载于:https://www.cnblogs.com/danhuangpai/p/11572282.html

### MySQL 存储过程中异常处理 在 MySQL 中,尽管不存在像其他编程语言那样的 `try...catch` 结构,仍然可以通过声明处理器来实现类似的错误捕捉机制。具体来说,在存储过程内部可以定义处理器用于响应特定类型的条件(如 SQL 错误)。通过这种方式可以在发生预期之外的情况时采取适当措施而不会让整个程序崩溃。 为了达到不报错的效果,通常做法是在检测到错误之后将其转换成警告或者忽略掉某些非致命性的失败情形,并继续执行后续逻辑[^1]。 下面是一个简单的例子展示如何创建一个带有基本异常处理功能的存储过程: ```sql DELIMITER $$ CREATE PROCEDURE insert_users() BEGIN DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @error_message = 'An error occurred while inserting data.'; START TRANSACTION; INSERT INTO t_user (name, age) VALUES ('Alice', 25); -- 假设这里有一个可能导致错误的操作 IF (@@ERROR_COUNT > 0) THEN ROLLBACK; SELECT @error_message AS message; ELSE COMMIT; SELECT 'Data inserted successfully.' AS message; END IF; END$$ DELIMITER ; ``` 在这个案例里,当遇到任何 SQL 异常时,会触发已声明的手动处理器并将错误信息保存在一个变量中;接着根据实际情况决定回滚交易还是提交更改并给出相应提示消息。 #### 使用注意事项 - **事务管理**:确保所有的 DML 操作都在同一个事务范围内完成以便能够统一控制成功与否的状态。 - **自定义错误信息**:利用用户定义变量来传递更详细的上下文信息有助于调试和日志记录。 - **选择合适的处理器类型**:可以根据需求选用不同的处理器行为 (`EXIT`, `CONTINUE`) 来调整流程走向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值