MySQL经验分享:Shell开发问题

背景

之前整理过Python连接使用MySQL的经验,链接如下:

pymysql封装总结_pymysql封装类-CSDN博客

相比高级语言,Shell与MySQL开发使用相对会更麻烦一些;由于

  • shell是linux命令集的概称,是属于命令行的人机界面。Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁

  • 可以快速开发实现需求,运维用户是通过Shell快速实现需求,并且部署在Linux服务器上

所以分享下MySQL与Shell开发经验

分享

Shell脚本登录时警告不安全

说明

通过Shell脚本连接数据库MySQL进行操作时,在使用正确的用户密码正常登录MySQL后,会提示:[Warning] Using a password on the command line interface can be insecure

意思为:[警告]在命令行界面上使用密码可能不安全

复现

mysql_dev.sh脚本代码如下:

mysql_host=127.0.0.1
mysql_port=3306
mysql_user=root
mysql_passwd="123456"
mysql -h ${mysql_host} --port "${mysql_port}" -u "${mysql_user}" --password=${mysql_passwd} -e 'show databases'

执行脚本返回信息如下:
在这里插入图片描述

解决方案

通过全局设置密码export MYSQL_PWD=<明文密码>,改造如下:

mysql_host=127.0.0.1
mysql_port=3306
mysql_user=root
mysql_passwd="123456"
export MYSQL_PWD="${mysql_passwd}"
mysql -h "${mysql_host}" --port "${mysql_port}" -u "${mysql_user}"  -e 'show databases'

执行脚本返回信息如下,问题被解决
在这里插入图片描述

执行SQL报错可以获知和处理

说明

当使用错误的SQL执行时,如表不存在这种场景,是没办法直接报错的;但是预期应该是:当报错时,可以获知和处理

复现

原代码如下:

mysql -h "${mysql_host}" --port "${mysql_port}" -u "${mysql_user}"  -e 'show database'

执行结果如下:
在这里插入图片描述

解决方案

通过shell的错误信号$?判断是否成功执行,改造如下:

mysql -h "${mysql_host}" --port "${mysql_port}" -u "${mysql_user}"  -e 'show database'
if [[ $? -ne 0 ]];thenecho "执行MySQL报错"
fi

执行结果如下:

在这里插入图片描述

执行SQL报错信息不进行输出

说明

如上一个例子,可以知道执行SQL报错,因为直接打印输出了;但由于在Shell中,代码量多,在正常情况下,预期知道执行错误但不期望打印输出错误

解决方案

在上一个例子的前提下,可以通过Shell的 2>&1解决

改造如下:

mysql -h "${mysql_host}" --port "${mysql_port}" -u "${mysql_user}"  -e 'show database' 2>&1
if [[ $? -ne 0 ]];thenecho "执行MySQL报错"
fi

改造后执行结果如下,MySQL客户端返回的错误信息没有被打印

在这里插入图片描述

补充:其中Shell脚本登录时告警不安全也可以通过这一方法解决

返回结果如何处理

说明

一般通过Shell脚本连接使用MySQL,不会有使用MySQL处理返回结果。但是也有这种场景问题。所以,怎么通过Shell处理MySQL执行SQL的返回结果,特别是多条返回结果的场景下。

解决方案

如处理获取MySQL表结构desc <table>

mysql_host=127.0.0.1
mysql_port=3306
mysql_user=root
mysql_passwd="123456"
export MYSQL_PWD="${mysql_passwd}"sql="desc mysql.slow_log;"
if [[ $? -ne 0 ]];thenecho "执行MySQL报错"
fi
mysql -h "${mysql_host}" --port "${mysql_port}" -u "${mysql_user}" -e "${sql}" | awk '{if(NR>1){  print "序号: "NR-1", 字段: "$1", 类型: "$2", 是否允许为空: "$3", 默认值: "$4}
}'

执行返回结果
在这里插入图片描述

