Mysql大型数据库备份

Mysql大型数据库备份

如何备份 mysql 中的大型数据库?数据库文件夹大小超过 5GB,包含 15 万个表。

我曾尝试通过 phpmyadmin 备份服务器,但没有成功。

答案1

对于 5GB 的数据大小,您几乎肯定不能也不应该使用转储(myslqdump、phpmyadmin 等)作为备份。原因不是备份。原因是恢复将花费很长时间,可能需要很多天,具体取决于表结构和服务器硬件。您需要某种类型的文件备份。您使用 LVM 快照、Percona XtraBackup 或 rsync 还是其他什么,将取决于您使用的存储引擎、硬件、文件系统和许多其他因素。这个问题太复杂了,没有更多细节就无法回答,但我可以简化如下:

  • 无论您做什么都应该以恢复为中心,而不是以备份为中心,因此首先确定您的 RPO(恢复点目标)和 RTO(恢复时间目标),并确保您的解决方案能够满足这些要求。
  • 如果您只使用 InnoDB,或者除了系统表和可能还有一些其他小型且不经常更新的表之外主要使用 InnoDB,那么 Percona XtraBackup 可能是一个不错的选择。
  • 否则,您应该考虑文件系统(LVM)快照技术。
  • 如果您无法做到这一点,那么您可能需要从副本中进行备份,而且您可能无论如何都想这样做。但设置副本首先需要备份,并且您还需要使用 Percona Toolkit 中的 pt-table-checksum 定期(至少每周一次)验证副本的数据完整性。

答案2

查看MySQL 二进制日志。它可用于设置增量备份。您还可以使用mysqldump,但如果数据库太大,执行完整备份可能需要一些停机时间。

答案3

我们使用 Percona XtraBackup。它将对大型数据库进行无阻塞备份。它相当快。并且非常可靠。它创建了数据库的可用副本。我们将其备份到单独的分区,可以将数据从那里复制到数据分区,或者我们可以交换分区以直接使用备份。而且它是免费的。

答案4

我的一个系统中的数据发生了变化,因此使用 binlog 作为备份毫无意义。那里的 ibdata 文件有 131GB。为此,我使用以下命令:

/usr/bin/mysqldump -u $1$MYSQLPASSWORD -f --opt --single-transaction --all-databases | lzma -3

然后,Bacula 会获取生成的压缩文件并将其写入系统备份,与任何其他文件一样。

请注意,当您说“文件夹大小”时,您暗示您没有使用 InnoDB。这可能会使一致性快照更具挑战性。

其他一些常用方法包括快照 + binlog 增量、文件系统快照和备用从属服务器。还有 Percona 工具允许直接从 InnoDB 文件读取热备份。哪种解决方案最适合您,很大程度上取决于系统负载。

相关内容