Я бы хотел избежать использования mysqldump, поскольку он выводит данные в форме, удобной только для чтения mysql. CSV кажется более универсальным (достаточно одного файла на таблицу). Но если у mysqldump есть преимущества, я все слышу. Кроме того, мне бы хотелось что-нибудь, что можно запустить из командной строки (Linux). Если это сценарий mysql, были бы полезны указания, как это сделать.
mysql
command-line
csv
backup
Dreeves
источник
источник
Ответы:
Если вы можете справиться с таблицей за раз, и ваши данные не являются двоичными, используйте
-B
параметрmysql
команды. С этой опцией он будет генерировать файлы TSV (разделенные табуляцией), которые можно легко импортировать в Excel и т. Д.:% echo 'SELECT * FROM table' | mysql -B -uxxx -pyyy database
В качестве альтернативы, если у вас есть прямой доступ к файловой системе сервера, используйте
SELECT INTO OUTFILE
ее для создания реальных файлов CSV:SELECT * INTO OUTFILE 'table.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM table
источник
\. file.sql
выполняется чтение). Таким образом, в зависимости от вашей установки вы, вероятно, найдете его по адресу/var/lib/mysql/[db_name]/table.csv
В самом MySQL вы можете указать вывод CSV, например:
SELECT order_id,product_name,qty FROM orders INTO OUTFILE '/tmp/orders.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
С http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/
источник
Вы можете сбросить всю базу данных за один раз с
mysqldump's --tab
опцией. Вы указываете путь к каталогу, и он создает один.sql
файл сCREATE TABLE DROP IF EXISTS
синтаксисом и.txt
файл с содержимым, разделенным табуляцией. Для создания файлов, разделенных запятыми, вы можете использовать следующее:mysqldump --password --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --tab /tmp/path_to_dump/ database_name
Этот путь должен быть доступен для записи как пользователю mysql, так и пользователю, выполняющему команду, поэтому для простоты я рекомендую
chmod 777 /tmp/path_to_dump/
сначала.источник
mysqldump: You must use option --tab with --fields-...
GRANT FILE ON *.* TO 'user1'@'localhost';
- stackoverflow.com/a/15014385/1707015 . В моем случае мне пришлось взять/var/lib/mysql-files/
(вместо/tmp/
), установить пользователя на mysql: mysql и установить права на 777 - stackoverflow.com/a/32737616/1707015 .Опция select into outfile не сработает для меня, но следующий обходной способ передачи файла с разделителями табуляции через SED сработал:
mysql -uusername -ppassword -e "SELECT * from tablename" dbname | sed 's/\t/","/g;s/^/"/;s/$/"/' > /path/to/file/filename.csv
источник
t
замене буквы", "
на в выходном файле. Не совсем то, что мне было нужно.Вот простейшая команда для этого
mysql -h<hostname> -u<username> -p<password> -e 'select * from databaseName.tableNaame' | sed 's/\t/,/g' > output.csv
Если в значении столбца есть запятая, мы можем сгенерировать .tsv вместо .csv с помощью следующей команды
mysql -h<hostname> -u<username> -p<password> -e 'select * from databaseName.tableNaame' > output.csv
источник
mysql -hlocalhost -uroot -e 'select * from databaseName.tableNaame' | sed 's/\t/,/g' > /tmp/output.csv
`Если вам действительно нужна «резервная копия», вам также понадобится схема базы данных, например, определения таблиц, определения представлений, процедуры хранения и так далее. Резервная копия базы данных - это не просто данные.
Ценность формата mysqldump для резервного копирования в частности заключается в том, что его очень ЛЕГКО использовать для восстановления баз данных mysql. Резервная копия, которую нелегко восстановить, гораздо менее полезна. Если вы ищете способ надежного резервного копирования данных mysql, чтобы вы могли восстановить их на сервере mysql, я думаю, вам следует придерживаться инструмента mysqldump.
Mysql бесплатен и работает на многих различных платформах. Настроить новый сервер mysql, на который я могу восстановить данные, очень просто. Меня совсем не беспокоит то, что я не смогу настроить mysql, поэтому я могу выполнить восстановление.
Я бы гораздо больше беспокоился о нестандартном резервном копировании / восстановлении на основе хрупкого формата, такого как сбой csv / tsv. Вы уверены, что все ваши кавычки, запятые или табуляции, которые есть в ваших данных, будут правильно экранированы, а затем правильно проанализированы вашим инструментом восстановления?
Если вы ищете способ извлечения данных, посмотрите несколько других ответов.
источник
Вы можете использовать приведенный ниже сценарий, чтобы получить вывод в файлы csv. Один файл на таблицу с заголовками.
for tn in `mysql --batch --skip-page --skip-column-name --raw -uuser -ppassword -e"show tables from mydb"` do mysql -uuser -ppassword mydb -B -e "select * from \`$tn\`;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > $tn.csv done
user - ваше имя пользователя, password - это пароль, если вы не хотите продолжать вводить пароль для каждой таблицы, а mydb - это имя базы данных.
Объяснение сценария: Первое выражение в sed заменит табуляцию на ",", поэтому у вас есть поля, заключенные в двойные кавычки и разделенные запятыми. Вторая вставляет двойную кавычку в начале, а третья вставляет двойную кавычку в конце. И последний заботится о \ n.
источник
--skip-column-names
в моей версии mysqlПосмотрите mk-parallel-dump, который является частью неизменно полезного набора инструментов maatkit . Это может сбрасывать файлы, разделенные запятыми, с параметром --csv.
Это может сделать всю вашу базу данных без указания отдельных таблиц, и вы можете указать группы таблиц в таблице резервного набора.
Обратите внимание, что он также выгружает определения таблиц, представления и триггеры в отдельные файлы. Помимо обеспечения полной резервной копии в более универсальной форме, она также может быть немедленно восстановлена с помощью mk-parallel-restore.
источник
maatkit
кажется, это частьpercona toolkit
сейчас, но я не могу найти соответствующие инструменты.Двухстрочный ответ PowerShell:
# Store in variable $Global:csv = (mysql -uroot -p -hlocalhost -Ddatabase_name -B -e "SELECT * FROM some_table") ` | ConvertFrom-Csv -Delimiter "`t" # Out to csv $Global:csv | Export-Csv "C:\temp\file.csv" -NoTypeInformation
Бум-бата-бум
-D
= имя вашей базы данных-e
= запрос-B
= разделенный табуляциейисточник
Если вы хотите сбросить весь db как csv
#!/bin/bash host=hostname uname=username pass=password port=portnr db=db_name s3_url=s3://bxb2-anl-analyzed-pue2/bxb_ump/db_dump/ DATE=`date +%Y%m%d` rm -rf $DATE echo 'show tables' | mysql -B -h${host} -u${uname} -p${pass} -P${port} ${db} > tables.txt awk 'NR>1' tables.txt > tables_new.txt while IFS= read -r line do mkdir -p $DATE/$line echo "select * from $line" | mysql -B -h"${host}" -u"${uname}" -p"${pass}" -P"${port}" "${db}" > $DATE/$line/dump.tsv done < tables_new.txt touch $DATE/$DATE.fin rm -rf tables_new.txt tables.txt
источник