programing

mysql dump - 일부 테이블 데이터를 제외합니다.

goodsources 2022. 10. 20. 21:21
반응형

mysql dump - 일부 테이블 데이터를 제외합니다.

mysql 덤프를 사용하여 데이터베이스 구조 전체를 내보내는 것이 가능하지만 특정 테이블 데이터를 내보내는 것은 불가능합니다.

데이터베이스에 200개의 테이블이 있다고 가정하면 200개의 테이블 구조를 모두 내보내고 싶지만 5개의 특정 테이블의 데이터는 무시하고 싶습니다.

이것이 가능하다면 어떻게 해야 할까요?

이것은 수출을 창출할 것이다.모든 테이블의 구조와 table_name을 제외한 모든 테이블의 데이터를 포함하는 sql

mysqldump --ignore-table=db_name.table_name db_name > export.sql
mysqldump --no-data db_name table_name >> export.sql

AmitP의 솔루션은 이미 훌륭하다고 생각합니다.이 솔루션을 더욱 개선하기 위해서는 먼저 모든 테이블(구조)을 작성한 후 '제외'를 제외한 데이터를 채우는 것이 타당하다고 생각합니다.

mysqldump --no-data db_name > export.sql
mysqldump --no-create-info --ignore-table=db_name.table_name db_name >> export.sql

는, 「」를 .--ignore-table디렉티브의 빈도가 높아집니다(2nc 명령어).mysqldump 도움말을 참조해 주세요.

--ignore-table=name   Do not dump the specified table. To specify more than one
                      table to ignore, use the directive multiple times, once
                      for each table.  Each table must be specified with both
                      database and table names, e.g.,
                     --ignore-table=database.table

저는 새로운 유저이기 때문에, 투표나 코멘트를 할 수 있는 충분한 평판을 가지고 있지 않기 때문에, 답변으로서 이것을 공유합니다.

@kantholy는 확실히 가장 좋은 답을 가지고 있다.

@는 모든 및 @AmitP를 덤프합니다data a까지file에 a, 그리고 a, 그리고 a.drop/create table 마지막 스테이트먼트입니다.결과 파일에서는 다음 작업을 수행해야 합니다.import불필요한 데이터를 모두 파기할 수 있습니다.

@kantholy의 메서드는 먼저 모든 구조를 덤프하고 다음으로 덤프합니다.data★★★★★★★★★★★★★★★★의 경우table이것오는 것을 말합니다.importimport 것.data않는 것 - 은 매우 의 "-"가 있는 경우입니다.data이치노

요약하자면, 가장 효율적인 답변은 다음과 같습니다.

mysqldump --no-data db_name > export.sql
mysqldump --no-create-info --ignore-table=db_name.table_name1 [--ignore-table=db_name.table_name2, ...] db_name >> export.sql

mysqldump 문서에 따르면:

mysqldump name_of_db --ignore-table=name_of_db.name_of_table

»mysqldump에서는, 「」10.1 「Maria」를 사용할 수 .DB★★★★★--ignore-table-data:

mysqldump --ignore-table-data="db_name.table" db_name > export.sql

" " 를 합니다.--ignore-table-data★★★★

mysqldump --ignore-table-data="db_name.table_1" --ignore-table-data="db_name.table_2" db_name > export.sql

MariaDB 문서:

--syslog-table-data=name

지정된 테이블 데이터를 덤프하지 마십시오(구조물만).무시할 테이블을 여러 개 지정하려면 각 테이블에 대해 디렉티브를 1회씩 여러 번 사용합니다.각 테이블에는 데이터베이스 이름과 테이블 이름을 모두 지정해야 합니다.MariaDB 10.1.46, MariaDB 10.2.33, MariaDB 10.3.24, MariaDB 10.4.14 및 MariaDB 10.5.3부터.--no-data도 참조해 주세요.

기출문제는 되지 않습니다.AUTO_INCREMENT특정 데이터를 테이블로 내보내는 방법을 표시하지 않고 구조를 내보내는 경우.

더 나아가려면 다음 작업을 수행해야 합니다.

1/구조물의 수출

mysqldump --no-data db_name | sed 's/ AUTO_INCREMENT=[0-9]*\b//g' > export-structure.sql

2/ 데이터만 내보내고 일부 테이블은 무시합니다.

mysqldump --no-create-info --ignore-table=db_name.table_name1 [--ignore-table=db_name.table_name2, ...] db_name >> export-data.sql

3/ 특정 데이터를 한 테이블로 내보내기

mysqldump --no-create-info --tables table_name --where="id not in ('1', '2', ...)" > export-table_name-data.sql

저는 이 기능을--skip-opt리셋 옵션AUTO_INCREMENT이 경우, 이 명령어를 삭제한다.AUTO_INCREMENT필드에서의 정의,CHARSET기타 등등

제가 사용하는 또 다른 방법은 원하는 테이블에 데이터를 삽입하는 선을 피하는 것입니다.

원칙은 grep -v를 사용하여 INSERT INTO 라인을 필터링하는 것입니다.

mysqldump name_of_db | grep -v 'INSERT INTO \`name_of_table\` VALUES'

또는

mysqldump name_of_db | grep -v 'INSERT INTO \`name_of_db\`.\`name_of_table\` VALUES'

gzip 파일 및 구분된 오류 파일을 쉽게 가져올 수 있습니다.

mysqldump name_of_db | grep -v 'INSERT INTO \`name_of_db\`.\`name_of_table\`' | gzip > /path/dumpfile.sql.gz 2> /path/name_of_db.err

따라서 원하는 것을 적절하게 백업하고 실패했을 경우:-)

압축되지 않은 데이터를 쓰지 않음으로써 압축을 추가하고 대부분의 디스크 쓰기를 제거하는 Kantholy의 답변을 더욱 개선하려면:

#!/bin/bash
echo -n "db name:"
read -r db_name
echo -n "username:"
read -r username
echo -n "Exclude data from table:"
read -r exclude_table_data

{
 mysqldump "$db_name" --user="$username" --password --no-tablespaces --no-data \
 && \
 mysqldump "$db_name" --user="$username" --password --no-tablespaces --no-create-info \
 --ignore-table="${db_name}.${exclude_table_data}";
} \
| bzip2 -c9 \
> "${db_name}_$(date +%y%m%d_%H%M).sql.bz2"

내 생각에 가장 좋은 답은 스테이크에서 나오는 것 같아. 어떤 경우든 정말 효과가 있는 유일한 대답이야.

두 개의 덤프를 암시하는 모든 답변이 틀렸거나 적어도 특정 전제 하에서 작동할 수 있습니다.

위에서 지적한 바와 같이 시퀀스에 문제가 있을 수 있습니다.

그러나 데이터베이스에는 정보를 검증 또는 처리하는 트리거(테이블 A에 삽입할 때 테이블 B에 레코드를 삽입하는 트리거가 있다고 가정)가 있는 것이 더 중요합니다.이 경우 완전한 스키마(트리거 포함)를 작성한 후 데이터를 삽입하는 시퀀스에 따라 다른 결과 세트가 생성됩니다.

다음 명령은 데이터베이스 구조를 내보내고 데이터를 무시합니다.

mysqldump --no-data --databases -u[db_user] -p[db_password][schema] > File.sql

그런 다음 테이블을 무시하고 데이터를 내보냅니다.

mysqldump --filename-table=[filename.table_name] --filename-u[db_user] -p[db_password][filename]> File.sql

언급URL : https://stackoverflow.com/questions/13593148/mysql-dump-exclude-some-table-data

반응형