web-dev-qa-db-ja.com

mysqldumpを使用して* 1つを除く*すべてのデータベースのダンプを取得できますか?

現在、mySQLdumpを使用して開発マシンとサーバーをバックアップしています。

私が始めたばかりのプロジェクトが1つありますが、そのプロジェクトには、バックアップする必要のないHUUUUUGEデータベースがあり、残りのバックアップサイクルに追加するのは大きな問題になります。

私は現在これを行っています:

"c:\Program Files\mysql\MySQL Server 5.1\bin\mysqldump" -u root -pxxxxxx --all-databases > g:\backups\MySQL\mysqlbackup.sql

どういうわけか「このデータベース以外」を指定することは可能ですか?

DBのリストを手動で指定する必要はありません。これは、新しいDBを作成するたびにバックアップバッチファイルを更新することを覚えておく必要があることを意味し、それが起こらないことを知っています。

編集:おそらく上記の私のコマンドラインから推測したように、私はこれをWindowsで行っているので、どんな種類の派手なbashのこともできず、弱虫の.batのことしかできません。

あるいは、これと同じ問題を解決するための他のアイデアがあれば、もちろん大歓迎です!

22
Daniel Magliola

mysql ... -N -e "show databases like '%';" |grep-v -F databaseidontwant |xargsmysqldump ... --databases > out.sql

echo 'show databases;' | mysql -uroot -proot | grep -v ^Database$ | grep -v ^information_schema$ | grep -v ^mysql$ | grep -v -F db1 | xargs mysqldump -uroot -proot  --databases > all.sql

mysqlinformation_schemamysql、およびdb1を除くすべてのデータベースをダンプします。

または、ダンプする前にリストを確認したい場合:

  1. echo 'show databases;' | mysql -uroot -proot > databases.txt
  2. databases.txtを編集し、ダンプしたくないものを削除します
  3. cat databases.txt | xargs mysqldump -uroot -proot --databases > all.sql
25
agus nurhadi

どうですか

--ignore-table = db_name.tbl_name

データベース名とテーブル名の両方を使用して指定する必要がある、指定されたテーブルをダンプしないでください。複数のテーブルを無視するには、このオプションを複数回使用します。

大きなデータベースを完全に無視するには、いくつか指定する必要があるかもしれません。

9
pupeno

複数のgrepコマンドを回避して、次の1行のソリューションを作成しました。

mysql -e "show databases;" | grep -Ev "Database|DatabaseToExclude1|DatabaseToExclude2" | xargs mysqldump --databases >mysql_dump_filename.sql

Grepの-Eは、パイプ記号「|」で区切られたさまざまな一致を提供できる拡張正規表現サポートを有効にします。 mysqldumpコマンドにさらにオプションを追加できます。ただし、「-databases」パラメータの前のみ。

ちょっとした注意ですが、私はこのようにダンプのファイル名を定義するのが好きです...

... >mysql_dump_$(hostname)_$(date +%Y-%m-%d_%H-%M).sql

これにより、ホスト名、日付、時刻がファイル名に自動的に追加されます。 :)

4
Gerhard

Windowsを使用していると見なすと、PowerShellを使用できるようになります。
これは、すべてのデータベースのリストを取得し、リストから不要なデータベースを削除してから、mysqldumpを使用して他のデータベースをバックアップするための短いPowerShellスクリプトです。

$MySQLPath = "."
$Hostname = "localhost"
$Username = "root"
$Password = ""

# Get list of Databases
$Databases = [System.Collections.Generic.List[String]] (
    & $MySQLPath\mysql.exe -h"$Hostname" -u"$Username" -p"$Password" -B -N -e"show databases;"
)

# Remove databases from list we don't want
[void]$Databases.Remove("information_schema")
[void]$Databases.Remove("mysql")

# Dump database to .SQL file
& $MySQLPath\mysqldump.exe -h"$HostName" -u"$Username" -p"$Password" -B $($Databases) | Out-File "DBBackup.sql"
3
AeroX

バックアップユーザーを作成し、そのユーザーにバックアップするデータベースへのアクセスのみを許可します。

特権を明示的に付与することを覚えておく必要がありますが、それはデータベースで行うことができ、ファイルを編集する必要はありません。

3
Craig

これを思い付くのに多くの手間がかかりましたが、私は数年前から使用していて、うまく機能しています...

mysql -hServerName -uUserName -pPassword -e "SELECT CONCAT('\nmysqldump -hServerName -uUserName -pPassword --set-gtid-purged=OFF --max_allowed_packet=2048M --single-transaction --add-drop-database --opt --routines --databases ',DBList,' | mysql -hServerName2 -uUserName2 -pPAssword2 ' ) AS Cmd FROM (SELECT GROUP_CONCAT(schema_name SEPARATOR ' ') AS DBList FROM information_schema.SCHEMATA WHERE LEFT(schema_name, 8) <> 'cclegacy' AND schema_name NOT IN ('mysql','information_schema','performance_schema','test','external','othertoskip')) a \G" | cmd

ServerNameからServername2に移動するmysqlにパイプオーバーする代わりに、ファイルにリダイレクトできますが、これにより、移動するものを調整できます。時々私はORリストなので、LIKE 'プレフィックス%'などと言うことができます。

1
Adam Cain