web-dev-qa-db-ja.com

mysqldumpでバックアップ用のデータベースを無視するオプションはありますか?

サーバーには40のデータベースがあります。

Mysqldumpを使用して36のデータベースのバックアップを作成したいと考えています。 mysqldumpコマンドで残りの4つのデータベースを無視するにはどうすればよいですか? mysqldumpがMySQLのバックアップでデータベースを無視するオプションはありますか?

一般的なmysqldumpコマンドは知っていますが、非常に時間がかかります。 4つのデータベースのみを無視し、残りのdbsバックアップを取得する必要があります。

23
ashuthosh

2011年12月16日、質問に回答しました mysqldumpの特定のテーブルをどのように使用しますか?

特定のテーブル名のセットを含まないすべてのテーブルを収集しました。

同じ原理を使用して、メタデータテーブルinformation_schema.schemataからすべてのデータベース名を収集してmysqldumpを実行し、そのリストを返すクエリを作成してから、そのデータベースのリストを使用して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に配置するだけです。

試してみる !!!

16
RolandoMySQLDBA

Grepを使用して、不要なデータベースを除外します。

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

https://stackoverflow.com/questions/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
15
srcritical

可能ではないと思いますが、ダンプしたいすべてのデータベースの名前を入力する必要があるこれらのソリューションを試すことができます。

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

解決策が役立つかどうか教えてください。

8
Cybermatatu

ここでも非常に多くの優れた回答があるため、この投稿では選択肢を1つ追加するだけです。スクリプトの2行以下にすることで、一部の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
3
Zafar Malik

または、次のリンクをご覧ください。

Mysqldump Ignore Database Option

            OR

mysqldumpをシミュレートするためのいくつかのハック--ignore-database

mysqldump –ignore-databaseの実装

解決策が役立つかどうか教えてください。

幸運を!

2
Cybermatatu

多くの人は、mysqldumpがデータベースを無視することを常に望んでいました。

そのオプションは今あると思いますか???いいえ、mysqldumpにはありません。

Oracle(Yuck、toowee、それでも舌から離れない)には、Oracleデータベースをダンプする DataPump(expdb impdp) があります。 OracleファミリーのMySQL 5.7(まだ痛い)から、新しいバックアップユーティリティプログラムは mysqlpump と呼ばれ、 -exclude-databases とその他のきちんとしたオプションが付属しています。以前の継兄弟 datapump と同様に、 mysqlpump にも ダンプの高速化と作業の分割を支援する並列処理 が備わっています。現時点では、私は仕事に組み込まれていませんが、非常に有望に見えます。 mysqlpump を深く掘り下げると、Oracleの datapump と同じルックアンドフィールが得られることがあります。

MySQL Parallel Universeにストーリーのある人がいる場合は、こちらに投稿してください。

1
RolandoMySQLDBA

MySQL 5.7.8以降、次のようにmysqlpumpmysqldumpとは異なります)を使用できます。

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

db1,db2,db3,db4除外する4つのデータベース。

ソース: MySQL Server Blog

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
# https://dba.stackexchange.com/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
redgeoff