2013-02-07 16 views
5

पर मौजूद नहीं है, मैं CSV फ़ाइल में तालिका को डंप करने के लिए एक बहुत ही सरल शैल स्क्रिप्ट लिख रहा हूं।MySQL OUTFILE क्वेरी शिकायत करती है कि "फ़ाइल पहले से मौजूद है" लेकिन फ़ाइल सभी

day=`/bin/date +'%Y-%m-%d'` 
file="/tmp/table-$day.csv" 
rm $file 
query="SELECT * FROM table INTO OUTFILE '$file' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\n'" 
echo "$query" | mysql <connection_parameters> 

मैं rm $file में डाल सुनिश्चित करें कि फ़ाइल क्वेरी के निष्पादन से पहले अस्तित्व में नहीं है बनाने के लिए: यहाँ यह का हिस्सा है।

rm: cannot remove `/tmp/table-2013-02-08.csv': No such file or directory 
ERROR 1086 (HY000) at line 1: File '/tmp/table-2013-02-08.csv' already exists 

मैं मशीन में कहीं भी outfile नहीं मिल सकता है:

हालांकि, जब मैं स्क्रिप्ट को निष्पादित, मैं परस्पर विरोधी संदेशों मिलता है।

तो क्या गलत है ..?

धन्यवाद।

+1

क्या/tmp मौजूद है? क्या आपके पास लेखन पहुंच है? मुझे आश्चर्य है कि MySQL शेल स्क्रिप्ट को निष्पादित कर रहे हैं, इसके सापेक्ष इसके बजाय/mysql/tmp/लिखने की कोशिश कर रहा है। –

+0

धन्यवाद याकूब।/tmp मौजूद है और लिखने योग्य है। क्वेरी को मैन्युअल रूप से निष्पादित करना सफलतापूर्वक चलाता है। –

+0

मैंने देखा कि क्वेरी को मैन्युअल रूप से निष्पादित करना पहली बार सफल होता है, लेकिन दूसरी बार नहीं ... –

उत्तर

8

मुझे जवाब मिला है।

आउटफाइल मेरी MySQL क्लाइंट की मशीन के बजाय, MySQL सर्वर पर फ़ाइल बनाता है।

+2

+1। पूर्वदर्शी में, यह स्पष्ट है क्योंकि क्वेरी सर्वर पर चलती है ... लेकिन मैंने इसे नहीं देखा। मैं मूल प्रश्न देख रहा था और सोच रहा था कि आपको किसी भी तरह की अनुमति समस्या या कुछ था। यह मुझे जवाब देखने के लिए मुस्कुराया। –

0

चेक आप इस में/etc/पासवर्ड

mysql अगर: एक्स: 27: 27: MariaDB सर्वर:/var/lib/mysql:/sbin/nologin

परिवर्तन खोल करने के लिए/bin/इसके बजाय bash