現在、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のことしかできません。
あるいは、これと同じ問題を解決するための他のアイデアがあれば、もちろん大歓迎です!
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
mysql
、information_schema
、mysql
、およびdb1
を除くすべてのデータベースをダンプします。
または、ダンプする前にリストを確認したい場合:
echo 'show databases;' | mysql -uroot -proot > databases.txt
databases.txt
を編集し、ダンプしたくないものを削除しますcat databases.txt | xargs mysqldump -uroot -proot --databases > all.sql
どうですか
--ignore-table = db_name.tbl_name
データベース名とテーブル名の両方を使用して指定する必要がある、指定されたテーブルをダンプしないでください。複数のテーブルを無視するには、このオプションを複数回使用します。
大きなデータベースを完全に無視するには、いくつか指定する必要があるかもしれません。
複数の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
これにより、ホスト名、日付、時刻がファイル名に自動的に追加されます。 :)
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"
バックアップユーザーを作成し、そのユーザーにバックアップするデータベースへのアクセスのみを許可します。
特権を明示的に付与することを覚えておく必要がありますが、それはデータベースで行うことができ、ファイルを編集する必要はありません。
これを思い付くのに多くの手間がかかりましたが、私は数年前から使用していて、うまく機能しています...
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 'プレフィックス%'などと言うことができます。