Подтвердить что ты не робот

mysqldump в формате CSV

Мне нужно сбросить все таблицы в MySQL в формате CSV.

Есть ли команда, использующая mysqldump для вывода каждой строки для каждой таблицы в формате CSV?

4b9b3361

Ответ 1

Во-первых, я могу дать вам ответ за одну таблицу:

Проблема со всеми этими INTO OUTFILE или --tab=tmpfile-T/path/to/directory) заключается в том, что для этого требуется запустить mysqldump на том же сервере, что и сервер MySQL, и иметь эти права доступа.

Мое решение состояло в том, чтобы просто использовать mysql (НЕ mysqldump) с параметром -B оператор SELECT с помощью -e, затем -e вывод ASCII с помощью sed и завершить с помощью CSV, включая строку поля заголовка:

Пример:

 mysql -B -u username -p password database -h dbhost -e "SELECT * FROM accounts;" \
 | sed "s/\"/\"\"/g;s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\n//g"

"id", "login", "password", "folder", "email", "8", "mariana", "xxxxxxxxxx", "mariana", "" 3 "," squaredesign "," xxxxxxxxxxxxxxxxx "," squaredesign "," [email protected] "" 4 "," miedziak "," xxxxxxxxxx "," miedziak "," [email protected] "" 5 "," Sarko "," xxxxxxxxx "," Sarko "," "" 6 "," Logitrans Poland "," xxxxxxxxxxxxxx "," LogitransPoland "," "" 7 "," Amos "," xxxxxxxxxxxxxxxxxxxx "," Amos "," "" 9 "," Annabelle "," xxxxxxxxxxxxxxxx ", "Annabelle", "" "11", "Brandfathers and Sons", "xxxxxxxxxxxxxxxxx", "BrandfathersAndSons", "" "12", "Imagine Group", "xxxxxxxxxxxxxxxx", "ImagineGroup", "" "13", " EduSquare.pl "," xxxxxxxxxxxxxxxxx "," EduSquare.pl "," "101", "tmp", "xxxxxxxxxxxxxxxxxxxxx", "_", "[email protected]"

Добавьте a > outfile.csv в конце этой > outfile.csv, чтобы получить CSV файл для этой таблицы.

Далее, получите список ВСЕХ ваших таблиц с

mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"

Оттуда, это только еще один шаг, чтобы сделать цикл, например. в оболочке bash для перебора этих таблиц:

 for tb in $(mysql -u username -ppassword dbname -sN -e "SHOW TABLES;"); do
     echo .....;
 done

Между do и ; done ; done вставьте длинную команду, которую я написал в части 1 выше, но вместо этого замените ваше имя таблицы на $tb.

Ответ 2

Эта команда создаст 2 файла в каталоге /path/to/directory table_name.sql и table_name.txt.

Файл sql будет содержать схему создания таблицы, а файл txt будет содержать записи таблицы mytable с полями, разделенными запятой.

mysqldump -u username -p -t  -T/path/to/directory dbname table_name --fields-terminated-by=',' 

Ответ 3

mysqldump имеет опции форматирования CSV

--fields-terminated-by=name
                  Fields in the output file are terminated by the given
--lines-terminated-by=name
                  Lines in the output file are terminated by the given

name должен содержать одно из следующих

`--fields-terminated-by`

\t или "\""

`--fields-enclosed-by=name`

Поля в выходном файле заключаются в заданный

и

--lines-terminated-by

  • \r
  • \n
  • \r\n

Естественно, вы должны mysqldump каждую таблицу отдельно

Я предлагаю вам собрать все имена таблиц в текстовом файле. Затем, итерация по всем таблицам, использующим mysqldump. Вот script, который будет выгружать и gzip по 10 таблиц за раз:

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQLSTMT="SELECT CONCAT(table_schema,'.',table_name)"
SQLSTMT="${SQLSTMT} FROM information_schema.tables WHERE table_schema NOT IN "
SQLSTMT="${SQLSTMT} ('information_schema','performance_schema','mysql')"
mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" > /tmp/DBTB.txt
COMMIT_COUNT=0
COMMIT_LIMIT=10
TARGET_FOLDER=/path/to/csv/files
for DBTB in `cat /tmp/DBTB.txt`
do
    DB=`echo "${DBTB}" | sed 's/\./ /g' | awk '{print $1}'`
    TB=`echo "${DBTB}" | sed 's/\./ /g' | awk '{print $2}'`
    DUMPFILE=${DB}-${TB}.csv.gz
    mysqldump ${MYSQL_CONN} -T ${TARGET_FOLDER} --fields-terminated-by="," --fields-enclosed-by="\"" --lines-terminated-by="\r\n" ${DB} ${TB} | gzip > ${DUMPFILE}
    (( COMMIT_COUNT++ ))
    if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
    then
        COMMIT_COUNT=0
        wait
    fi
done
if [ ${COMMIT_COUNT} -gt 0 ]
then
    wait
fi

Дайте ему попробовать!!!

Ответ 4

Похоже, что и у других была эта проблема, теперь есть простой python script для преобразования вывода mysqldump в файлы csv.

wget https://raw.githubusercontent.com/jamesmishra/mysqldump-to-csv/master/mysqldump_to_csv.py
mysqldump -u username -p --host=rdshostname database table | python mysqldump_to_csv.py > table.csv

Ответ 5

Если вы используете MySQL или MariaDB, самый простой и эффективный способ выгрузить CSV для одной таблицы -

SELECT customer_id, firstname, surname INTO OUTFILE '/exportdata/customers.txt'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM customers;

Теперь вы можете использовать другие методы, чтобы повторить эту команду для нескольких таблиц. Подробнее смотрите здесь:

Ответ 6

Это хорошо сработало для меня:

 mysqldump DBNAME --fields-terminated-by ',' \
 --fields-enclosed-by '"' --fields-escaped-by '\' \
 --no-create-info --tab /var/lib/mysql-files/

Или, если вы хотите сбросить только TABLENAME:

 mysqldump DBNAME TABLENAME --fields-terminated-by ',' \
 --fields-enclosed-by '"' --fields-escaped-by '\' \
 --no-create-info --tab /var/lib/mysql-files/

Я дам в /var/lib/mysql-files/ чтобы избежать этой ошибки:

mysqldump: получена ошибка: 1290: сервер MySQL работает с параметром --secure-file-priv, поэтому он не может выполнить этот оператор при выполнении команды "SELECT INTO OUTFILE"

Ответ 7

Вы также можете сделать это, используя инструмент Data Export в dbForge Studio for MySQL.

Он позволит вам выбрать некоторые или все таблицы и экспортировать их в формат CSV.

Ответ 8

Это много возни, просто чтобы экспортировать как csv, почему бы вам просто не установить Dbeaver из описания ссылки здесь

Он охватывает большинство популярных баз данных, кроме nosql, и может экспортировать в различные форматы, включая csv и sql.

Ответ 9

Вы можете использовать простой метод more, инструмент csvdump, чтобы распечатать удаленный файл csv из mysql: https://github.com/bobby96333/csvdump