2016-02-27 120 views
3

我是新的但不完全。我的意思是,我通過這個論壇安靜地尋找答案,但我從來沒有真正問過自己的問題。將數據發送到MySQL數據庫的Bash腳本

我在這裏尋找類似的問題以及在其他網站上,但沒有多少運氣。

讓我來描述這個問題。 我必須創建一個腳本,它將根據另一個腳本創建的文件將數據發送到MySQL數據庫。數據庫用於保存數據,例如MAC地址,標識號,名稱等。由另一個腳本創建的文件具有該數據,而我需要執行的操作是將所有數據傳輸到數據庫。我的問題是,這應該是自動發生的,而不是通過登錄到數據庫並手動執行命令的過程。

我不得不說我對MySQl數據庫沒有太多經驗,在解決這類問題時對我來說是有問題的。

我在bash中創建了一個小小的「腳本」,我希望能夠完成我上面描述的內容。我寫劇本的基礎是什麼我已經在互聯網上發現,和我的MySQL非常狹義的理解,我不能夠改善它,所以請不要太主觀:)

#!/bin/bash 

mysql -u root -p 

LOAD DATA INFILE '/home/kiot/Deskotp/Patryk/Imp0' 
INTO TABLE KIOT 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 

我總是試着去了解,我使用的代碼,所以文件Imp0看起來是這樣的:

"somedata", 
"somemoredata", 
"evenmoredata", 

當我執行的代碼(是的,我已經使它可執行)終端提示我輸入root用戶密碼數據庫,當我輸入它時,它什麼都不做。當我使用命令來顯示錶KIOT中的列時,我嘗試發送的數據不會顯示在那裏。

我很抱歉讓這段時間很長,但我試圖儘可能提供信息,以便每個人都能理解我的問題。

對於任何樂於助人的人,我真的很感激。 非常感謝:)

回答

0

這行#!/bin/bash位於腳本的頂部,它告訴程序加載程序在bash解釋器中運行腳本的其餘部分。因此,當您運行mysql -u root -p並登錄時,您正在運行的腳本將等待您從執行mysql程序返回,然後執行腳本的其餘部分。

它看起來像你需要使用here document。這裏有一個link,應該可以幫助你開始使用它。如果您正確實施,您的腳本應該可以正常工作

0

因爲它只有一個SQL命令在本地執行的,另一種可能性是使用-e開關:

mysql -u root -p -e "LOAD DATA INFILE...;" 

所面臨的挑戰,然後逃逸引號字符"'正確。

另請注意,-p提示爲密碼。要運行它完全無人值守的,你可以在命令行上提供密碼(沒有空間-pPASSWORD之間):

mysql -u root -pPASSWORD -e "LOAD..." 

這工作,但不建議(出於安全原因)。也許連接一個只授予LOAD DATA訪問權限的專用MySQL用戶(而不是root)。

相關問題