Shell脚本中施行sql语句操作mysql的5种办法

shell脚本导入数据文件到mysql内,shell脚本与mysql交互方法汇总,数据库,last,DBA经常需要将SQL语句封装到shell脚本,shell脚本下调用sql语句的几种方法

 

DBNAME=”test_db_test”  #数据库名称

7

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

CONNECT_MYSQL=”mysql -h 192.168.0.123 -uroot -p123456 test_database”

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

传闻结果集进行update更新操作

复制代码 代码如下:

12

转自:

WHERE trkid<6

复制代码 代码如下:

 

 

535522

–演暗指况 
[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. 

 

PASSWORD=””

89

复制代码 代码如下:

MYSQL_TABLE=test_table

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

atu_num

[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 

4

复制代码 代码如下:

374

复制代码 代码如下:

1

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

INNER JOIN (SELECT  af_user_id,af_tag_id,count(*) as cnt

[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. 

#!/bin/sh

PORT=”3306″

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

13

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

374

对此自动化运转,诸如备份恢复生机之类的,DBA平时索要将SQL语句封装到shell脚本。本文描述了在Linux情状下mysql数据库中,shell脚本下调用sql语句的两种办法,供大家参考。对于脚本输出的结果美化,须求进一步完善和调节。以下为具体的演示及其方法。

SQL=”SELECT * FROM TEST_TABLE”

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

方案3

    新建三个shell脚本,格式如下:

  1. #!/bin/bash  
  2. mysql -u* -h* -p* <<EOF  
  3.     Your SQL script.  
  4. EOF  

 

例如:

#!/bin/bash  
mysql -uroot  -ppassword <<EOF  
   use chbdb;  
    CREATE TABLE user (  
  id varchar(36) NOT NULL COMMENT '主键',  
  username varchar(50) NOT NULL COMMENT '用户名',  
  password varchar(50) NOT NULL COMMENT '用户密码',  
  createdate date NOT NULL COMMENT '创建时间',  
  age int(11) NOT NULL COMMENT '年龄',  
  PRIMARY KEY  (`id`)  
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户信息表';  
EOF

 

 

优点:

1>协助复杂的sql脚本

2>无需任何额外文件

缺点:

1> 表名、字段无法运用单引号,供给修改原有sql语句

2> 一旦中间出错,之后脚本就不会进行,举例:

万一第一张表已经存在,则会报出如下分外:

ERROR 1050 (42S01) at line 1 in file: ‘update.sql’: Table ‘user’ already
exists

接下来脚本退出,第二张表也就无法创建。

复制代码 代码如下:

 

#更新数据

UPDATE Track

[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 

 
[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 
 
#上述脚本演示中,作进行试探只用,对于出口的结果不是很规整友好,必要更为校正和加强。 

    ${SQL}

#创制数据库

0

[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. 

自然是利用mysqlimport啦.

对此自动化运行,诸如备份复苏之类的,DBA日常索要将SQL语句封装到shell脚本。本文描述了在Linux环境下MySQL数据库中,shell脚本下调用sql语句的两种艺术,供大家参谋。对于脚本输出的结果美化,供给更加的周全和调度。以下为实际的示范及其方法。

SET Track.is_show=MV.is_show

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

17

 

方案4

策画四个sql脚本,如update.sql,然后实行如下命令:

  1. mysql -uroot -ppassword < update.sql  

 

优点:协理复杂的sql脚本

缺点:

1> 一旦中间出错,之后脚本就不会进行,比方:

倘使第一张表已经存在,则会报出如下异常:

ERROR 1050 (42S01) at line 1 in file: ‘update.sql’: Table ‘user’ already
exists

下一场脚本退出,第二张表也就不能够创制。

 

 

世家领略在mysql命令行中使用source命令,即便中间出错,后续脚本也会继续推行,可是如上两种方法,均不只怕消除该难题,要是大家有好的建议,请过来,多谢。

 

对此自动化运行,诸如备份恢复生机之类的,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  
  
#如上脚本演示中,作投砾引珠只用,对于出口的结果不是很规整友好,要求特别创新和巩固。

 

你大概感兴趣的小说:

  • hbase
    shell基础和常用命令详解
  • shell
    命令行中操作HBase数据库实例详解
  • 募集的五十个Shell脚本小才干
  • hbase-shell批量命令施行脚本的艺术

{

#创建表

表1:am_favorites_4

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

MYSQL_DATABASE=test_database

复制代码 代码如下:

0

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

14

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

8

10

mysql -hhostname -Pport -uusername -ppassword
-e
相关mysql的sql语句,不用在mysql的提醒符下运转mysql,就能够以在shell中操作mysql的方法。

af_content_type

5

select_sql=”select * from
${TABLENAME}”

atu_tag_id

echo ${CONNECT_MYSQL} <<MYSQLEOF

#查询

INNER JOIN am_favorites_4 fav

### define constant

#去除数据

374

# content in test_table.sql like “123,abc,334; N,ddd,999”

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

原表新闻

09

转自:

0