'mysqldump'를 사용하여 CSV 형식의 모든 테이블 덤프
MySQL의 모든 테이블을 CSV 형식으로 덤프해야 합니다.
를 사용하여 명령어가 있습니까?mysqldump
CSV 형식의 모든 테이블에 대해 모든 행을 출력할 수 있습니까?
먼저, 한 표에 대한 답을 드릴 수 있습니다.
이 모든 것의 문제점은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.sql과 table_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;
이제 다른 기술을 사용하여 여러 테이블에 대해 이 명령을 반복할 수 있습니다.자세한 내용은 이쪽:
- https://mariadb.com/kb/en/the-mariadb-library/select-into-outfile/
- https://dev.mysql.com/doc/refman/5.7/en/select-into.html
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`
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
'it-source' 카테고리의 다른 글
MySQL(MariaDB) 업데이트 트랜잭션에서 '영향을 받는 0행'이 반환되는 이유는 무엇입니까? (0) | 2022.12.29 |
---|---|
(테스트뿐만 아니라) 예외인 것처럼 numpy 경고를 수신하려면 어떻게 해야 합니까? (0) | 2022.12.29 |
vue에서 sass 변수를 재정의하려면 어떻게 해야 합니까? (0) | 2022.12.19 |
엔티티 프레임워크 MariaDb 문자열 날짜 문제 (0) | 2022.12.19 |
동일한 서버에서 MySQL 데이터베이스를 복제하는 방법 (0) | 2022.12.19 |