Shell脚本中执行sql语句操作mysql

转载 2017年02月15日 10:56:44

转自:http://www.jb51.net/article/56944.htm

对于自动化运维,诸如备份恢复之类的,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   
 
 

下面附上通过shell命令行非交互式的操作数据库的方法:

mysql -hhostname -Pport -uusername -ppassword -e 相关mysql的sql语句,不用在mysql的提示符下运行mysql,即可以在shell中操作mysql的方法。

#!/bin/bash

HOSTNAME="192.168.111.84"  #数据库信息

PORT="3306"

USERNAME="root"

PASSWORD=""


DBNAME="test_db_test"  #数据库名称

TABLENAME="test_table_test" #数据库中表的名称


#创建数据库

create_db_sql="create database IF NOT EXISTS ${DBNAME}"

mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "${create_db_sql}"


#创建表

create_table_sql="create table IF NOT EXISTS ${TABLENAME} ( name varchar(20), id int(11) default 0 )"

mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${create_table_sql}"


#插入数据

insert_sql="insert into ${TABLENAME} values('billchen',2)"

mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${insert_sql}"


#查询

select_sql="select * from ${TABLENAME}"

mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}"


#更新数据

update_sql="update ${TABLENAME} set id=3"

mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${update_sql}"

mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}"


#删除数据

delete_sql="delete from ${TABLENAME}"

mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${delete_sql}"

mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}"

Shell脚本中执行sql语句,操作mysql数据库

对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本。本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考。对于脚本输出的...

Shell脚本中执行sql语句操作mysql的5种方法

Shell脚本中执行sql语句操作mysql的5种方法 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-10-31 我要评论 这篇文章主要介绍了Shell脚本中执行s...

Shell脚本中执行sql语句操作mysql

转自:http://www.jb51.net/article/56944.htm 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本。本文描述了在Linux环境下my...

shell脚本执行mysql语句, 该怎么玩?

有时候, 要批量执行sql语句, 怎么搞起呢?  在不会shell之前, 我这么搞:  先写一大堆命令, 一起复制到mysq中l执行, 呵呵哒, 虽能笑掉大牙, 但偶尔会有用。 很低级。下面, 我们一...
  • stpeace
  • stpeace
  • 2017年10月24日 21:01
  • 508

shell脚本中导入mysql数据&&执行mysql语句

http://blog.csdn.net/white__cat/article/details/27836481 前言 在线下做mysql数据分析的时候,会遇到执行shell脚本里导入...

shell脚本中导入mysql数据&&执行mysql语句

前言 在线下做mysql数据分析的时候,会遇到执行shell脚本里导入sql文件到mysql数据库里或者连接mysql执行指定sql语句的情况,这里介绍一下我采用的方法 导入sql...

shell脚本中导入mysql数据&&执行mysql语句

前言 在线下做mysql数据分析的时候,会遇到执行shell脚本里导入sql文件到mysql数据库里或者连接mysql执行指定sql语句的情况,这里介绍一下我采用的方法 导入sql...

《懒人Shell脚本》之六——一键构造待采集批量sql语句

1、需求采集任务构造入库。实现200多个网站的标题、时间、内容等信息的采集信息配置,并插入mysql中。 2、实现步骤步骤1:人工实现Excel表格配置。定义好唯一索引,如第一列的序号。好处: 1...

Shell脚本基础6-if语句练习-文件测试操作

前面一篇文章介绍了if-then语句,在前面文章我忘记了提醒一下,if语句最后那个fi是一个结束语句,告诉shell脚本,遇到了fi就表示if语句的结束,估计fi是final的意思吧。这里,通过文件的...

shell脚本连接、读写、操作mysql数据库实例

本文介绍了如何在shell中读写mysql数据库。主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Shell脚本中执行sql语句操作mysql
举报原因:
原因补充:

(最多只允许输入30个字)