Я бы хотел избежать mysqldump, поскольку он выводит в форме, которая удобна только для чтения mysql. CSV выглядит более универсальным (один файл на столе в порядке). Но если есть преимущества для mysqldump, я все уши. Кроме того, мне бы хотелось что-то, что я могу запустить из командной строки (linux). Если это mysql script, указатели на то, как сделать такую вещь, будут полезны.
Дамп базы данных mysql в резервную копию открытого текста (CSV) из командной строки
Ответ 1
Если вы можете справиться с таблицей по времени, а ваши данные не являются бинарными, используйте параметр -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
Ответ 2
В самой 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/
Ответ 3
Вы можете сбросить всю базу данных за один раз с помощью опции mysqldump --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/
.
Ответ 4
Выбор в опции outfile не будет работать для меня, но приведенный ниже обходной путь файла с разделителями табуляции через SED:
mysql -uusername -ppassword -e "SELECT * from tablename" dbname | sed 's/\t/","/g;s/^/"/;s/$/"/' > /path/to/file/filename.csv
Ответ 5
Вот простейшая команда для него
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
Ответ 6
Если вам действительно нужна "Резервная копия", вам также нужна схема базы данных, например, определения таблиц, определения представлений, процедуры хранения и т.д. Резервное копирование базы данных - это не только данные.
Значение формата mysqldump для резервного копирования заключается в том, что очень просто использовать его для восстановления баз данных mysql. Резервная копия, которая не легко восстанавливается, гораздо менее полезна. Если вы ищете способ надежного резервного копирования данных mysql, чтобы вы могли восстановить сервер mysql, тогда я думаю, что вы должны придерживаться средства mysqldump.
Mysql является бесплатным и работает на разных платформах. Настройка нового сервера mysql, который я могу восстановить, проста. Я совсем не беспокоюсь о невозможности установки mysql, поэтому я могу сделать восстановление.
Я бы гораздо больше беспокоился о пользовательском резервном копировании/восстановлении на основе хрупкого формата, такого как csv/tsv. Вы уверены, что все ваши кавычки, запятые или вкладки, которые находятся в ваших данных, будут правильно экранированы, а затем правильно обработаны вашим инструментом восстановления?
Если вы ищете метод для извлечения данных, см. несколько других ответов.
Ответ 7
Вы можете использовать ниже script, чтобы получить вывод в файлы 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
пользователь - это ваше имя пользователя, пароль - это пароль, если вы не хотите вводить пароль для каждой таблицы, а mydb - это имя базы данных.
Объяснение script: первое выражение в sed заменит вкладки на ",", поэтому у вас есть поля, заключенные в двойные кавычки и разделенные запятыми. Второй вставить двойную кавычку в начале, а третий - вставить двойную кавычку в конце. И последний заботится о\n.
Ответ 8
Отъезд mk-parallel-dump, который является частью постоянно полезного набор инструментов maatkit. Это может сбрасывать файлы с разделителями-запятыми с опцией -csv.
Это может сделать весь ваш db без указания отдельных таблиц, и вы можете указать группы таблиц в таблице резервного набора.
Обратите внимание, что он также удаляет определения таблиц, представления и триггеры в отдельные файлы. Кроме того, предоставляя полную резервную копию в более универсальной форме, она также немедленно восстанавливается с помощью mk-parallel-restore
Ответ 9
Ответ на две строки 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
= разделитель табуляции
Ответ 10
Если вы хотите сбросить всю базу данных как 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
Ответ 11
Если вы хотите сбросить всю базу данных как 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