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(开头没有空格)作为程序的标准输入.
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事务(提交,回滚等).