当前位置: 首页 > news >正文

使用shell脚本得到MySQL实例列表

640?wx_fmt=jpeg

    之前从主机,实例,业务,集群几个维度来完善了运维平台的元数据信息,把流程贯穿起来,也确实看到了一些好处,但是有一个点很重要,也是我们容易忽略的:有些元数据我们也无法确认是不是完整,准确。大体有三个维度:

    1)目前系统中遗漏的实例信息

    2)目前系统中错误的实例信息

    3)目前系统中已经过期的信息(比如系统下线,但是元数据没有及时变更)

    因为数据是收上来了,但是到底差了多少,目前来说还无法判断。

    所以意识到这个问题之后,我们需要一些行动来完善。一种方式是全量的扫描,然后全量刷新,这样我们就知道哪些信息做了刷新,优点是思路很清晰,做没做一目了然,但是缺点也很明显,有些控制过度;另外一种方式是全量扫描,增量刷新,即刷新那些确实变化的,那么一个哲学问题就出来了,我们怎么知道扫描抓取的信息和原来的不一样,这个问题先放一下,留在以后说。

    所以主动抓取的方式不是很优雅,而且对业务的依赖和侵入性较高,打个比方你去租房子,假如中介反复来问你,要不要租房子,你肯定也会烦,但是如果你明确了你需要租房子的需求,再去找中介,这个事情的效率和价值就会是指数级的提升。元数据的信息维护也是类似的道理,比较优雅的方式是通过客户端主动推送,或者通过流程的方式来做数据流转。不应该是系统来反向主动抓取,一来有延迟,二来效率也不高。

    如果在初期的时候,很多不完善不规范,或者确实实施有潜在痛点的情况下,这个事情可以先做,意义就是我们保证我们收集的信息是完整,准确的,我们先做好了,保证业务线能用起来,之后可以再来要求其他人来配合和支持。

    我相信这个事情认真做起来,会有很多的意外收获。

所以目前的一个需求就会是先收集目前服务器上已有的数据库实例,和已有的元数据做比对。

    有几个问题就会马上呈现出来,一个是因为历史原因,有些数据库实例的socket文件路径不规范,还有不少服务器有单机多实例的情况。所以假设我们拿到了一个服务器列表是100台服务器,那么数据库实例可能是150或者200以上。

    要做梳理,我们就需要明确实例的基本信息,所以我写了一个初步的脚本,从进程的描述信息中抓取实例的信息,然后过滤得到需要的一些属性,比如端口和socket配置。有了这些信息,就可以尝试遍历一个列表文件来逐个比对了。

    脚本内容如下:

ps -ef|grep mysql |grep -w mysqld|grep -v grep > mysqllist_ps.tmp

awk -F'--' '{for (i=2;i<=NF;i++) {printf $i" "}printf "\n"}' mysqllist_ps.tmp > mysqllist.lst

while read line

do

  array=$line

  port_str='port='

  socket_str='socket='

   for arr_tmp in ${array[*]}; do

     if [[ $arr_tmp =~ $port_str ]];then

       port_tmp=`echo $arr_tmp|sed 's/port=//g'`

     fi

     if [[ $arr_tmp =~ $socket_str ]];then

       socket_tmp=`echo $arr_tmp|sed 's/socket=//g'`

     fi

   done

     if [ -z "$port_tmp" ];then

       port_tmp=3306

     fi

     echo $port_tmp $socket_tmp

done  < mysqllist.lst

    

相关文章:

  • 运维开发的开源项目
  • 关于运维开发,说说你的看法
  • Greenplum集群故障修复小记
  • 运维开发流程梳理和思考
  • MySQL 8.0初体验
  • Oracle Cloud初体验
  • MySQL权限开通的设计方案
  • Oracle Cloud for MySQL的初步测试
  • 技术分享活动的小结
  • 两道简单的数学题
  • 技术学习的一些建议
  • 我的女儿二三事(十一)
  • 一些技术认证的学习成本感想
  • 快高考了,写点东西给你们
  • 最近在读的三本书
  • 【译】JS基础算法脚本:字符串结尾
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • docker-consul
  • JavaWeb(学习笔记二)
  • jquery cookie
  • Linux链接文件
  • mysql中InnoDB引擎中页的概念
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Redis字符串类型内部编码剖析
  • Tornado学习笔记(1)
  • use Google search engine
  • Vue2.x学习三:事件处理生命周期钩子
  • Vultr 教程目录
  • 对超线程几个不同角度的解释
  • 配置 PM2 实现代码自动发布
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 微信小程序:实现悬浮返回和分享按钮
  • 写代码的正确姿势
  • 以太坊客户端Geth命令参数详解
  • 原生Ajax
  • 正则与JS中的正则
  • hi-nginx-1.3.4编译安装
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (生成器)yield与(迭代器)generator
  • (转)Linux下编译安装log4cxx
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET 4.0中的泛型协变和反变
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core 依赖注入的基本用发
  • .NET NPOI导出Excel详解
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [ NOI 2001 ] 食物链
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • []我的函数库
  • [BJDCTF 2020]easy_md5
  • [C++]四种方式求解最大子序列求和问题