2012-02-27 15 views
16

मुझे बैश का उपयोग करके एक पंक्ति में एक mysql क्वेरी निष्पादित करने की आवश्यकता है।शैल - एक पंक्ति प्रश्न

mysql database --user='root' --password='my-password' < query.file 

लेकिन < query.file के बजाय वह इस तरह का कच्चा क्वेरी का उपयोग करना चाहते हैं:

mysql database --user='root' --password='my-password' < UPDATE `database` SET `field1` = '1' WHERE `id` = 1111; 

कि संभव है

वह कुछ इस तरह होना चाहिए?

+1

नहीं, '<' bash –

+0

में फ़ाइल इनपुट इंगित करने के लिए उपयोग एक साइड नोट पर: मैं उस उपयोगकर्ता नाम और पासवर्ड को '.my.cnf' फ़ाइल या कस्टम एक में रखने का समर्थक हूं,' --defaults-file =/path/to/file.cnf' क्लीनर, पुन: प्रयोज्य, आदि – Wrikken

उत्तर

32

आप

mysql -u root -pmy_password -D DATABASENAME -e "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" > output.txt 

(> output.txt हिस्सा अनदेखा किया जा सकता का प्रयास किया था लेकिन, यह देखने के लिए कि क्या बयान देख द्वारा निष्पादित द्वारा दिया गया था उपयोगी होगा फ़ाइल पर।)

7

-e विकल्प का उपयोग करें:

$ mysql -e "UPDATE ..." 
+0

यह ऐसा दिखना चाहिए? 'mysql -e" MY_QUERY "--user = root --password = डेटाबेस-पासवर्ड'? – Cyclone

4

echo और एक पाइप का उपयोग करें:

echo "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" | mysql database --user='root' --password='my-password' 
+0

+1, हां, या 'mysql -e ... ' – Koerr

0

कमांड में अपना पासवर्ड लिखना आम तौर पर एक बुरा विचार है (लोग इसे आपके कंधे पर पढ़ सकते हैं, यह शायद आपके खोल इतिहास में संग्रहीत हो जाता है), लेकिन आप अपने क्रेडेंशियल्स को फाइल में डाल सकते हैं। फ़ाइल को . से शुरू होने वाला नाम देना इसे छुपाता है, जो कि और भी सुरक्षित है।

chmod 600 .db.conf 

फिर तो जैसे MySQL फोन:

mysql --defaults-extra-file=.db.conf -e "UPDATE database SET field1 = '1' WHERE id = 1111;" 

या:

# .db.conf 
[client] 
database=myDatabase 
user=myUserName 
password=myPassWord 

मेक सुनिश्चित करें कि केवल आप फ़ाइल पढ़ सकते हैं

echo "UPDATE database SET field1 = '1' WHERE id = 1111;" | mysql --defaults-extra-file=.db.conf 

ध्यान दें कि करने के लिए --defaults-extra-file जरूरतों पहला विकल्प बनें mysql को आपूर्ति की गई अन्यथा यह बाहर निकलती है।

0

मैं आमतौर पर ट्रिपल कम पसंद करता हूं क्योंकि इसके वाक्यविन्यास और दृष्टिकोण फ़ाइल रीडायरेक्ट के समान है। इतिहास में वापस जाने और क्वेरी

mysql database --user='root' --password='my-password' <<< "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111" 

इसे यहां स्ट्रिंग्स कहा जाता है। आप उनके बारे में अधिक जानकारी यहां देख सकते हैं http://linux.die.net/abs-guide/x15683.html

यह उपयोगी है जब आप कमांड को पाइप स्ट्रिंग करना चाहते हैं।

0

यदि आप इसे उत्पादन वातावरण पर चला रहे हैं, तो पहले अपने mybql shell में लॉगिन करना बेहतर होगा ताकि आपके डीबी विवरणों का खुलासा न किया जा सके।

एक बार खोल में लॉग इन करने के बाद, केवल ready.sql फ़ाइल का उपयोग क्यों न करें?

mysql -u उपयोगकर्ता -p

इसके बाद, अपने उपयोगकर्ता पासवर्ड दर्ज

अब आप खोल में प्रवेश किया है और आप यहां से सुरक्षित रूप से कमांड चलाने कर सकते हैं:

mysql> उपयोग डीबीएनएन mysql> SOURCE file.sql

इस प्रकार मैं अपने डेटाबेस के साथ कमांड लाइन पर अपने पी के लिए काम करता हूं लॉग इन में प्रकट नहीं होना चाहिए।