我想远程备份我的 mysql 服务器。我有三个问题和一个要求。
- 我的服务器空间不足。我只能在本地服务器中保留一份备份
- 我的网络不太好。每秒只能上传 1MB。
- 我的数据库大小是 9 GB。
- 如果我的远程服务器被黑客入侵,他们不应该能够损害主服务器。
我曾尝试使用 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-transaction
,mysqldump
则可以使大多数锁定问题消失。
整个转储/推送脚本大约只有 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)...
再见