Как получить дамп MySQL с разделителями табуляции с удаленного хоста? - PullRequest
5 голосов
/ 19 октября 2011

Команда mysqldump, подобная следующей:

mysqldump -u<username> -p<password> -h<remote_db_host> -T<target_directory> <db_name> --fields-terminated-by=,

запишет два файла для каждой таблицы (один - схема, другой - данные таблицы CSV). Чтобы получить вывод CSV, вы должны указать целевой каталог (с -T). Когда -T передается в mysqldump, он записывает данные в файловую систему сервера, на котором работает mysqld, а НЕ в систему, в которой вводится команда. Есть ли простой способ выгрузить файлы CSV из удаленной системы?

Примечание: я знаком с использованием простого mysqldump и обработкой вывода STDOUT, но я не знаю способа получения данных таблицы CSV таким способом без какого-либо существенного анализа. В этом случае я буду использовать опцию -X и дампа xml.

Ответы [ 3 ]

11 голосов
/ 03 мая 2012
mysql -h remote_host -e "SELECT * FROM my_schema.my_table" --batch --silent > my_file.csv
2 голосов
/ 02 марта 2013

Я хочу добавить в ответ кодовщика. Это сработало, но для моих нужд понадобилось около 30 минут настройки.

Мой веб-сервер использует centos 6 / cpanel, а флаги и последовательность, которые кодер использовал выше, у меня не работали, и мне пришлось переставить и использовать разные флаги и т. Д.

Кроме того, я использовал это для локального дампа файлов, он не только полезен для удаленных БД, потому что у меня было слишком много проблем с правами пользователя selinux и mysql для команд SELECT INTO OUTFILE и т. Д.

Что сработало на моем сервере Centos + Cpanel

mysql -B -s -uUSERNAME -pPASSWORD < query.sql > /path/to/myfile.txt

Предостережения

Без имен столбцов

Я не могу получить имена столбцов, чтобы они появлялись вверху. Я попытался добавить флаг:

--column-names

но это не имело значения. Я все еще застрял на этом. Я сейчас добавляю его в файл после обработки.

Выбор базы данных

По какой-то причине я не смог включить имя базы данных в командную строку. Я пробовал с

-D databasename

в командной строке, но я продолжал получать ошибки разрешения, поэтому я закончил, используя следующую верхнюю часть моего запроса.sql:

USE database_name;
1 голос
/ 18 октября 2012

Во многих системах MySQL работает как отдельный пользователь (например, пользователь "mysql"), и ваш mysqldump завершится ошибкой, если у пользователя MySQL нет прав на запись в каталог дампа - не имеет значения, какие у вас есть собственные права на запись.находятся в этом каталоге.Изменение каталога (по крайней мере временно) на доступный для записи (777) часто решает проблему экспорта.

...