使用shell脚本将数据插入远程MYSQL数据库

时间:2010-10-10 13:32:59

标签: mysql bash scripting shell

我一直在尝试使用shell(bash)脚本将行插入REMOTE数据库,但我遇到了一些麻烦:(

该脚本用于将文件上载到服务器,获取URL,HASH和文件大小,连接到远程mysql数据库,并将数据插入现有表中。我已经开始工作,直到远程MYSQL数据库位。

看起来像这样:

#!/bin/bash

zxw=randomtext
description=randomtext2

for file in "$@"
 do
 echo -n *****
 ident= *****
 data= ****
 size=` ****
 hash=`****
mysql --host=randomhost --user=randomuser --password=randompass randomdb
insert into table (field1,field2,field3) values('http://www.site.com/$hash','$file','$size');
echo "done"
done

我在编程方面是一个总菜鸟,所以你好:P

无论如何,我添加了\以逃避括号,因为我遇到了错误。就像现在一样,脚本工作正常,直到连接到mysql数据库。它只是连接到mysql数据库而不执行insert命令(我甚至不知道insert命令是否可以在bash中工作)。

PS:我已经从命令行逐个尝试了两个mysql命令,虽然我定义了哈希/文件/大小但没有转义为“\”,但它们都有效。

无论如何,你们怎么想?是我试图做甚至可能吗?如果是这样的话?

任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:29)

insert语句必须发送到mysql,而不是shell脚本中的另一行,所以你需要把它变成“here here”。

mysql --host=randomhost --user=randomuser --password=randompass randomdb << EOF
insert into table (field1,field2,field3) values('http://www.site.com/$hash','$file','$size');
EOF

<< EOF表示除了EOF之外只包含{{1}}(开头没有空格)之外的所有内容,作为程序的标准输入。

答案 1 :(得分:11)

这可能不是您正在寻找的,但它是一种选择。

如果您想绕过在sh脚本中实际包含查询的烦恼,可以将查询保存为.sql文件(有时在查询非常复杂时很有用)。这可以使用您正在使用的任何语言的简单文件IO来完成。

然后你可以简单地在你的sh scrip中包含:

mysql -u youruser -p yourpass -h remoteHost < query.sql &

这称为批处理模式执行。 (可选)您可以在末尾包含“&”符号,以确保sh脚本的该行不会阻止。

此外,如果您担心多次输入相同的数据并且您的rdbms不一致,您应该探索MySql事务(提交,回滚等)。

答案 2 :(得分:5)

不要使用bash中的原始SQL; bash没有预先确定数据清理的合理设施。生成CSV文件并上传。