Mysql备份解决方案

Mysql备份解决方案

我想远程备份我的 mysql 服务器。我有三个问题和一个要求。

  1. 我的服务器空间不足。我只能在本地服务器中保留一份备份
  2. 我的网络不太好。每秒只能上传 1MB。
  3. 我的数据库大小是 9 GB。
  4. 如果我的远程服务器被黑客入侵,他们不应该能够损害主服务器。

我曾尝试使用 automysqlbackup 脚本,但是它锁定了表,而且由于连接速度很慢,所以需要花费很长时间,并且网站会瘫痪。

我不想使用复制,我的第二台服务器也有自己的应用程序,而另一台服务器中有很多写入操作。我没有足够的资源。

我不想使用 xtrabackup(除了锁定问题之外,它并没有解决主要问题)我有过不好的经历。

备份应首先存储在本地,然后进行 GZIP 压缩,然后进行传输。

主服务器应该只保留一份副本(或者最好有文件大小限制,这样如果任何备份失败,它仍将保留旧副本)Automysqlbackup 脚本没有我可以设置的限制。(因此,我可以使用 automysqlbackup 进行本地备份并限制分配的总磁盘空间)

我可以使用 SFTP 和 chroot 用户并检索备份。

备份服务器应保存无限(或 100)个文件。它不应像主服务器那样删除文件。

我是否需要编写几个脚本?或者是否有任何现成的解决方案?(可能还有更多功能)

答案1

听起来您的要求足够个性化,您需要编写自己的脚本。关于该主题的几点说明:

  • 你不必把所有东西都转储到磁盘上,然后然后压缩它。使用 dump/gzip 管道,它将节省大量磁盘空间:

    mysqldump ... | gzip -c >/var/backups/mysqldump-$(date +%Y-%m%-d).sql.gz
    
  • 如果您使用所有 InnoDB 表并在事务中转储,并可选择--single-transactionmysqldump则可以使大多数锁定问题消失。

整个转储/推送脚本大约只有 5 行。非常简单。

答案2

您必须编写自己的脚本。

考虑到您不想要扩展锁定,并且看起来主服务器上有空间,我建议您在主服务器上启动第二个 mysql 实例进行复制,并从复制从属服务器进行备份。

不建议只使用一份副本。有很多服务可以让你以非常低的成本备份空间。例如,你可以使用亚马逊 AWS 进行备份,或者寻找其他空间提供商。它每月花费不到 10 美元,但允许多次备份(一周或更长时间),因此你不会遇到现在遇到的任何问题。

其他变体:获取hetzner.de或另一个低成本 VPS 并在其上设置复制+备份。

答案3

如果你的大部分数据都在 innodb 中,那么请查看备份软件

如果您有一个 innodb 数据库,使用它的好处是它不会在您进行备份时锁定表。

答案4

海域。

我使用以下方法制作 mysql 备份

  • xtrabackup
  • rdiff-backup

如果你真的不喜欢xtrabackup,那么可以使用mysqldump(可能mk-parallel-dump是来自 maatkit 套件)或其他任何东西。之后,你可以通过 rdiff-backup 进行备份,它应该只会复制文件的更改部分 - 而且,它可以通过网络使用。

因此,在“小型”机器上,您只需保留夜间转储,而在远程“大型”机器上,您可以保留所有 rdiff 备份,并在获取 mysql 转储后每晚更新。

编写脚本应该很容易(==将您的 dump 命令和 rdiff-backup 调用写入您的 crontab)...

再见

相关内容