我怎样才能安全地备份一个巨大的数据库?

how can I safely backup a huge database?

我需要备份一个很大的 Drupal 数据库。所以它有超过 1500 个表(不要怪我,它是 Drupal 的东西)并且大小为 10GB。

我无法使用 PHPMyAdmin 完成此操作,我只是在开始构建 .sql 文件时遇到错误。

我想确保在尝试备份时不会破坏任何东西或使服务器宕机或任何东西。

我打算在我的服务器上尝试一个 mysqldump,然后将文件复制到本地,但意识到这可能会导致无法预料的问题。所以我想问你的是,一次在这么多表上使用 mysqldump 是否安全,即使是安全的,这样一个巨大的文件是否会在未来重建数据库时导致任何问题?

感谢您的输入。

使用mysqlhotcopy它可以很好地处理大型数据库

  • 只处理 MyISAM 和 ARCHIVE 表。
  • 仅在存储数据库的服务器上工作。
  • 此实用程序已在 MySQL 5.6.20 中弃用并在 MySQL 5.7
  • 中删除

is it safe to use mysqldump on so many tables at once

我 运行 在服务器上 mysqldump 的每日备份实际上是这个大小的 10 倍:15000+ tables,100+ GB。

如果您还没有检查过 mysqldump 生成的文件的内容...您应该检查一下,因为查看它的输出就可以理解为什么它是一个本质安全的备份实用程序:

备份是人类可读的,并且完全由必要的 SQL 语句组成,以创建与您备份的数据库完全相同的数据库。

在这种形式下,它们的内容很容易使用无处不在的工具进行操作,例如 sedgrepperl,这些工具可以用来仅提取一个 table例如,来自用于恢复的文件。

如果恢复失败,错误将指示文件中发生错误的行号。这通常与创建备份的服务器版本中的错误行为有关(例如 MySQL Server 5.1 允许您在服务器本身不接受其自己的输出的某些情况下创建视图 SHOW CREATE VIEW 语句。create 语句不被同一台服务器视为有效的视图定义,但这不是 mysqldump 或备份文件 本身的缺陷。)

从 mysqldump 创建的备份恢复不是闪电般的快,因为服务器必须执行所有这些 SQL 语句,但从安全的角度来看,我认为没有更安全的选择,因为它是规范的备份工具,如果没有别的,任何错误都可能凭借庞大的用户群被发现和修复。

除非紧急情况,否则不要使用--force选项。它将导致备份在备份 运行ning 时跳过服务器上遇到的任何错误,导致备份不完整,几乎没有任何警告。相反,查找并修复发生的任何错误。备份期间的典型错误与不再有效的视图有关,因为它们引用了 table 或已重命名或删除的列,或者最初创建视图的用户已从服务器中删除。通过正确地重新定义视图来解决这些问题。

最重要的是,通过将备份还原到不同的服务器来测试您的备份。如果你还没有这样做,你就没有真正的备份。

可以使用 gzip/pigz、bzip2/bpzip2、xz/pixz 或 zpaq 压缩输出文件,通常是大幅压缩。这些按保存量 space(gzip 保存最少,zpaq 保存最多)和速度(gzip 最快,zpaq 最慢)的大致顺序列出。 pigz、pbzip2、pixz 和 zpaq 将利用多核,如果你有的话。其他人一次只能使用一个核心。