我目前正在使用mySQLdump来备份我的开发机器和服务器。
有一个项目我刚开始,但是,有一个HUUUUUGE数据库,我并不需要备份,我将是一个大问题,将其添加到备份周期的其余部分。
我目前正在这样做:
"c:\Program Files\mysql\MySQL Server 5.1\bin\mysqldump" -u root -pxxxxxx --all-databases > g:\backups\MySQL\mysqlbackup.sql
是否有可能以某种方式指定“除了这个数据库(S)”?
我不希望手动指定数据库列表,因为这意味着我不得不记得每次创build一个新的数据库时更新我的备份batch file,我知道这不会发生。
编辑:正如你可能从我的命令行上面猜到,我在Windows上这样做,所以我不能做任何forms的花式bash的东西,只有wimpy .bat的东西。
或者,如果你有其他的想法来解决这个问题,当然他们是受欢迎的!
mysql ... -N -e "show databases like '%';" |
grep
-v -F databaseidontwant |
xargs
mysqldump ... --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
转储所有数据库,除了: 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
关于什么
– 忽略表=的db_name.tbl_name
不要转储给定的表,它必须使用数据库和表名来指定。 要忽略多个表,请多次使用此选项。
也许你需要指定一些完全忽略大数据库。
创建一个备份用户,只授予该用户对要备份的数据库的访问权限。
您仍然需要记住明确授予权限,但可以在数据库中完成,并且不需要编辑文件。
我创建了以下一行解决方案,避免了多个grep命令。
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可用。
这里是一个简短的PowerShell脚本来获取所有数据库的列表,从列表中删除不需要的,然后使用mysqldump来备份其他数据库。
$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
而不是管道到mysql我从serverName移动到servername2你可以重定向到一个文件,但这使我可以定制我的行动。 有时候甚至是我的名单,所以我可以说LIKE'前缀%'等