Shell脚本中执行sql语句操作

  这篇文章主要介绍了Shell脚本中执行sql语句操作mysql的5种方法,本文讲解了将SQL语句直接嵌入到shell脚本文件中、命令行调用单独的SQL文件、使用管道符调用SQL文件等方法,需要的朋友可以参考下

  对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本。本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考。对于脚本输出的结果美化,需要进一步完善和调整。以下为具体的示例及其方法。

1、将SQL语句直接嵌入到shell脚本文件中

--演示环境   [[email protected] ~]# more /etc/issue   CentOS release 5.9 (Final)   Kernel \r on an \m      [email protected][(none)]> show variables like ‘version‘;   +---------------+------------+   | Variable_name | Value      |   +---------------+------------+   | version       | 5.6.12-log |   +---------------+------------+      [[email protected] ~]# more shell_call_sql1.sh    #!/bin/bash   # Define log   TIMESTAMP=`date +%Y%m%d%H%M%S`   LOG=call_sql_${TIMESTAMP}.log   echo "Start execute sql statement at `date`." >>${LOG}      # execute sql stat   mysql -uroot -p123456 -e "   tee /tmp/temp.log   drop database if exists tempdb;   create database tempdb;   use tempdb   create table if not exists tb_tmp(id smallint,val varchar(20));   insert into tb_tmp values (1,‘jack‘),(2,‘robin‘),(3,‘mark‘);   select * from tb_tmp;   notee   quit"      echo -e "\n">>${LOG}   echo "below is output result.">>${LOG}   cat /tmp/temp.log>>${LOG}   echo "script executed successful.">>${LOG}   exit;      [[email protected] ~]# ./shell_call_sql1.sh    Logging to file ‘/tmp/temp.log‘   +------+-------+   | id   | val   |   +------+-------+   |    1 | jack  |   |    2 | robin |   |    3 | mark  |   +------+-------+   Outfile disabled.

2、命令行调用单独的SQL文件

[[email protected] ~]# more temp.sql    tee /tmp/temp.log   drop database if exists tempdb;   create database tempdb;   use tempdb   create table if not exists tb_tmp(id smallint,val varchar(20));   insert into tb_tmp values (1,‘jack‘),(2,‘robin‘),(3,‘mark‘);   select * from tb_tmp;   notee      [[email protected] ~]# mysql -uroot -p123456 -e "source /root/temp.sql"   Logging to file ‘/tmp/temp.log‘   +------+-------+   | id   | val   |   +------+-------+   |    1 | jack  |   |    2 | robin |   |    3 | mark  |   +------+-------+   Outfile disabled.

3、使用管道符调用SQL文件

[[email protected] ~]# mysql -uroot -p123456 </root/temp.sql   Logging to file ‘/tmp/temp.log‘   id      val   1       jack   2       robin   3       mark   Outfile disabled.      #使用管道符调用SQL文件以及输出日志   [[email protected] ~]# mysql -uroot -p123456 </root/temp.sql >/tmp/temp.log   [[email protected] ~]# more /tmp/temp.log   Logging to file ‘/tmp/temp.log‘   id      val   1       jack   2       robin   3       mark   Outfile disabled.

4、shell脚本中MySQL提示符下调用SQL

[[email protected] ~]# more shell_call_sql2.sh   #!/bin/bash   mysql -uroot -p123456 <<EOF   source /root/temp.sql;   select current_date();   delete from tempdb.tb_tmp where id=3;   select * from tempdb.tb_tmp where id=2;   EOF   exit;   [[email protected] ~]# ./shell_call_sql2.sh   Logging to file ‘/tmp/temp.log‘   id      val   1       jack   2       robin   3       mark   Outfile disabled.   current_date()   2014-10-14   id      val   2       robin

5、shell脚本中变量输入与输出

