MySQL数据库从远程主机转储而没有临时文件

时间:2016-02-10 11:36:58

标签: mysql mysqldump

我尝试在我的工作中实现数据库备份cron(欢迎其他解决方案),但我遇到了一个小问题:

我有一个空间超过10GB的大型数据库,当前的vm没有空间将其存储在mysql创建的临时文件中。

我知道我可以将mysqldump与主机参数一起使用,但我的问题是,当这样做时,mysqldump生成的临时文件会保留在运行它的机器上还是留在数据库服务器上?

更新: 我忘了提到我试图备份一个网站网络,其中一些是在防火墙后面(需要VPN访问),有些需要服务器跳转才能到达数据库服务器。

2 个答案:

答案 0 :(得分:3)

您可以从存档主机运行shell脚本,您可以在其中使用数据库服务器交换无密码的ssh密钥。这使您可以直接通过ssh传输文件,而无需在远程数据库服务器上创建任何临时文件:

ssh -C myhost.com mysqldump -u my_user --password=bigsecret \ 
  --skip-lock-tables --opt database_name > local_backup_file.sql

显然,有一些方法可以在命令行上保护该密码,但这是一种可以实现您想要的方法。此方法的一个优点是它不需要存档主机访问远程主机上的端口3306。

This guy's version很酷,因为它在通过网络传输之前还会动态压缩数据,然后在将数据加载到本地数据库之前将其解压缩。

ssh me@remoteserver 'mysqldump -u user -psecret production_database | \
  gzip -9' | gzip -d | mysql local_database

但这就是为什么我的版本使用ssh -C,它启用了自己的压缩算法并避免了额外的gzip管道。

答案 1 :(得分:0)

根据具体情况,使用MySQL复制可能更好。在备份服务器上设置MySQL并将其配置为生产数据库的从属(请参阅http://dev.mysql.com/doc/refman/5.7/en/replication-howto.html)。然后,您可以轻松地转储从数据库。

这种方法的一个优点是每次要备份时都不会传输10GB,而只是在数据库发生变化时将其传输到数据库。

您需要密切关注复制,因为如果失败,您的从属数据库将变得陈旧。

相关问题