记升级mysql后的一次故障

一、问题背景

  接上级要求,某生产数据库需要实施备份;刚好漏洞扫描报告出来,mysql 版本需要升级到5.7.20,于是就未雨绸缪,先写脚本。脚本在mysql旧版本下完全可用(未升级前,mysql 为5.7.18)。升级完后,本着技术人员的一种严谨态度,绝对要sh -x 看看脚本在新环境下有没有出现异常啦~~~

二、现象(主要有两个)

  1、mysqldump只能备份表不能备份库(Z库和S库),刚好测试时用的是S库!(这个强调下面是有用的,观众慢慢欣赏)。开始非常纳闷,两个库才不到100M,mysqldump良久不出结果,总不能仅仅1~2天,生产库上数据量陡增的

   2、与此同时,测试人员反馈,项目页面一直转圈登不上(前一天刚升级完数据库,测试过,页面打开没问题)

  

三、排查及解决

  1、上头说,可能是因为升级后 tomcat 没有重启,导致应用出问题(ps:数据库跟应用分别在两台不同的机器上),于是就重启 tomcat ~~顺带观察实时日志:tail -f Catalina.out

(1)图一

(2)图二

  综上,可以发现,挺多preparing的。。。然当时其实看不出有什么异样(毕竟太年轻,囧)

  2、之后,开发人员拿到数据库账号密码,说S库的某个表,也就是上图的日志表:TB_ICT_SYS_LOG被锁了!这就是为什么mysqldump测试备份S库的时候一直备份不了,如果测试备份Z库的话,结果估计是可以出来的,因为Z库上的表并没有被锁

登陆数据库查线程运行情况,终于有眉目了!!!

(1)图一   (mysqldump不了S库的线程)

(2)图二    (页面登陆不上卡住报错的线程)

  3、解决:根据查到的进程号, kill 掉数据库锁进程

之后,数据库恢复正常,页面打开没问题

四、结论

  1、浏览器登陆项目页面,无论登陆是否成功,都有一个第三点 1(2)图二的插入S库日志表的操作

  2、mysqldump备份数据库会有锁表的问题,可能会和插入操作有冲突(开发人员:业务上并没有其他地方引起锁表操作),所以这次问题的产生好可能是因为在调试脚本的时候引起的。为了不影响业务,建议晚上备份(现在调度已改成凌晨 0 点备份

  3、确定Tomcat数据库连接池配置是否准确无误(.../WEB-INF/classes/jdbc.properties),虽然跟本次排错过程无关

这个日志是tomcat最早时候的信息(暂时不知道这里是不是暗藏问题发生的玄机)

时间: 2024-12-22 15:41:04

记升级mysql后的一次故障的相关文章

centos下升级mysql后遇到的小问题

记录今天遇到的一个小问题, 写一个app访问接口涉及到通过存储过程反馈多个结果集,但是反回多个结果集的存储过程,调用之后只能反回一个了,而且奇怪的是,即使直接在mysql上同时执行两条查询语句,第一条查询的数据也不会出现,只会出现第二条数据,  开始找原因了-->,最开始怀疑是centos系统问题(接口操作的数据库都是直接连接的服务器,本地没有创建),因为这代码都是我以前写好了,在windows服务器上跑过的,是没问题的.网上找找,没发现有人这么样说.....    然后尝试下直接操作本地数据库

升级 MySQL 至 5.5,报错 [ERROR] Plugin 'InnoDB' init function returned error

MySQL 从 5.5 升级到 5.6,启动时报错: [ERROR] Plugin 'InnoDB' init function returned error. [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. [ERROR] Unknown/unsupported storage engine: InnoDB [ERROR] Aborting 原因:主要是没有正常关闭 mysqld 服务的情况下,对数据库参数进行改

phpstudy升级mysql数据库

因为MySQL支持全文索引的只有5.6以上,而我下的phpstudy只有5.5的版本,在导入数据库的时候因为该数据库的表内有使用全文索引,因此必须升级phpstudy的mysql版本,这里就把自己当升级过程详细记录和总结一下. 首先查看phpstudy的mysql版本: 方法一  使用mysql的version函数: select     version(); 方法二  status命令 status; 如果不想登陆mysql进行查询可以使用mysql -v和mysql --help,这里不详述

CentOS 6.4下安装MySQL后重置root密码方法

本人在CentOS 6.4上安装万mysql后,无法通过root进入,因为安装的时候,并没有设置root密码,似乎有个初始随机密码,但是不记得了,太麻烦,直接重置root密码. 使用rpm包安装完mysql后,按照一下步骤重置root密码: 启动mysql:#/etc/init.d/mysql start 启动成功后查看mysql进程信息,获取mysqld_safe的安装目录(非常关键):#ps -ef | grep -i mysqlroot 3466 1 0 01:45 pts/1 00:00

MySQL二进制包使用mysql_upgrade版本更新升级MySQL 5.7

在部署MySQL的过程一般使用的都是二进制包,所以在升级MySQL的版本时也是把最新的MySQL包解压到basedir下即可,当然如果是MySQL中没有任何数据的直接删除重新安装也可以,在更新时需要把停止MySQL的服务,注意如果是生产环境下需要做好相应的备机切换后在升级,其次升级时只能正常的版本迭代,而不能夸版本更新,如5.1升级到5.7是不可行的,正常应该是5.6升级到5.7,下面就简单的说一说在二进制包下如何使用mysql_upgrade来进行版本升级: #在关闭MySQL的进程后开始升级

phpstudy 升级mysql到mysql5.7

前言 今天在工作发现一个错误,在往本地导数据表的时候老是报错: ? 1 [Err] 1294 - Invalid ON UPDATE clause for '字段名' column 报错的数据表字段: ? 1 `字段名` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP 同事说同一个 sql 文件他可以导成功.猜可能是数据库版本的问题,同事的是 5.6,我查了下本地的数据库版本是 5.5.53.网上查了一下,果然是版本的问题,5.5 和 5.6

详细讲解安全升级MySQL的方法

MySQL升级是非常必要的. 我们在Percona Support上列出了关于MySQL升级最佳实践的各种问题.这篇文章推荐了一些不同情况下升级MySQL的方法. 为什么MySQL升级是必须的? 原因有很多,比如:为了使用新增的特性,基于性能方面的考量, 修复的bug. 但是在没有充分的测试以前就应用到你的应用中是非常危险的, 因为升级可以能会让你的应用不能正常运作- 也可能引起性能的问题. 此外, 我建议你关注MySQL的发布信息和Percona Server- 看看最近的版本有什么变化. 也

安装初始化mysql后,默认几个库介绍

背景介绍:  当我们安装初始化mysql后,默认建了几个数据库,那么这些数据库有什么作用呢?mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || performance_schema || test               |+--------------------+4 rows

记:MySQL 5.7.3.0 安装 全程截图

前言: 下一个班快讲MySQL数据库了,正好把服务器里面的MySQL卸了重装了一下. 截个图,作为笔记.也正好留给需要的朋友们. 目录: 下载软件 运行安装程序 安装程序欢迎界面 许可协议 查找更新 选择安装类型 检查需要组件 准备安装 准备配置MySQL 配置MySQL实例 设置MySQL账号 Server服务配置 配置完毕 安装&配置完毕 完成安装 MySQL Workbench工作台 MySQL Workbench工作台主界面 结尾 MySQL 5.7.3.0 安装 全程截图 经典的MyS