shell 执行sql语句

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

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

复制代码代码如下:


--演示环境  
[root@SZDB ~]# more /etc/issue  
CentOS release 5.9 (Final)  
Kernel \r on an \m  
root@localhost[(none)]> show variables like 'version';  
+---------------+------------+  
| Variable_name | Value      |  
+---------------+------------+  
| version       | 5.6.12-log |  
+---------------+------------+  
[root@SZDB ~]# 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;  
  
[root@SZDB ~]# ./shell_call_sql1.sh   
Logging to file '/tmp/temp.log'  
+------+-------+  
| id   | val   |  
+------+-------+  
|    1 | jack  |  
|    2 | robin |  
|    3 | mark  |  
+------+-------+  
Outfile disabled.  

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

复制代码代码如下:


[root@SZDB ~]# 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  
  
[root@SZDB ~]# 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文件

复制代码代码如下:


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

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

复制代码代码如下:


[root@SZDB ~]# 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;  
[root@SZDB ~]# ./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脚本中变量输入与输出

复制代码代码如下:


[root@SZDB ~]# 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   
[root@SZDB ~]# ./shell_call_sql3.sh   
Warning: Using a password on the command line interface can be insecure.  
Current count is : 3  
  
[root@SZDB ~]# echo "select count(*) from tempdb.tb_tmp"|mysql -uroot -p123456 -s  
3  
  
[root@SZDB ~]# 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   
  
[root@SZDB ~]# ./shell_call_sql4.sh   
Current count is : 1  
 

6、指定数据库执行 sql

amabri 数据库:

#mysql -uroot -proot -Dambari -e "show tables; " >> /tmp/temp.log

 
参考:https://www.cnblogs.com/dearxixi/p/6825117.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Shell执行SQL语句可以通过以下步骤实现: 1. 在Shell脚本中使用mysql命令连接到数据库。 2. 编写SQL语句并将其存储在一个变量中。 3. 使用mysql命令执行SQL语句并将结果存储在一个变量中。 4. 处理结果并输出。 例如,以下是一个简单的Shell脚本,用于查询数据库中的数据: ``` #!/bin/bash # 连接到数据库 mysql -u username -p password -h hostname database_name << EOF # 编写SQL语句 SELECT * FROM table_name; EOF ``` 在上面的脚本中,我们使用了mysql命令连接到数据库,并使用EOF标记来指示Shell脚本中的SQL语句。我们可以在EOF标记之间编写任何SQL语句,然后使用mysql命令执行它们。 执行脚本后,我们将看到查询结果输出到终端。我们可以使用其他Shell命令来处理结果并进行其他操作。 ### 回答2: Shell执行SQL语句需要使用命令行工具,比如sqlite3、mysql、psql等。这些工具都支持在命令行中执行SQL语句。 首先,我们需要安装对应数据库的命令行工具。例如,如果使用sqlite数据库,可以通过以下命令进行安装: ```sh sudo apt-get install sqlite3 ``` 接着,我们可以通过以下命令进入sqlite3命令行: ```sh sqlite3 database.db ``` 其中,database.db是我们要操作的数据库名称。 在sqlite3命令行中,我们可以使用以下命令执行SQL语句: ```sql sqlite> SELECT * FROM table; ``` 其中,SELECT * FROM table表示执行查询语句,查询数据库中的table表格。 如果需要在Shell脚本中执行SQL语句,可以将SQL语句保存在一个文件中,然后通过命令行工具执行该文件。例如,以下示例可以用于执行包含SQL语句的文件: ```sh sqlite3 database.db < sql_file.sql ``` 其中,sql_file.sql是保存SQL语句的文件名。 总之,通过命令行工具执行SQL语句Shell中操作数据库最常见的方式。我们只需根据需要选择相应的命令行工具,并按照上述方法执行SQL语句即可。 ### 回答3: Shell执行SQL语句是指在Shell命令行界面下,通过命令执行SQL语句,与数据库进行交互。这种方式通常被用来进行一些简单的数据库操作,比如查询数据、修改数据等。 在Linux或Unix系统中,可以使用命令行工具如mysql、psql等来执行SQL语句。这些工具通常是数据库管理系统自带的,或者可以从第三方软件源中下载安装。 在使用命令行工具执行SQL语句时,一般需要指定数据库名称、用户名和密码等连接参数。例如,在MySQL中,可以使用以下命令连接到数据库: ``` mysql -h localhost -u root -p mydatabase ``` 其中,“-h”指定数据库主机地址,“-u”指定用户名,“-p”指定密码,“mydatabase”是要连接的数据库名称。 连接成功后,可以执行SQL语句。例如,查询表中的所有记录可以使用如下命令: ``` select * from mytable; ``` 执行SQL语句后,会显示查询结果。如果需要将查询结果保存到文件中,可以使用输出重定向符“>”将结果重定向到指定文件中: ``` select * from mytable > result.txt; ``` 此外,在Shell脚本中也可以执行SQL语句,通过在脚本中调用命令行工具来实现。例如,在Bash脚本中执行MySQL语句可以使用以下方式: ``` #!/bin/bash result=$(mysql -u root -p -e "select count(*) from mytable" mydatabase) echo $result ``` 其中,“-e”选项表示执行SQL语句,“$()”可以将命令结果赋值给变量,“echo”命令可以输出结果。 总的来说,Shell执行SQL语句是一种简便快捷的数据库操作方式,可以满足一些简单的需求。但对于较为复杂的操作,还需要使用专业的数据库管理工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值