سؤال

أحتاج إلى تصدير البيانات من جدول إلى ملف CSV.لدي البنية التالية (ليست طاولتي حقًا ولكن لأغراض العرض التوضيحي)

CREATE TABLE `mytable` (
  `id` int(11) DEFAULT NULL,
  `mycolumn` varchar(25) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

مع البيانات (حوالي 3000 سجل).الآن أريد تصدير بعض هذه السجلات (من برنامج نصي أقوم بتشغيله عبر cronjob)

SELECT * INTO OUTFILE '/tmp/mytable.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM mytable;

يظهر:

Query OK, 3 rows affected (0.00 sec)

ثم أفعل:

ls: cannot access /tmp/mytable.sql: No such file or directory

أين ملفي؟

هل كانت مفيدة؟

المحلول

عندما تستخدم INTO OUTFILE الأمر، فإنه يقوم بتصدير البيانات إلى المجلد المحلي للخادم وليس المجلد الذي تقوم بتنفيذ الاستعلام فيه.

مثال:أنت على جهاز الكمبيوتر الخاص بك (ip:192.168.0.100) وقمت بالاتصال بـ mysqlserver (ip:192.168.0.101) باستخدام الأمر mysql: mysql -uuser -h192.168.0.101 -A database.من خلال تنفيذ SELECT * INTO OUTFILE يتم حفظ الملف على mysqlserver (ip:192.168.0.101) وليس على جهاز الكمبيوتر الخاص بك (ip:192.168.0.100).

الآن، يمكنك استخدام برنامج نصي يقوم بإنشاء ملف CSV (في cronjob الخاص بك - يمكنك تحديد جميع البيانات وإنشاء الملف وإرساله عبر scp إلى الخادم الآخر).

أو - يمكنك أيضًا تركيب NFS عليه /shared/ وعندما تقوم بإنشاء الملف تلقائيًا، يكون الخادم الآخر لديه.

أو - يمكنك ببساطة تشغيل أمر mysql في برنامج نصي bash مثل هذا من خادمك الأول.

mysql -uroot test -B -e "select * from test.mytable;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > /tmp/filename.csv

مصدر: http://tlug.dnho.net/node/209

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top