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

linux,编写,shell,脚本,操作,数据库,执行,sql · 浏览次数 : 0

小编点评

## 使用shell脚本操作数据库 以下是编写shell脚本操作数据库执行sqlHughman关注IP属地: 北京0.0762020.03.20 09:02:13字数 295阅读 1,036修改数据库数据 的步骤: **1. 创建配置文件** ``` # test_sql.properties db_name="db01" net_speeds="500" net_requests="test.t1" mysql_address="10.127.0.1" mysql_database_name="db_test" mysql_user="user01" mysql_password="123456" mysql_engine="mysqlshell" ``` **2. 创建脚本** ```bash #!/bin/bash # Start time start_time=$(date +%Y-%m-%d %H:%M:%S) # Source parameters from config file echo "------ test_sql.properties start------" >> test_sql_sh.log source ./test_sql.properties # Loop through each line in config file while read -r line; do # Execute SQL command sql="${line}" echo "Sql: ${sql}" >> test_sql_sh.log # Run the SQL command result=$(mysql_engine -h${mysql_address} -u${mysql_user} -p${mysql_password} -D${mysql_database_name} -e"${sql}" | grep -v "ERROR") # Check for errors if [[ $? -ne 0 ]]; then echo "Sql: Modify db data unsuccessfully, error code: ${result}" >> test_sql_sh.log else echo "Sql: Modify db data successfully, and insert db id is: ${result}" >> test_sql_sh.log fi done # End time end_time=$(date +\"%Y-%m-%d %H:%M:%S\"") # Log end time echo "【Execute the script end】, end time is: \" ${end_time} >> test_sql_sh.log" >> test_sql_sh.log # Exit script echo -e "\\" >> test_sql_sh.log echo -e "\\" >> test_sql_sh.log exit 0 ``` **3. 使用脚本** 1. 将`test_sql.properties`复制到数据库中。 2. 运行脚本: `./test_sql.sh` **4. 查看日志** 1. 访问`test_sql_sh.log`文件查看数据库操作的日志。 2. 可以使用两种方式访问日志: - 使用`cat`命令直接打开文件:`cat test_sql_sh.log` - 使用`grep`命令筛选日志内容:`grep "sql: Modify db data successfully," test_sql_sh.log`

正文

Linux—编写shell脚本操作数据库执行sql

HughmanIP属地: 北京
0.0762020.03.20 09:02:13字数 295阅读 1,036

修改数据库数据

  在升级应用时,我们常常会遇到升级数据库的问题,这就涉及到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脚本操作数据库执行sql

Linux—编写shell脚本操作数据库执行sql Hughman关注IP属地: 北京 0.0762020.03.20 09:02:13字数 295阅读 1,036 修改数据库数据 在升级应用时,我们常常会遇到升级数据库的问题,这就涉及到sql脚本的编写。 一般我们会通过写sql脚本,然后将xxx.

[转帖]Linux shell 单引号和双引号

https://www.cnblogs.com/airoot/p/15324883.html 在编写shell脚本的时候经常会用到引号,有些时候却老是忘记单引号和双引号之间的区别,所以就整理一下供以后脑子不好使了的时候前来复习一下。首先说下他们的共同点: 好像就只有一个,就是它们都可以用来界定一个字

[转帖]Linux—微服务启停shell脚本编写模板

https://www.jianshu.com/p/1e1080a39dc5 run.sh #!/bin/bash if [ -s java.pid ] then echo "重复启动,退出" exit 0 fi jar_file=`ls *.jar | head -n 1` echo $jar_f

[转帖]Linux中执行shell脚本的4种方法总结

https://www.jb51.net/article/53924.htm 这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下 bash shell 脚本的方法有多种,现在作个小结。假设我们编写好的shell脚本的文件

[转帖]学习如何编写 Shell 脚本(基础篇)

https://juejin.cn/post/6930013333454061575 前言 如果仅仅会 Linux 一些命令,其实已经可以让你在平时的工作中游刃有余了。但如果你还会编写 Shell 脚本(尤其是前端工程师),它会令你“添光加彩”。如果本文对你有所帮助,请点个👍 👍 👍 吧。 S

[转帖][Docker] Windows里运行docker执行sh文件报错 $'\r': command not found

https://www.cnblogs.com/MasterMonkInTemple/p/16358366.html 出现这样的错误,是因为Shell脚本在Windows系统编写时,每行结尾是\r\n,而在Linux系统中行每行结尾是\n,所以在Linux系统中运行脚本时,会认为\r是一个字符,导致

[转帖]Linux中./configure、make、make install命令详解

简单来说,make 是编译,make install 是安装。 总结:linux编译安装中configure、make和make install各自的作用 • ./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。

[转帖]Linux中最全shell命令&常用注意事项

在编辑linux脚本中不断的会用到复杂的脚本编辑,写文章记录。 Linux命令大全(手册) – 真正好用的Linux命令在线查询网站 目录 推荐书籍: Linux常用命令 Linux 常用命令 在linux shell脚本中root切换到普通用户执行脚本 Linux—shell中$(( ))、$(

[转帖]linux 批量修改文件格式

将Windows上的shell脚本拷贝到Linux时,脚本的编码格式还是docs,需要改成unix才可执行,在文件不多的情况下可以直接手动更改,但是在脚本文件比较多的时候,手动改起来就太麻烦了,此时就可以使用shell命令批量来进行更改。 批量更改脚本如下: for i in `find . -ty

[转帖]Linux Shell编程 循环语法

https://zhuanlan.zhihu.com/ for循环 for 循环是固定循环,也就是在循环时已经知道需要进行几次循环。有时也把 for 循环称为计数循环。语法: for 变量 in 值1 值2 值3… do 程序 done 在这种语法中,for 循环的次数取决于 in 后面值的个数(以