补充:由于awk默认是通过空格分列的,而MySQL也是,所以通过desc获取表结构信息的返回结果时,第5列预期返回的是描述信息,但实际上,如果描述信息有空格内容,会被截断。

总结

以上是MySQL与Shell开发经验分享,基本可以满足通过Shell开发满足日常运维需求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1688采集商品信息 马帮 店小秘 芒果采集API接口 java php

1688详情API接口是一种基于开放平台的应用程序接口&#xff0c;它能够实现与1688平台的数据交互&#xff0c;让商家能够更加方便地获取商品详情、库存信息、价格变动等重要数据。通过这一接口&#xff0c;商家可以实时掌握市场动态&#xff0c;快速响应消费者需求&#xff0c;从…

jenkins进行自动化部署

jenkins自动化部署 hello&#xff0c;大家好&#xff0c;前文我们已经下载好我们的jenkins了&#xff0c;下面我们用jenkins来实现自动化部署啦&#xff01; 一、下载插件 我们选择插件管理 一个是Maven Integration plugin&#xff0c;一个是 Publish Over SSH 这里因为作…

【uniapp】uniapp实现免密登录

文章目录 一、概要二、整体架构流程三、技术名词解释四 、技术细节1.存取token有效期&#xff1f;2.使用setStorageSync而不使用setStorage&#xff1f;3.使用onLaunch而不使用全局路由&#xff1f; 一、概要 打开一个网页或小程序的时候&#xff0c;我们有时候会自动进入主页…

leetCode-01

***砍竹子I&#xff1a; 动态规划&#xff1a; public int cuttingBamboo(int bamboo_len) {int[] dpnew int[bamboo_len1];dp[0]0;dp[1]1;for (int i 2; i <bamboo_len ; i) {int max0;for (int j 1; j < i; j) {maxMath.max(max,Math.max(j*(i-j),j*dp[i-j]));}dp[i…

动态ip白名单频繁更改问题解决方案

1. 使用静态IP地址&#xff1a;可以通过向ISP申请静态IP地址来解决动态IP地址的变化问题&#xff0c;但是这种方法会比较贵。 2. 使用动态DNS&#xff1a;可以使用动态DNS服务&#xff0c;它可以将动态IP地址映射到一个固定的域名&#xff0c;从而使得动态IP地址处理为域名一直…

Linux 命令显示网络接口IP地址,可以在谷歌/甲骨文云shell上运行

显示当前网络接口IP 方法A&#xff1a; awk /32 host/ { print f } {f$2} <<< "$(</proc/net/fib_trie)" 方法B&#xff1a; #!/bin/bash ft_local$(awk $1"Local:" {flag1} flag <<< "$(</proc/net/fib_trie)") for …

嵌入式驱动学习第五周——驱动模块

前言 Linux驱动有两种运行方式&#xff0c;第一种是将驱动编译进Linux内核中&#xff0c;另一种是编译成模块&#xff0c;本篇博客来介绍一下驱动模块。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可…

Oladance、南卡、韶音开放式耳机值得买吗?爆款实测拒绝踩坑!

​在寻找最佳开放式耳机的过程中&#xff0c;我亲自试用并评估了市场上三个备受欢迎的品牌&#xff1a;Oladance、南卡和韶音。通过全面的多维度性能测试&#xff0c;我旨在为大家提供准确的购买指南&#xff0c;避免因选择不当而遭遇音质失真或佩戴不适的问题。 选择正确的耳…

window7 SP2

网上很多window7 SP1的更新教程&#xff0c;很少有sp2的教程 参考博客Windows 7 Service Pack 2 Download and Install (64-bit/32-bit) 即 转到 Microsoft 网站上的 Windows 7 Service Pack 2下载页面 。 选择与 Windows 7 版本相对应的 “下载 ”链接。 也可以 登录官网…

【LeetCode周赛】第 391 场周赛

