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('提交数据表成功')
exceptException as e:
# 发生错误时回滚
db.rollback()
print("失败回滚"+str(datetime.now()))
print(e)
print("SQL:"+insert_sql)
结果抓取定位问题
文章图片
报错信息提示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
报错信息如下
文章图片
问题分析
可能为使用了mysql的关键字导致
https://blog.csdn.net/wukong_...
【mysql 数据库偶现入库失败排查及解决】参考
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
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 数据库设计与优化
- 数据库总结语句
- py连接mysql
- 2019-01-18Mysql中主机名的问题
- MySql数据库备份与恢复
- mysql|InnoDB数据页结构
- 数据库|SQL行转列方式优化查询性能实践
- mysql中视图事务索引与权限管理
- MYSQL主从同步的实现