백업을 위해 데이터베이스를 무시하는 mysqldump 옵션이 있습니까?


23

서버에는 40 개의 데이터베이스가 있습니다.

mysqldump를 사용하여 36 개의 데이터베이스 백업을 수행하려고합니다. mysqldump 명령에서 나머지 4 개의 데이터베이스를 어떻게 무시할 수 있습니까? mysqldump가 MySQL에서 백업 할 데이터베이스를 무시할 수있는 옵션이 있습니까?

일반적인 mysqldump 명령을 알고 있지만 매우 길다. 4 개의 데이터베이스 만 무시하고 나머지 DB 백업을 수행해야합니다.

답변:


16

2011 년 12 월 16 일으로 돌아가서 어떻게 mysqldump 특정 테이블을 사용합니까? 라는 질문에 대답했습니다 .

특정 테이블 이름 세트를 포함하지 않는 모든 테이블을 수집했습니다.

동일한 원칙을 사용하여 information_schema.schematamysqldump가 원하는 메타 데이터 테이블에서 모든 데이터베이스 이름을 수집하고 해당 목록을 리턴하는 쿼리를 작성한 다음 해당 데이터베이스 목록을 사용하여 mysqldump 명령을 공식화 할 수 있습니다.

DATABASES_TO_EXCLUDE="db1 db2 db3"
EXCLUSION_LIST="'information_schema','mysql'"
for DB in `echo "${DATABASES_TO_EXCLUDE}"`
do
    EXCLUSION_LIST="${EXCLUSION_LIST},'${DB}'"
done
SQLSTMT="SELECT schema_name FROM information_schema.schemata"
SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"
MYSQLDUMP_DATABASES="--databases"
for DB in `mysql -ANe"${SQLSTMT}"`
do
    MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
done
MYSQLDUMP_OPTIONS="--routines --triggers"
mysqldump ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES} > MySQLDatabases.sql

mysqldump를 원하지 않는 데이터베이스를 입력하기 만하면됩니다. DATABASES_TO_EXCLUDE

시도 해봐 !!!


information_schema어쨌든 덤프되지 않는다는 것을 배제 할 필요 가 없습니다. mysqldump does not dump the INFORMATION_SCHEMA or performance_schema database by default. To dump either of these, name it explicitly on the command line and also use the --skip-lock-tables option. You can also name them with the --databases option. Before MySQL 5.5 mysqldump silently ignores INFORMATION_SCHEMA even if you name it explicitly on the command line. dev.mysql.com/doc/refman/5.5/en/mysqldump.html
루카

15

grep을 사용하여 원하지 않는 데이터베이스를 제외하십시오.

candidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$")
mysqldump --databases $candidates 

보고에서 /programming/19354870/bash-command-line-and-input-limit 당신이 긴 줄을 처리 할 수있을 것처럼 보인다. 그렇지 않으면 항상 할 수 있습니다

candidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$")
for candidate in $candidates[*]; do
    mysqldump $candidate 
done

`| grep여러 줄 출력에서 ​​공백으로 구분 된 각 데이터베이스 이름을 가진 단일 줄로 전달 하려면 에 붙여 넣기 -sd ""-` 가 필요합니다 mysqldump. 그래서 명령은candidates=$(echo "show databases" | mysql | grep -Ev "^(Database|mysql|performance_schema|information_schema)$" | paste -sd " " -)
Anthony O.

8

나는 그것이 가능하다고 생각하지 않지만 덤프하려는 모든 데이터베이스의 이름을 입력 해야하는이 솔루션을 시도 할 수 있습니다.

mysqldump -u root -password --databases db1 db2 db3 ... db36 > mydb_dump.sql

해결책이 도움이되는지 알려주십시오.


1
나는이 명령을 알고 있지만 매우 길다 .4 개의 데이터베이스를 무시하고 나머지 DB 백업을 수행해야합니다.
ashuthosh

3

여기에도 많은 훌륭한 답변이 있으므로이 게시물은 하나 이상의 선택을 추가하는 것입니다. 스크립트에서 두 줄 아래로 DB를 무시하고 서버의 모든 DB 백업을 수행 할 수 있습니다.