目录 100263. 哈沙德数 简单100235. 换水问题 II 中等100266. 交替子数组计数 中等 100263. 哈沙德数 简单 100263. 哈沙德数 分析&#xff1a; 按题意将数的各个数位进行求和&#xff0c;计算即可。 代码&#xff1a; class Solution { public:int sumOfTheDigitsOfHarsha…

https安全性 带给im 消息加密的启发

大家好&#xff0c;我是蓝胖子&#xff0c;在之前# MYSQL 是如何保证binlog 和redo log同时提交的&#xff1f;这篇文章里&#xff0c;我们可以从mysql的设计中学会如何让两个服务的调用逻辑达到最终一致性&#xff0c;这也是分布式事务实现方式之一。今天来看看我们能够从http…

get和post的区别!

1.get请求一般是去取获取数据&#xff08;其实也可以提交&#xff0c;但常见的是获取数据&#xff09;&#xff1b; post请求一般是去提交数据。 2.get因为参数会放在url中&#xff0c;所以隐私性&#xff0c;安全性较差&#xff0c;请求的数据长度是有限制的&#xff0c; 不同…

【Qt 学习笔记】Day3 | 使用两种方式实现helloworld

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Day3 | 使用两种方式实现helloworld 文章编号&#xff1a;Qt 学习笔记…

【CTSDB数据集转换成YOLO格式】

CSTDB数据集介绍 CTSDB数据集 Dataset consists of 5998 traffic sign images of 58 categories. Each image is a zoomed view of single traffic sign. Annotations provide image properties (file_name, width, height) as well as traffic sign coordinates within imag…

移动硬盘怎么加密?移动硬盘加密软件有哪些?

移动硬盘是我们在工作中最常用的移动存储设备&#xff0c;为了保护数据安全&#xff0c;需要使用专业的移动硬盘加密软件加密保护。那么&#xff0c;移动硬盘加密软件有哪些&#xff1f; ​BitLocker BitLocker是Windows的磁盘加锁功能&#xff0c;可以用于加密保护移动硬盘中…

火焰烟雾AI识别检测算法---豌豆云

烟雾火焰AI识别算法是一项重要的火灾预防工具。近年来&#xff0c;火灾的发生频率和范围不断扩大&#xff0c;给人们和社会经济造成了巨大的损失&#xff0c;已成为一种普遍而破坏性极大的自然灾害。 火灾一旦爆发&#xff0c;火势迅速蔓延&#xff0c;烟雾浓度高&#xff0c;…

MySQL(常用函数、多表查询)

文章目录 1.数据库函数1.count函数案例答案count&#xff08;*&#xff09;与count&#xff08;列&#xff09;的区别 2.sum函数案例答案 3.avg函数案例答案 4.max/min函数案例答案 5.group by 分组统计案例答案 6.字符串相关函数演示练习 7.数学相关函数演示 8.日期相关函数演…

Linux系统使用Docker部署个人IT工具箱IT-Tools结合内网穿透实现公网访问

作为程序员&#xff0c;在日常工作中&#xff0c;需要借助一些工具来提高我们工作效率&#xff0c;IT-Tools是为开发人员度身打造的一套便捷在线工具。它提供全面功能&#xff0c;使开发者能以更高效方式完成任务。经由IT-Tools&#xff0c;开发人员能轻松应对各类技术挑战&…

算法刷题记录 Day28

算法刷题记录 Day28 Date: 2024.03.23 lc 45. 跳跃游戏II // 使用范围计算 class Solution { public:int jump(vector<int>& nums) {if(nums.size() 1)return 0;int pre_range 0;int range 0; // 当前覆盖范围int cur_steps 0; // 当前步数// 每次遍历当…

鸿蒙OS开发实例:【通知消息】

背景 HarmonyOS 论坛中有研发人员求助&#xff0c;反馈通知没有没有声音&#xff0c;因此在真机上验证了一下&#xff0c;果不其然&#xff0c;没有通知的提示音&#xff0c;后来解决办法也非常简单&#xff0c;在手机设置应用中&#xff0c;将可以打开的通知提示统统改为铃声…