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

lel*_*uch 15 mysql bash shell scripting

我一直在尝试使用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
Run Code Online (Sandbox Code Playgroud)

我是编程的总菜鸟所以你是:P

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

PS:我已经从命令行逐个尝试了两个mysql命令,但是他们工作了,虽然我定义了hash/file/size并且没有转义"\".

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

任何帮助,将不胜感激 :)

Pau*_*lin 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
Run Code Online (Sandbox Code Playgroud)

<< EOF意味着在下一行之前包含所有内容,但是EOF(开头没有空格)作为程序的标准输入.

  • @lelouch - 你在第三行中省略了"EOF".实施所有解决方案非常重要,而不仅仅是上半年. (2认同)

kma*_*ks2 11

这可能不是您正在寻找的,但它是一个选项.

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

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

mysql -u youruser -p yourpass -h remoteHost < query.sql &
Run Code Online (Sandbox Code Playgroud)

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

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


Ign*_*ams 5

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