MySQL自用脚本/shell命令(不定期更新)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 批量kill MySQL中的sleep状态的连接 方法1.  基于MySQL本身的查询和kill指令(感谢飞飞哥友情赞助) 点击(此处)折叠或打开 mysql>select concat('KILL ',id,';') from information_schema.
批量kill MySQL中的sleep状态的连接
方法1.  基于MySQL本身的查询和kill指令(感谢飞飞哥友情赞助)

点击(此处)折叠或打开

  1. mysql>select concat('KILL ',id,';') from information_schema.processlist where user='root' into outfile '/tmp/a.txt';
  2. Query OK, 2 rows affected (0.00 sec)
  3. mysql>source /tmp/a.txt;
  4. Query OK, 0 rows affected (0.00 sec)

方法2.  使用管道命令(修正)

点击(此处)折叠或打开

  1. mysqladmin -uroot -pPWD processlist | grep -i sleep | awk '{print $2}' | xargs -n 1 mysqladmin -uroot -pPWD processlist kill

简易延伸(修正)
使用Linux的定时任务来定时检测MySQL的连接数,并根据一定的阈值来批量kill sleep连接或者Query连接(防止数据库连接被爆)
类似脚本,在使用前,无论如何请在测试环境先进行详细验证之后再慎重使用......


点击(此处)折叠或打开

  1. #!/bin/bash
  2. #Author Wang.wenan @ 2015/09/30
  3. #Edit @ 2015/10/09
  4. USER=root
  5. PASSWORD=PWD
  6. SLIMIT=10000
  7. QLIMIT=10000
  8. n=`mysqladmin processlist -u$USER -p$PASSWORD | grep -i sleep |wc -l`
  9. m=`mysqladmin processlist -u$USER -p$PASSWORD | grep -i Query |wc -l`
  10. if [ "$n" -gt $SLIMIT ]
  11. then
  12.     echo "sleep connection is too many, count:$n \n\n\n" >> /home/log/MySQL_Connection_Killer.log
  13.     mysqladmin processlist -u$USER -p$PASSWORD | grep -i sleep >> /home/log/MySQL_Connection_Killer.log
  14.     mysqladmin processlist -u$USER -p$PASSWORD | grep -i sleep |awk '{print $2}' | xargs -n 1 mysqladmin -u$USER -p$PASSWORD kill
  15.     echo "sleep is too many, so killed them all at $(date -d today +%Y-%m-%d\ %H:%M:%S)" >> /home/log/MySQL_Connection_Killer.log
  16. else
  17.     echo "MySQL Connection check is passed, sleep connection count:$n" >> /home/log/MySQL_Connection_Killer.log
  18. fi
  19. if [ "$m" -gt $QLIMIT ]
  20. then
  21.     echo "Query connection is too many, count:$m \n\n\n" >> /home/log/MySQL_Connection_Killer.log
  22.     mysqladmin processlist -u$USER -p$PASSWORD | grep -i Query >> /home/log/MySQL_Connection_Killer.log
  23.     mysqladmin processlist -u$USER -p$PASSWORD | grep -i Query |awk '{print $2}' | xargs -n 1 mysqladmin -u$USER -p$PASSWORD kill
  24.     echo "Query is too many, so killed them all at $(date -d today +%Y-%m-%d\ %H:%M:%S)" >> /home/log/MySQL_Connection_Killer.log
  25. else
  26.     echo "MySQL Connection check is passed, Query connection count:$m" >> /home/log/MySQL_Connection_Killer.log
  27. fi

使用crontab,随意设置时间间隔

查看MySQL数据库状态(小改)
转载自http://www.orczhou.com/index.php/2014/03/some-tricky-about-mysqladmin-extended-status/
PS:如果标题格式和下面的数据没有对齐,在红线标出的print语句添加空格修改就好

点击(此处)折叠或打开

  1. mysqladmin -P3306 -uroot -p -h127.0.0.1 -r -i 1 extended-status |awk -F"|" "BEGIN{ count=0; }"'{ if($2 ~ /Variable_name/ && ((++count)%20 == 1)){\
  2. print "----------|---------|--- MySQL Command Status --|----- Innodb row operation -----|-- Buffer Pool Read --";\
  3. print "---Time---|---QPS---|select insert update delete|  read  inserted updated deleted|   logical    physical";\
  4. }\
  5. else if ($2 ~ /Queries/){queries=$3;}\
  6. else if ($2 ~ /Com_select /){com_select=$3;}\
  7. else if ($2 ~ /Com_insert /){com_insert=$3;}\
  8. else if ($2 ~ /Com_update /){com_update=$3;}\
  9. else if ($2 ~ /Com_delete /){com_delete=$3;}\
  10. else if ($2 ~ /Innodb_rows_read/){innodb_rows_read=$3;}\
  11. else if ($2 ~ /Innodb_rows_deleted/){innodb_rows_deleted=$3;}\
  12. else if ($2 ~ /Innodb_rows_inserted/){innodb_rows_inserted=$3;}\
  13. else if ($2 ~ /Innodb_rows_updated/){innodb_rows_updated=$3;}\
  14. else if ($2 ~ /Innodb_buffer_pool_read_requests/){innodb_lor=$3;}\
  15. else if ($2 ~ /Innodb_buffer_pool_reads/){innodb_phr=$3;}\
  16. else if ($2 ~ /Uptime / && count >= 2){\
  17. printf(" %s |%9d",strftime("%H:%M:%S"),queries);\
  18. printf("|%6d %6d %6d %6d",com_select,com_insert,com_update,com_delete);\
  19. printf("|%8d %6d %7d %7d",innodb_rows_read,innodb_rows_inserted,innodb_rows_updated,innodb_rows_deleted);\
  20. printf("|%10d %11d\n",innodb_lor,innodb_phr);\
  21. }}';

效果图


shell,查询指定SQL的trace信息

点击(此处)折叠或打开

  1. mysql -uUSER -pPWD -hHOST -e "use ins_tc_prd;set session optimizer_trace='enabled=on';set optimizer_trace_max_mem_size = 1638400;explain SQL;select * from information_schema.optimizer_trace\G;" > trace_log.log

#查看表空间的使用情况

点击(此处)折叠或打开

  1. select table_name,
  2.        (data_length+ index_length) /1024/1024 as total_mb,
  3.        table_rows
  4. from information_schema.tables
  5. where table_schema= 'zabbix' ;//不写就是全部

在mysql client显示具体的信息

点击(此处)折叠或打开

  1. [Client] prompt='\u@\h(\d) \\r:\m:\\s:>'

在mysql client使用tab自动完成

点击(此处)折叠或打开

  1. [mysql] auto-rehash

避免脚本中总是出现密码insecure的小技巧

在脚本中添加 export MYSQL_PWD=xxxxxxxx, 然后在mysql的连接命令中去掉-p选项, 在脚本中就不会出现讨厌的提示信息了~~\(≧▽≦)/~

通过.frm文件来获取表结构
需要安装mysql-utilities; 3306是mysql实例的监听端口, 3310是一个空端口

点击(此处)折叠或打开

  1. mysqlfrm --user=root --basedir=/usr/ --server=root:root@localhost:3306 /home/mysql/data/sakila/actor.frm --port=3310
效果如图:


解析所有的.frm文件

点击(此处)折叠或打开

  1. mysqlfrm --diagnostic /home/mysql/data/sakila
效果与上图类似
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
86 1
|
10天前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
49 7
|
28天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
52 2
6种方法打造出色的Shell脚本
|
14天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
41 1
|
15天前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
30 1
|
19天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
40 2
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
49 6
|
29天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
17天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
32 1
|
19天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
33 4