Mysql备份解决scheme

我想远程备份我的MySQL服务器。 我有三个问题,一个需求。

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

我试图使用automysqlbackup脚本,但它是locking表,由于连接速度慢,这是花费时间和网站宕机。

我不想使用复制,我的第二个服务器也有它自己的应用程序,并且在另一个服务器中有很多写入。 我没有足够的资源。

我不想使用xtrabackup(它不是解决除了locking问题之外的主要问题),我有一个不好的经验。

备份应先存储在本地,然后GZIPed然后转移。

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

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

备份服务器应保持无限(或100)的文件数量。 它不应该像主服务器一样删除文件。

我必须写几个脚本吗? 或者有没有预先制定的解决scheme? (可能还有更多的function)

这听起来像你的要求是足够的自定义,你需要编写自己的脚本。 关于这个问题的几个笔记:

  • 您不必将所有内容转储到磁盘, 然后进行压缩。 使用dump / gzippipe道,它将节省一堆磁盘空间:

    mysqldump ... | gzip -c >/var/backups/mysqldump-$(date +%Y-%m%-d).sql.gz 
  • 如果您使用所有InnoDB表并在事务中进行转储,则可以使大部分locking问题消失,并将--single-transaction选项用于mysqldump

整个dump / push脚本应该大概5行。 这是相当微不足道的。

你将不得不编写自己的脚本。

考虑到你不想扩展locking,并且它看起来像在主服务器上有空间,我build议你在主服务器上启动第二个用于复制的mysql实例,并从复制从服务器执行备份。

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

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

如果你的大部分数据都在innodb中,那么查看Xtrabackup

如果你有一个innodb数据库,使用它的好处是它不会在你做备份的时候locking表。

海域。

我用我的MySQL备份

  • xtrabackup
  • rdiff-backup

如果你真的不喜欢xtrabackup ,那么使用mysqldump (也许mk-parallel-dump从maatkit套件)或者其他什么。 之后,你可以通过rdiff-backup来备份你的备份,这应该只是复制文件的变化部分 – 也可以通过networking使用。

因此,在“小型”机器上,您可以保留每晚的转储,而在远程的“大型”机器上,您可以保留所有的rdiff备份,在您执行mysql转储后每晚更新一次。

它应该很容易脚本(==写你的dump-command和rdiff-backup调用到你的crontab)这个…

再见