mysql 数据库偶现入库失败排查及解决

背景

利用python脚本进行服务器关键进程的24小时持续监控,监控的数据入库到数据库中,便于事后进行分析。

问题列表
1、解决The total number of locks exceeds the lock table size错误
2、解决1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1")错误

发现问题1:

发现偶尔mysql会报入库失败的问题

定位分析:


修改python中存入数据库源码;通过try except去捕获报错信息,报错的详情信息存入在e变量中,可以直接进行打印;因为是偶现bug,还在日志中打印了报错的时间以及正在执行的语句。
    #print(insert_sql)
    try:
        # 执行SQL语句
        cursor.execute(insert_sql)
        # 提交到数据库执行
        db.commit()
        #print('提交数据表成功')
    except  Exception as e:
        # 发生错误时回滚
        db.rollback()
        print("失败回滚"+str(datetime.now()))
        print(e)
        print("SQL:"+insert_sql)

结果抓取定位问题

mysql 数据库偶现入库失败排查及解决_第1张图片
报错信息提示The total number of locks exceeds the lock table size,是缓存不足导致。
原因分析:因为监控的进程数量较多,而且执行的是批量入口操作,所以可能会导致数据抓取的值不足。

问题解决

可以通过登录mysql数据库服务器,修改配置问题my.ini中胡配置
innodb_buffer_pool_size=2GB    #默认值为8M修改为2G或 3G,根据表大小,进行调优。

重启MySQL服务器

在linux下可以直接使用脚本修改,window服务器参考Windows 命令行重启MySQL服务进行重启。

问题2
报错信息如下
image.png
问题分析
可能为使用了mysql的关键字导致
https://blog.csdn.net/wukong_...

参考
1:mysql 数据库缓存调优之解决The total number of locks exceeds the lock table size错误
https://www.cnblogs.com/nulig...
1:Windows 命令行重启MySQL服务
https://cloud.tencent.com/dev...
2

你可能感兴趣的:(mysql)