Как получить дамп MySQL с разделителями табуляции с удаленного хоста?
Команда 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 ответа
mysql -h remote_host -e "SELECT * FROM my_schema.my_table" --batch --silent > my_file.csv
Я хочу добавить к ответу Codeman. Это сработало, но потребовалось около 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
в командной строке, но я продолжал получать ошибки разрешения, поэтому я закончил, используя следующую верхнюю часть моего query.sql:
USE database_name;
Во многих системах MySQL запускается как отдельный пользователь (например, пользователь "mysql"), и ваш mysqldump завершится ошибкой, если у пользователя MySQL нет прав на запись в каталог дампа - не имеет значения, какие у вас есть собственные права на запись. каталог. Изменение вашего каталога (по крайней мере временно) на доступный для записи (777) часто решит вашу проблему экспорта.