bash

2011-05-27 9 views
25

से mysql प्रश्नों को कैसे फ़ीड करें मैं एक बैश स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो एक MySQL उपयोगकर्ता और डेटाबेस बनाता है लेकिन मुझे एसएसएल को mysql में फ़ीड करने का कोई तरीका नहीं मिल रहा है, मैं इस प्रारूप के साथ प्रयास कर रहा हूं:bash

mysql --host=localhost --user=user --password=password < echo "CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'jakdJxct8W'; 
CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; 
GRANT ALL PRIVILEGES ON 'testuser_dev' . * TO 'testuser'@'localhost'; 
CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; 
GRANT ALL PRIVILEGES ON 'testuser_qa' . * TO 'testuser'@'localhost';" 

कैसे प्रश्नों के साथ mysql को खिलाने के लिए:

mysql < echo "query" 

लेकिन वह काम नहीं कर रहा, नीचे उदाहरण देखें?

+0

प्रश्न से संबंधित नहीं है, लेकिन आप भी एक .my में अपने मेजबान, उपयोगकर्ता और पासवर्ड सेट करके लिखने का बहुत सा बचा सकता है .cnf फ़ाइल – Ken

+0

टिप – Tirithen

उत्तर

31

इस तरह प्रयास करें:

echo "select 1" | mysql 
5

क्या आपने mysql -e query को आजमाया है?

19

एक here document इस तरह उपयोग करके देखें:

mysql --host=localhost --user=user --password=password << END 

CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'jakdJxct8W'; 
CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; 
GRANT ALL PRIVILEGES ON 'testuser_dev' . * TO 'testuser'@'localhost'; 
CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; 
GRANT ALL PRIVILEGES ON 'testuser_qa' . * TO 'testuser'@'localhost'; 

END 

वैकल्पिक रूप से आप सभी पाठ फ़ाइल में आदेश जगह है और इसे चलाने:

mysql --host=localhost --user=user --password=password < commands.sql 
+2

+1 के लिए धन्यवाद, मैं यह भी उल्लेख करना चाहूंगा कि यदि क्वेरी बैकिक्स का उपयोग करती है, तो आपको उद्घाटन लेबल को उद्धृत करने की आवश्यकता है: 'mysql <<' END'' – adlawson

+0

धन्यवाद, बहुत उपयोगी! – KGCybeX

21
mysql --batch --silent -e 'SHOW TABLES'; 

बैच और चुप काम करता है, तो आप की योजना बना रहे हैं पाइप आउटपुट

+0

प्रति mysql दस्तावेज़ - बैच चुपचाप का तात्पर्य है। – cerd

+0

@cerd - बिना सेंसर के कॉलम हेडर – Ken

8

आपके प्रयास का काम नहीं करने का कारण था क्योंकि < फ़ाइल नाम की अपेक्षा करता है और आपने इसे एक स्ट्रिंग खिलाया है। आप

echo "YOURQUERYSTRINGHERE">tmpfile 
mysql --host=localhost --user=user --password=password dbname <tmpfile 

mysql --host=localhost --user=user --password=password -e "QUERY" dbname 

काम कर सकते हैं केन के सुझाव की तरह कुछ करने के लिए होता है, लेकिन यदि आप अपने प्रश्न में बैश चर का उपयोग करने की कोशिश आप पैरामीटर विस्तार की बेईमानी से गिर सकता है। उदाहरण के लिए

QUERY="select * from $MYTABLE WHERE name=\"[email protected]\";" 
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname 

जो आप उम्मीद करते हैं वह नहीं कर सकता है। एक विकल्प का उपयोग

echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname 

जो काम करता है क्वेरी स्ट्रिंग के हवाले से उचित है या नहीं है। कुत्ताबेन द्वारा सुझाए गए अनुसार "यहां" दस्तावेज़ एक और विकल्प है।

+0

ओपी की त्रुटि का अच्छा स्पष्टीकरण दिखाता है। दूसरों के जवाब इकट्ठा करने और चेतावनी समझाओ के लिए धन्यवाद! –

0

एक bash स्क्रिप्ट में बड़े प्रश्नों के लिए, आप की कोशिश कर सकते हैं:

read -d '' SQL_QUERY_1 << EOF 

SELECT prod.id as id, prod.title as title, comp.name as company, pho.id as photo_id, pho.image as photo_name 
FROM products as prod 
JOIN accounts as comp 
ON comp.id = prod.account_id 
JOIN photos as pho 
ON pho.id = prod.featured_photo_id; 

EOF 

echo ${SQL_QUERY_1} | mysql