MySQL ، المشكلات في outfile ، حل سهل أو طريقة أفضل للقيام بذلك؟
-
04-10-2019 - |
سؤال
في الوقت الحالي ، أكتب نصًا بسيطًا في KSH يجب أن يأخذ بعض الأوتار من ديسيبل وإدراجها على القشرة. هذه هي الطريقة التي يجب أن تعمل بها:
- الاستعلام عن DB لجميع البيانات
- قم بتصديرها إلى ملف نصي
- استخدام أوعية لإظهار الأعمدة المختلفة
المشكلة هي أن حقلين من الجدول الذي أتعلم فيه يحتويان على جمل. من الواضح ، "يعتقد" أن "المساحات البيضاء بين الكلمات المختلفة هي فواصل بين الأعمدة ، لذلك توصلت إلى الحل التالي:
- حدد * في حقول "الإخراج" الخارجية التي تم إنهاءها بواسطة "، من الجدول
- باستخدام AWK لسرد النتائج (من الواضح أن الفاصل الآن هو "،")
ولكن هنا لدي مشكلة أخرى ، على الرغم من أنني
- منحت امتياز الملف لمستخدم MySQL الذي أستخدمه
- أعطيت إلى MySQL 777 على الدليل حيث يجب أن تكتب
على الرغم من أنني أتلقى الخطأ التالي:
"المسار": لا يمكن إنشاء/الكتابة إلى ملف "ملف" (Errcode: 13)
لقد شعرت بالإحباط من هذا ، لقد بدأت في تصفح الويب للعثور على إجابة ، ووجدت "غير مكتمل". في موقع معين يقترحون:
جذر تشون: الجذر /TMP
Chmod 1777 /TMP
/etc/init.d/mysqld start
اعتقدت أنه إذا كان هذا الحل يعمل بشكل جيد على /TMP ، فلا ينبغي أن تكون هناك أي مشكلة في أي دليل آخر أختاره. من الواضح أنني كنت مخطئا تماما :). إذا كان المسار الذي أعطيه لخيار outfile هو /tmp /'file' ، فلا توجد مشكلة ، فإن أي مسار آخر يعيد لي الخطأ السابق. هل وجدت "حل" للمشكلة؟ حسنًا ، نعم ولكن لاستخدام هذا البرنامج النصي ، يجب على شخص ما أن يلي:
- لديك مستخدم MySQL مع امتياز الملف
- لديك حقوق "RM" ملف في /TMP (ملف الإخراج من MySQL مؤقت)
ولا أعتقد أن هذا حلو ولطيف. إذن ما أسألك؟ ما يلي:
- كيف يمكنني إجبار MySQL على كتابة ملف أينما أريد؟
- هل لديك حل أكثر قابلية للتطبيق و "حلوة" من أن تقترح علي؟
آه ، أنا أستخدم Ubuntu 10.4. شكرا لك على أي مساعدة.
المحلول
الحل الأفضل هو إعادة توجيه الإخراج:
mysql --default-character-set=utf8 -uuser -ppass -s -e "SELECT * FROM mytable;" > results.txt
مانع -s
اختيار:
-s, --silent Be more silent. Print results with a tab as separator,
each row on new line.