[转帖]Linux—编写shell脚本操作数据库执行sql
Linux—编写shell脚本操作数据库执行sql

修改数据库数据
在升级应用时,我们常常会遇到升级数据库的问题,这就涉及到sql脚本的编写。
一般我们会通过写sql脚本,然后将xxx.sql脚本放到数据库中进行source xxx.sql
执行。本篇文章,我们可以通过写shell脚本来执行数据库操作。
配置文件
创建 test_sql.properties 作为shell脚本的外部配置参数修改:
[andya@liunx01 sql_sh]$ vim test_sql.properties
# set parameters start
# 1 db name
dbName="db01"
# 2 the valueof net speeds and requests
netMaxSpeeds=500
netRequests="test.t1"
# 3 database info
## mysql address
MYSQL_ADDRESS="10.127.0.1"
## database name
MYSQL_DATABASE_NAME="db_test"
## 5.3 bdoc connect mysql user name
MYSQL_USER="user01"
## 5.4 bdoc connect mysql user password
MYSQL_PASSWD="123456"
## 5.5 mysql engine
DATABASE_ENGINE=mysql
shell脚本
创建shell脚本test_sql.sh
[andya@liunx01 sql_sh]$ vim test_sql.sh
#!/bin/bash
starttime=$(date +%Y-%m-%d\ %H:%M:%S)
echo "【Start to execute the script】, start time is: " $starttime >> test_sql_sh.log
# 1 read parameters
# ===================================================================
echo "------ test_sql.properties start------" >> test_sql_sh.log
source ./test_sql.properties
echo "Parameters: cat test_sql.properties" >> test_sql_sh.log
while read line
do
echo $line >> test_sql_sh.log ;
done < test_sql.properties
echo "------ test_sql.properties end------" >> test_sql_sh.log
# =================================================================
# 2 update database
# ========================
testSql="
SET @dbId=(SELECT id FROM ${MYSQL_DATABASE_NAME}.\`test_tb01\` WHERE \`NAME\` = \"${dbName}\");
INSERT INTO ${MYSQL_DATABASE_NAME}.\`test_tb02\` (\`NAME\`, \`DB_ID\` ,\`MAX_SPEEDS\`, \`NET_REQUESTS\`) VALUES ('${dbName}', @dbId, '${netMaxSpeeds}', '${netRequests}');
"
echo -e "\nSql: add hbase sql is: "${testSql} >> test_sql_sh.log
id=$(${DATABASE_ENGINE} -h${MYSQL_ADDRESS} -u${MYSQL_USER} -p${MYSQL_PASSWD} -D ${MYSQL_DATABASE_NAME} -e "${testSql}")
echo "Sql: Modify db data successfully, and insert db id is: "${id} >> test_sql_sh.log
endtime=`date +"%Y-%m-%d %H:%M:%S"`
echo "【Execute the script end】, end time is: " ${endtime} >> test_sql_sh.log
echo -e "\n" >> test_sql_sh.log
exit 0
脚本执行
./test_sql.sh
并且可以查看到输出日志test_sql_sh.log
另一种连接方式(待研究)
#!/bin/sh
mysql_engine=`which mysql`
${mysql_engine} -uroot -p123456 <<EOF 1>>test.log
use db01;
select * from tb01 where id = 4;
EOF
exit 0
其中:
1)1>>test.log
是重定向标准输出到test.log中,当然,也尝试去掉1,也是可以输出。
2)我们也可以使用2 >/dev/null
重定向来屏蔽错误信息,2即为标准错误输出,对于linux来说/dev/null
即为空设备,输入进去的数据即为丢弃。
3)EOF表示后续输入作为shell的输入,直到下一个EOF出现,再返回主进程shell中。
[转帖]Linux—编写shell脚本操作数据库执行sql的更多相关文章
- Linux编写Shell脚本
——<Linux就该这么学>笔记Shell脚本命令的工作方式有两种 交互式: 用户每输入一条命令就立即执行 批处理: 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中 ...
- Shell 脚本操作数据库实战
安装mariadb 数据库 (默认没有密码,直接mysql即可进入数据库管理控制台) yum install mariadb mariadb-server mariadb-libs -y syste ...
- Linux编写Shell脚本入门
一. 一般编写shell需要分3个步骤 1. 新建一个脚本文件,并编写程序 vi hello.sh #!/bin/bash #注释 #输出 printf '%s\n' "Hello Worl ...
- linux脚本错误: line *: [: missing `]',linux编写shell脚本时的注意点
转载:https://www.cnblogs.com/bovenson/p/4548079.html 关于shell的一些注意点,粘贴自拉钩教育精选评论:测试开发核心技术 46 讲-->第6讲 ...
- shell脚本操作数据库
#!/bin/bash HOST_NAME="localhost" PORT=3306 USERNAME="root" PASSWORD="root& ...
- Shell脚本备份数据库
使用crontab 定时备份数据库 1. 编辑crontab 规则,定时执行脚本 2. 在my.cnf 文件中加 [mysqldump] user=root password=密码 3.编写shell ...
- [转帖]编写shell脚本所需的语法和示例
编写shell脚本所需的语法和示例 https://blog.csdn.net/CSDN___LYY/article/details/100584638 在说什么是shell脚本之前,先说说什么是sh ...
- linux 的基本操作(编写shell 脚本)
终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...
- shell 脚本操作informix数据库
shell 脚本操作informix数据库的简单模板: functionName(){ dbaccess << ! database 库名; sql语句; ! } 栗子1:更新数据 fun ...
- Linux中编写Shell脚本
目录 Shell Shell脚本的执行 Shell脚本编写规范 Shell 中的变量 变量的算术运算 双小括号 (()) 数值运算命令的用法 let 运算命令的用法 expr 命令的用法 br 命令 ...
随机推荐
- spring-mvc 系列:域对象共享数据
目录 一.使用ServletAPI向request域对象共享数据 二.使用ModelAndView向request域对象共享数据 三.使用Model向request域对象共享数据 四.使用Map向re ...
- 大道如青天,协程来通信,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang通道channel的使用EP14
众所周知,Go lang的作用域相对严格,数据之间的通信往往要依靠参数的传递,但如果想在多个协程任务中间做数据通信,就需要通道(channel)的参与,我们可以把数据封装成一个对象,然后把这个对象的指 ...
- 关于GO语言,这篇文章讲的很明白
摘要:本文从Go的语法,类型系统,编码风格,语言工具,编码工具和使用案例等几方面对Go语言进行了学习和探讨. Go语言发布之后,很多公司特别是云厂商也开始用Go语言重构产品的基础架构,而且很多企业都是 ...
- 探索开源工作流引擎Azkaban在MRS中的实践
摘要:本文主要介绍如何在华为云上从0-1搭建azkaban并指导用户如何提交作业至MRS. 本文分享自华为云社区<开源工作流引擎Azkaban在MRS中的实践>,作者:啊喔YeYe. 环境 ...
- 训练千亿参数模型的法宝,昇腾CANN异构计算架构来了~
摘要:盘古的训练以「昇腾AI处理器」为基座,同时借助了「CANN 异构计算架构」,让硬件算力得以充分释放,大大缩短了训练时间! 2021年4月,"华为云盘古大模型"一炮走红AI人工 ...
- Open vSwitch系列之十 调用北向接口下发流表
Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...
- Vue2--入门学习
看了慕课网的教学视频,觉得挺不错的,在此做个随堂记录,有兴趣的可以去看视频 vue版本:2.5 文档链接:https://v2.cn.vuejs.org/v2/guide/installation.h ...
- SELinux 入门 pt.1
哈喽大家好,我是咸鱼 文章<SELinux 导致 Keepalived 检测脚本无法执行>以[keepalived 无法执行检测脚本]为案例向大家简单介绍了关于 SELinux 的一些概念 ...
- 【3rd Party】nlohmann json 基础用法
参考链接:Here 什么是nlohman json ? nlohman json GitHub - nlohmann/json: JSON for Modern C++ 是一个为现代C++(C++11 ...
- 2021 VDC :vivo 互联网服务亿级用户的技术架构演进之路
关注公众号[vivo互联网技术]--回复[2021VDC]获取大会PPT. 2021年12月16日,vivo 开发者大会圆满落幕.在互联网技术专场中,来自vivo 互联网技术的6位研发专家,从基础架构 ...