2010-10-10 86 views
15

我一直試圖得到一個shell(bash)的腳本插入一行到遠程數據庫,但我已經遇到了一些麻煩:(使用shell腳本將數據插入到遠程MySQL數據庫

的腳本是爲了將文件上傳到服務器,獲取URL,HASH和文件大小,連接到遠程mysql數據庫,然後將數據插入到現有表中,直到遠程MYSQL數據庫位才能正常工作。

它看起來像這樣:

#!/bin/bash 

zxw=randomtext 
description=randomtext2 

for file in "[email protected]" 
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數據庫,並沒有執行插入命令(我甚至不知道插入命令是否可以在bash中工作)。 PS:我已經從命令行一個一個地嘗試了兩個mysql命令,並且他們工作,儘管我定義了散列/文件/大小並且沒有轉義的「\」。

無論如何,你們認爲什麼?即時嘗試甚至可能做什麼?如果是這樣如何?

任何幫助,將不勝感激:)

回答

29

insert語句必須發送到mysql,而不是shell腳本中的另一行,所以您需要將其設置爲「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(開頭沒有空格)作爲標準輸入到程序的下一行之前的一切。

+0

得到這個錯誤:第22行:警告:這裏 - 第19行的文件由文件結尾分隔(想要'EOF')第23行:第23行:語法錯誤:文件意外結束 – lelouch 2010-10-10 13:59:59

+2

@lelouch - 你離開關閉上面第三行的「EOF」。實施所有解決方案非常重要,而不僅僅是上半年。 – 2010-10-10 14:02:04

+0

哼哈哈,我清楚地在mysql行中添加了<< EOF,並且在插入一行之後在另一個新行中添加了另一個EOF。任何想法什麼是錯的? – lelouch 2010-10-10 14:10:57

5

不要使用原始的SQL語句從慶典; bash沒有提前清理數據的合理設施。生成一個CSV文件並上傳。

+0

它意味着完全自動化,許多文件都要經過這個過程。如果我使用CSV文件或其他東西,是不是會導致重複輸入相同數據的可能性? - >請原諒我可能的無知! – lelouch 2010-10-10 13:40:28

+0

如果您需要某個字段或某個字段集合在整個表格中唯一,那麼您應該創建一個唯一索引。 – 2010-10-10 14:10:32

+1

我想補充說,堆棧上的另一個答案表示不使用csv文件。如果您連接到遠程MySQL數據庫,那麼很難在本地生成csv。你必須想出一些方法來遠程生成csv,然後將其轉移到本地目錄。另一個答案建議管道。那它是哪一個?我們用csvs還是不用? – obesechicken13 2012-09-04 18:15:39

11

這可能不是你正在尋找的東西,但它是一個選項。

如果你想繞過實際上包括在sh腳本查詢的煩惱,你可以將查詢保存爲.sql文件(有用有時查詢的時候確實是一個大而複雜的)。這可以通過使用任何語言的簡單文件IO來完成。

然後,您只需在您的SH紙條是這樣的:

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

這被稱爲批處理模式執行。或者,您可以在末尾包括&符號,以確保sh腳本的該行不會被阻止。另外,如果您擔心多次輸入相同的數據並且您的rdbms不一致,您應該探索MySql事務(提交,回滾等)。

+1

這個答案適用於我。真的很乾淨的輸出。 – obesechicken13 2012-09-04 18:17:43

相關問題