什么时候用 mysqldump 创建 .sql 备份变得太大?

nab*_*ley 3 mysql mysqldump backup

使用 mysqldump 执行 .sql 备份时,数据库的大小是否有限制,或者在此之前您是否会遇到服务器问题 - 服务器是否无法接受如此大的备份文件?

我在考虑以下层次:

  • 1 - 10GB
  • 10 - 100GB
  • 100 - 500GB

Rol*_*DBA 7

我只能想到三 (3) 件事会导致 mysqldump 过大

问题 #1:禁用扩展插入

默认情况下,扩展插入 ( --extended-insert ) 通过--opt 选项启用。如果您发出--skip-opt--skip-extended-insert,每个 INSERT 命令将很快变成成百上千。这样的 mysqldump 仍然可以加载,但由于没有批量插入需要更长的时间。

问题 #2:BLOB 数据

转储带有 BLOB 数据的表时,转储不可移植的可能性很小。为了使此类数据可移植,有些人求助于--hex-blob选项。这将 BLOB 写入为文本表示的十六进制。使用它时,您应该期待更加臃肿的 mysqldump。

警告:不要同时使用 --hex-blob 和 --skip-extended-insert

问题 #3:MySQL 数据包

大多数人认为MySQL 数据包是理所当然的。如果您不注意,某些 mysqldump 可能会超时mysqldump 的默认max-allowed-packet值为 in 24M。扩展插入可以受益于更大的数据包。它可能会增加每个扩展 INSERT 命令的行数。规模上的节省充其量只是名义上的。尽管如此,转储越大,大小的减少可能越好。

更新 2015-02-13 12:37 美国东部时间

如果您主要关心的只是庞大的尺寸与硬件限制,您可以像这样转储:

mysqldump -uroot -ppasswword ... | gzip > mybackup.sql.gz
Run Code Online (Sandbox Code Playgroud)

并像这样恢复

gzip -d < mybackup.sql.gz | mysql -uroot -ppasswword
Run Code Online (Sandbox Code Playgroud)

您可以使用bzip2而不是 gzip(bzip 与 gzip 的优缺点?