我可以用mysqldump得到我所有数据库的转储吗?

roejwanj  于 12个月前  发布在  Mysql
关注(0)|答案(8)|浏览(172)

我目前正在使用mySQLdump来备份我的开发机器和服务器。
有一个项目,我刚刚开始,但是,有一个HUUUUGE数据库,我并不真正需要备份,我将是一个大问题,以添加到备份周期的其余部分。
我目前正在做的是:

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

字符串
是否可以以某种方式指定“除了这个数据库"?
我不想手动指定数据库列表,因为这意味着每次创建新数据库时,我都必须记住更新备份批处理文件,我知道这不会发生。
编辑:正如你可能从我上面的命令行中猜到的,我在Windows上这样做,所以我不能做任何花哨的bash东西,只有wimpy .bat的东西。
或者,如果你有其他的想法来解决这个问题,他们是非常欢迎的,当然!

siv3szwd

siv3szwd1#

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

j7dteeu8

j7dteeu82#

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_schemamysqldb1之外的所有数据库。
或者,如果你想在转储之前查看列表:

  1. echo 'show databases;' | mysql -uroot -proot > databases.txt
    1.编辑databases.txt并删除任何你不想转储
  2. cat databases.txt | xargs mysqldump -uroot -proot --databases > all.sql
vyu0f0g1

vyu0f0g13#


--忽略表=数据库名称.tbl名称
不要倾印指定的数据表,必须同时使用数据库和数据表名称来指定。若要忽略多个数据表,请多次使用此选项。
也许您需要指定几个以完全忽略大数据库。

ve7v8dk2

ve7v8dk24#

我创建了以下一行解决方案,避免了多个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


这将自动添加主机名,日期和时间到文件名。:)

lyr7nygr

lyr7nygr5#

看到你使用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"

字符串

q5lcpyga

q5lcpyga6#

创建备份用户,并仅授予该用户对要备份的数据库的访问权限。
您仍然需要记住显式地授予特权,但这可以在数据库中完成,并且不需要编辑文件。

rsl1atfo

rsl1atfo7#

我花了很多时间才想出这个,但我已经用了几年了,它工作得很好。

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,你可以重定向到一个文件,但这允许我定制我移动的内容。有时我甚至或列表,所以我可以说像'前缀%'等。

deikduxw

deikduxw8#

你可以用这个来生产
它不包括'performance_schema\|information_schema\|mysql\|sys'.

MYSQL_USER=
MYSQL_PASS=
MYSQL_HOST=
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS} -h${MYSQL_HOST}"
MYSQLDUMP_OPTIONS="--routines --triggers --single-transaction"

DBLIST=`mysql -s --host=$MYSQL_HOST --user=$MYSQL_USER --password=$MYSQL_PASS \
--execute="SHOW DATABASES;" | grep -v \
'performance_schema\|information_schema\|mysql\|sys' | awk '{printf("%s ",$0)}'`

mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} --databases ${DBLIST} | gzip >all-dbs.sql.gz

字符串

相关问题