لم يتم العثور على الملف بعد تصدير MySQL
-
14-11-2019 - |
سؤال
أحتاج إلى تصدير البيانات من جدول إلى ملف 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