[[email protected] ~]# more shell_call_sql3.sh   #!/bin/bash   cmd="select count(*) from tempdb.tb_tmp"   cnt=$(mysql -uroot -p123456 -s -e "${cmd}")   echo "Current count is : ${cnt}"   exit    [[email protected] ~]# ./shell_call_sql3.sh    Warning: Using a password on the command line interface can be insecure.   Current count is : 3      [[email protected] ~]# echo "select count(*) from tempdb.tb_tmp"|mysql -uroot -p123456 -s   3      [[email protected] ~]# more shell_call_sql4.sh   #!/bin/bash   id=1   cmd="select count(*) from tempdb.tb_tmp where id=${id}"   cnt=$(mysql -uroot -p123456 -s -e "${cmd}")   echo "Current count is : ${cnt}"   exit       [[email protected] ~]# ./shell_call_sql4.sh    Current count is : 1

时间: 2024-10-13 22:04:10

Shell脚本中执行sql语句操作的相关文章

shell 脚本中执行SQL语句 -e &quot;...&quot;

/usr/local/mysql/bin/mysql -uroot -p123456 -e " use faygo source faygo.sql select * from devquit "

shell脚本中执行mysql语句的方法

方法一:使用文件标签EOF重定向的方法的: #!/bin/bash  user=root  pass=123456  db=mysql  tablename=user  mysql -s --line-numbers -f -u$user -p$pass -D $db --delimiter=";" -E<  --SELECT host,user from $tablename order by 1;  SELECT host,user from $tablename order

Shell脚本中执行mysql语句

对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的结果美化,需要进一步完善和调整.以下为具体的示例及其方法. 1.将SQL语句直接嵌入到shell脚本文件中 --演示环境 [[email protected] ~]# more /etc/issue CentOS release 5.9 (Final) Kernel \r on an \m   [e

如何在脚本中执行SQL语句并获得结果输出?

这里需要用到的工具叫做sqlcmd.exe, 它随SQL server的安装而安装. 该可执行程序的位置在: C:\Program Files\Microsoft SQL Server\xxx\Tools\Binn   其中xxx是你所安装的SQL Server的版本号. Version Number   SQL Server 2005 90   SQL Server 2008 100     在SQL 2014中它的位置在: C:\Program Files\Microsoft SQL Ser

在shell脚本中调用sql语句

查询员工信息 -S:静默登录 [[email protected] shells]$ cat shell1.sh #!/bin/bash #查询员工信息 sqlplus -S /nolog <<EOF conn scott/scott set feedback off set linesize 300 set pagesize 100 col empno for 99999 col ename for a12 col mgr for 9999 col hiredate for a20 col

shell 脚本中执行mysql语句

通过hash建表之后,表的数据量巨大2048,那怎么去验证表是否建成功呢? 逻辑生成表名这部分就不写了.只要能建表成功,这部分的脚本肯定是有的.那么怎么在shell中执行selec查询并返回呢 只要在脚本中添加 mysql -h [ip] -P [port] -u[username] -p[password] -e 'select count(1) from dbname.tablename;' 返回结果中自然会输出返回结果

shell脚本循环执行mysql语句

参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: 1).写个sql文件test.sql:use movie_recommendation;select distinct movie_id from T_user_movie_rating_map; 2).在终端输入mysql -uroot -p123456 -e < test.sql > movi

在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作

在myeclipse中配置DB Driver(数据库用MySql),并在myeclipse执行sql语句操作 MyEclipse6.5    ,  mysq驱动jar包为mysql-connector-java-5.1.8-bin.jar 在MyEclipse中添加hibernate支持时需要用到DB Driver所以需要配置 首先选择window-->Open Perspective-->Other 出现下图:选择MyEclipse Database Explore. 点击OK后出现如下画面

Shell脚本中执行mysql的几种方式(转)

Shell脚本中执行mysql的几种方式(转) 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的结果美化,需要进一步完善和调整.以下为具体的示例及其方法. 1.将SQL语句直接嵌入到shell脚本文件中 复制代码 代码如下: --演示环境   [[email protected] ~]# more /etc/issue   CentOS rele