这是学习笔记的第 2103 篇文章
最近碰到了一个奇怪的权限问题,问题的背景是业务同学反馈在下班后,有一个数据表出现了阻塞,导致后续的业务流程都产生了拥堵,在对这个问题进行分析发现,业务同学所谓的拥堵,阻塞是数据库连接出了问题。当然我们进行了一些深入的沟通,对整个问题的情况有了一个更为清晰的了解。
6:30左右,业务同学发现程序端产生了阻塞,程序端正在处理的操作是一个create table的操作。
6:40左右,业务同学尝试通过客户端工具连接到数据库来手工执行,但是发现连接超时,根据业务同学反馈,之前是能够正常连接的。
6:50左右,业务同学开始呼叫DBA进行处理。
7:00左右,DBA就位后,什么都没做,就魔法般的解决了问题。
对于业务同学的印象,是数据库不够稳定,因为另外一套环境也出现了类似的问题,这是一个很纠结的情况,我们如同哆啦A梦般的存在,但是实际上什么都没有做就解决了问题。
当然在我的职业生涯中,对待问题我是不相信神奇的力量,事出有因,我希望找到那些看起来简单的问题的答案。
从业务同学的反馈时间点开始,我尝试找到一些相关的日志来看看,从数据库的处理来看,是不大可能阻塞DDL中的create操作的,无论服务器压力大小,这算是DDL里面最正常的需求了,绝对不应该阻塞几十分钟。
幸运的是,我很快找到了相关的binlog日志,简单解析之后,看到了下面的内容。
从内容来看,情况和业务同学反馈的时间点是吻合的,业务逻辑会自动创建相关的时间表,而下一次create则是在20多分钟之后,这里的问题就来了,为什么创建两张表的过程中会有这些权限处理的语句出现?
看这些权限处理的语句还是比较规范的,而且从执行日志来看不大像是人工执行的,因为整个权限的处理涉及的语句条数还比较多,从执行上来看,像是工具生成的。
我查看了下相关时间范围内的工单数据,发现在那个指定的时间段里,确实有同事在处理几个相关的工单,带着这个信息和同事确认,才发现这两件看起来不相关的事情还是有关联的。
业务同学反馈,有两套环境都出现了类似的问题,和工单数据比对发现,情况是完全相符的,在出现问题的时间段里产生了阻塞。
我们来仔细看一下这条语句:
GRANT USAGE ON *.* TO 'srv_datasync_rwh'@'192.168.18.%' IDENTIFIED WITH 'mysql_native_password' AS '*5EEBC522DE487B0D5C2506C65412F9C337F70C40'
这条语句是对于192.168.18端的客户端开通相应的权限,而这个grant语句其实是类似MySQL 5.7的create user语句,带着这个问题继续下钻,发现原来这个数据库中本身是存在用户'srv_datasync_rwh'@'192.168.18.%' 的,在这里,相当于工具重新生成了完整的授权语句,对已经存在的用户进行了重新授权,这个操作的代价有点类似于权限重置。
而这个问题在测试环境中模拟是直接复现不了的,整个问题和触发的上下文环境也有相关性,同时对涉及到权限处理的完整过程中产生了额外影响,有点类似于在购物网站中,一边在购物下单,另一边在同时做密码重置,这是一种较为模糊的临界状态。
总体来说,这个权限问题还是相对可控的,我们需要修复运维工具自动生成的语句的逻辑,对于5.7版本的使用create user,grant这种组合授权模式。
相关链接:
个人新书 《MySQL DBA工作笔记》
今天我将为大家介绍逻辑回归的含义并展示Pytorch实现逻辑回归的方法,先我们来看看一个问题。问题: 大家想必对MNIST数据集已经非常熟悉了吧?这个数据集被反复“咀嚼”,反复研究。今天我们将换个角度研究MNIST数据集。假设现在不使用卷积神经网络,又该使用什么方法来解决MNIST分类问题呢?一、观察数据 在开始分析数据问题之前,我...
写在前面 最近公众号的活动让更多的人加入交流群,尝试提问更多的我问题,群主也在积极的招募更多的小伙伴与我一起分享,能够相互促进。 这里总结群友经常问,经常提的两个问题,并给出我的回答: (1)啥时候能出教程,能够讲解PCL中的各种功能? (2)如何解决大规模点云的问题呢? 以下给出正式的解答以及计划安排 问题1:对于...
我刚刚开始接触PCL,懂的东西也很少,所以总是出现各种各样的问题,每次遇见问题的时候要查找各种各样的资料,很费时间。所以,今天我把我遇见的常见问题分享给大家,讲解的步骤尽量详细,让和我一样基础差的小伙伴能尽快进入到PCL点云库的学习中,希望能和大家进步。 运行环境:PCL-1.8.0-AllInOne-msvc2013-win...
这篇博文中主要收集我开发过程中遇到的Makefile相关的问题, 以免自己日后再犯类似的错误. 今天就遇到一个很弱的问题, Makefile显示如下错误: 出现该问题是因为我写错了标注处的代码: $和()之间有空格了, 这里必须是$(), 不能有空格的...
10月6日,惠普公司对外宣布,将公司拆分为两家独立的上市公司,其中,惠普企业(Hewlett-Packard Enterprise)的业务由惠普领先的企业技术基础架构业务、软件业务和服务业务组成,而惠普公司(HP Inc)的业务则由惠普领先的个人系统业务和打印业务组成。无独有偶,10月10日 ,赛门铁克公司宣布,公司董事会一致批准将...
我撰写的一些关于RUP的讲义,PDF格式,可在文后点击“附件下载”阅读全文。 本篇内容简介及部分截图: ◇ 业务建模是什么 ◇ 为什么需要业务建模 ◇ 业务建模的主要工作内容 ◇ 业务建模的相关工作成果 ◇业务建模所关注的领域 ◇ RUP业务建模的规程 ◇ 业务建模的建立过程 ◇ 建立业务用例的实现 ◇ 业务模型向系统模型转换...
零(将字符串转化成数字的函数) int num = atoi(arr); 该函数具有把字符串转化成整型数的作用。 壹(vim显示行号) Linux终端下直接输入vim ~/.vimrc,打开是一个空白的页面,然后进入插入模式,直接输入set nu,然后保存并退出,以 后每次 ...
windows下 Source Monitor代码度量工具的使用 引用链接: https://www.cnblogs.com/xuehanyu/p/4520965.html 1.总体介绍 SourceMonitor是一款免费的软件,运行在Windows平台下。它可对多种语言写就的代码进行度量,包括C、C++、C#、Java、V...
python基础知识(二) (二)常用控制流 1、控制语句 分支语句:起到一个分支分流的作用,类似马路上的红绿灯 循环语句:for while 可以使代码不断重复的执行 2、判断语句:关键字是if..elif..else a、if条件语句后面可以接比较运算、逻辑运算、成员运算;当if后面的语句满足条件,允许的结果是Tru...
1.Python : 是一门解释型 弱类型 高级开发编程语言. 2.第一个Python程序的编写: print ("hell,world") 3.变量:把程序运行过程中的值储存起来,方便后面的程序调用. 4.变量的命名要求: 1,只能是数字或字母或下划线组成; 2,不能是数字开头,也不能全是数字; 3,不能是Python的关键字; 4...
一 程序的三种基本结构 顺序结构:程序从上往下依次执行,这个叫顺序结构 分支结构:有选择的执行或者不执行某段代码 循环结构:重复的执行某段代码 二 分支结构之if 最简单的俩种用法 (tips: if语句后面的大括号可以省略:如果省略:那么这个if语句只能管理离它最近的那...