DB_LIST=`mysql -Nse "SELECT GROUP_CONCAT(SCHEMA_NAME SEPARATOR ' ') FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql','information_schema','performance_schema','sys');"`

mysqldump -R -B $DB_LIST > BACKUPNAME.sql

1
sys그것이 MySQL 5.7의 일부이기 때문에 포함 해 주셔서 감사합니다
RolandoMySQLDBA

@RolandoMySQLDBA 덕분에, 나는 항상 당신의 훌륭한 게시물 / 블로그에서 도움을 ... 칭찬에 다시 한번 감사드립니다 ...
Zafar Malik


1

많은 사람들은 항상 mysqldump가 데이터베이스를 무시하기를 원했습니다.

그 옵션이 지금 존재한다고 생각하십니까? 아니요, mysqldump에는 없습니다.

Oracle (아직도 여전히 혀를 굴리지 않습니다)에는 Oracle 데이터베이스를 덤프하기위한 DataPump (expdb impdp) 가 있습니다. Oracle 제품군의 MySQL 5.7 이후 (아직 아프게 됨) 새로운 백업 유틸리티 프로그램은 mysqlpump 라고 하며 --exclude-databases 및 기타 깔끔한 옵션 이 함께 제공됩니다 . 그 이전의 이복 형제의와 마찬가지로 데이터 펌프 , mysqlpump는 또한 기능 덤프 및 분할 작업까지 도움 속도에 병렬 처리를 . 현재로서는 직장에 편입되지 않았지만 매우 유망한 것으로 보입니다. 경우에 나는 깊은 다이빙 mysqlpump 나는 그것이 오라클과 같은 모양과 느낌 제공 사실을 발견 데이터 펌프를 .

MySQL Parallel Universe에 스토리가있는 사람이 있으면 여기에 게시하십시오.


0

Rolando의 답변은 꽤 훌륭하지만 프로젝트 전체에서 재사용 할 수있는 스크립트를 원했습니다. 그래서 나는 그의 스크립트를 가져 와서 다음과 같이 할 수 있도록 수정했습니다.

$ mysqldump-ignore-databases.sh 'myuser' 'mypwd' 'information_schema mysql performance_schema' '--skip-lock-tables' > mydbs.sql

다음은 수정 된 스크립트입니다.

#!/usr/bin/env bash

# This is an adapted version of Rolando's awesome script at
# /dba//a/35104/94046

# Usage: mysqldump-ignore-databases.sh username password dbs-to-exclude mysqldump-options
# e.g.
#   mysqldumpIgnoreDatabases.sh 'myuser' 'mypwd' 'information_schema mysql performance_schema'
#                               '--skip-lock-tables' > dbs.sql
#
#   mysqldumpIgnoreDatabases.sh 'myuser' 'mypwd' 'mysql' '-h example.com' '-h example.com' > dbs.sql

USERNAME=$1
PASSWORD=$2
DATABASES_TO_EXCLUDE=$3
MYSQLDUMP_OPTIONS=$4
MYSQL_OPTIONS=$5

EXCLUSION_LIST=""
for DB in `echo "${DATABASES_TO_EXCLUDE}"`
do
  if [ "${EXCLUSION_LIST}" != "" ]
  then
    EXCLUSION_LIST="${EXCLUSION_LIST},"
  fi
  EXCLUSION_LIST="${EXCLUSION_LIST}'${DB}'"
done

SQLSTMT="SELECT schema_name FROM information_schema.schemata"
SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"

MYSQLDUMP_DATABASES="--databases"
for DB in `mysql -u${USERNAME} -p${PASSWORD} ${MYSQL_OPTIONS} -ANe"${SQLSTMT}"`
do
  MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
done

mysqldump -u${USERNAME} -p${PASSWORD} ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES}

(나는 여전히 --ignore-database옵션이 차기 버전의 mysqldump에 추가 되기를 희망한다 )


0

MySQL 5.7.8부터 다음과 같이 ( mysqlpump와 동일하지 않음)을 사용할 수 있습니다 mysqldump.

mysqlpump --user=user --password --exclude-databases=db1,db2,db3,db4 --result-file=partial_backup.sql

db1,db2,db3,db4제외하려는 4 개의 데이터베이스로 바꾸십시오 .

출처 : MySQL 서버 블로그

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.