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


23

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

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

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

回答:


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'dしたくないデータベースを置くことです 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 " " -)
アンソニーO.

8

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

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

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


1
私はこのコマンドを知っていますが、非常に時間がかかります.4つのデータベースを無視し、残りのdbsバックアップを取る必要があります。
アシュトッシュ

3

ここでも非常に多くの優れた答えがありますので、この投稿はもう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

1
sysMySQL 5.7の一部であるため、ご登録いただきありがとうございます
RolandoMySQLDBA

おかげで@RolandoMySQLDBA、私はいつもあなたの優れた記事/ブログからの助けを得ます...おかげで再びあなたの褒めのための...
Zafarマリク


1

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

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

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

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-databasemysqldumpの将来のバージョンにオプションが追加されることを期待しています)


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.