MySQL ، المشكلات في outfile ، حل سهل أو طريقة أفضل للقيام بذلك؟

StackOverflow https://stackoverflow.com/questions/2896691

  •  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.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top