mysql
命令行客戶端有幾種不同的方法在命令行上提供查詢。它可以與--execute/-e
標誌一樣接受他們:
mysql --execute 'SELECT * FROM tbl' --user=user dbname
或者也可以通過管道或文件重定向從STDIN
接受他們:
echo 'SELECT * FROM tbl' | mysql --user=user dbname
# Or:
mysql --user=user dbname < file_containing_queries.sql
對於Capistrano的應用程序,通過--execute
執行他們應該很好地工作。您可以使用分號分隔多個語句,但一定要正確引用所有內容。全套SQL語句應該是一個帶引號的字符串。
# In a Capistrano task:
execute "mysql -e'SELECT * FROM tbl1; SELECT * FROM tbl2;' -u <username> -p <password> -h <server ip> <database name>"
這可能是一個良好的使用Ruby的替代%q/%Q
的報價,以避免引用字符串文字中的SQL語句中的問題:
execute %q{mysql -e"SELECT * FROM tbl1 WHERE col='value'; SELECT * FROM tbl2 WHERE col='value';" -u user -ppasswd -hhost dbname}
當通過在Capistrano的SSH啓動mysql
客戶端,它看來,客戶端在服務器上加載並接受語句,但以交互方式提供它們會相當困難。由於這個原因,MySQL提供--execute
和STDIN
選項,所以最好使用它們。
你期望能夠交互地使用它,還是隻有一個命令來執行? '-e'SELECT * FROM tbl''命令行選項將運行一個。 – 2014-11-04 14:00:03
@MichaelBerkowski我有幾個SQL查詢,我想運行,這些SQL查詢將被硬編碼在任務文件中。你認爲它掛起的事實意味着它已經準備好接受命令了嗎? – 2014-11-04 14:02:40
看起來像它,但我不知道它是有用的。我剛剛建立了一個SSH連接,並啓動了一個mysql提示符,如'ssh localhost mysql -ppasswd dbname',但沒有返回輸出,但是我的命令沒有完成。然後我輸入'SELECT COUNT(*)FROM tbl;',直到我做了'ctl-d',仍然沒有輸出。之後,顯示我的查詢結果,並返回我的提示。 – 2014-11-04 14:06:25