it-source

'mysqldump'를 사용하여 CSV 형식의 모든 테이블 덤프

criticalcode 2022. 12. 19. 21:24
반응형

'mysqldump'를 사용하여 CSV 형식의 모든 테이블 덤프

MySQL의 모든 테이블을 CSV 형식으로 덤프해야 합니다.

를 사용하여 명령어가 있습니까?mysqldumpCSV 형식의 모든 테이블에 대해 모든 행을 출력할 수 있습니까?

먼저, 한 표에 대한 답을 드릴 수 있습니다.

이 모든 것의 문제점은INTO OUTFILE또는--tab=tmpfile(그리고-T/path/to/directory )의 답변은 MySQL 서버와 동일한 서버에서 mysqldump를 실행하고 이러한 접근권을 보유해야 한다는 것입니다.

제 해결책은 단순히mysql(없음) mysqldump)와-B파라미터, SELECT 스테이트먼트의 인라인화-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" "password" "folder" "email" "8" "mariana" "xxxxxxxxxx" "mariana" "3" "paramesign" "xxxxxxxxxxxxxxxxxxxx" "mkobylecki@squaredesign.com" "4" "medziak" "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "Amos", "9", "Annabel", "xxxxxxxxxxxxxxxxxx", "Annabel", "11", "브랜드아버지와 아들", "xxxxxxxxxxxxxxxxxxxx", "BrandfrandfathersAndsons", "12", "xxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxnet@yoMama.com"

를 추가합니다.> 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위의 제1부에서 작성한 긴 명령어를 삽입하지만, 당신의 tablename은 다음 명령어로 대체하십시오.$tb대신.

이 명령어는 /path/to/directory table_name.sqltable_name 두 개의 파일을 만듭니다.txt를 클릭합니다.

SQL 파일에는 테이블 생성 스키마가 포함되며 txt 파일에는 쉼표로 구분된 필드가 포함된 mytable 테이블의 레코드가 포함됩니다.

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

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;

이제 다른 기술을 사용하여 여러 테이블에 대해 이 명령을 반복할 수 있습니다.자세한 내용은 이쪽:

mysqldumpCSV에 의한 것입니다.

--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`
   Fields in the output file are enclosed by the given

그리고.

--lines-terminated-by

  • \r
  • \n
  • \r\n

당연히 테이블마다 개별적으로 myqldump해야 합니다.

모든 테이블 이름을 텍스트 파일로 모을 것을 제안합니다.그런 다음 mysqldump를 실행하는 모든 테이블을 반복합니다.한 번에 10개의 테이블을 덤프 및 gzip하는 스크립트를 다음에 나타냅니다.

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

이것은 나에게 있어서 효과가 있었다.

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

또는 특정 테이블만 덤프하는 경우:

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' 실행 시 이 문을 실행할 수 없습니다.

다른 사용자도 이 문제가 있었던 것 같습니다.mysqldump 출력을 CSV 파일로 변환하기 위한 간단한 Python 스크립트가 있습니다.

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

또한 dbForge Studio for MySQL의 Data Export 도구를 사용하여 이 작업을 수행할 수도 있습니다.

일부 또는 모든 테이블을 선택하여 CSV 형식으로 내보낼 수 있습니다.

언급URL : https://stackoverflow.com/questions/12040816/dump-all-tables-in-csv-format-using-mysqldump

반응형