我使用此命令将一些远程数据库拉到本地数据库:
$ ssh remote.com "mysqldump remotedb | gzip" | gzip -d | mysql localdb
我发现这会在数据库上运行一堆单独的命令。有没有更快的方法?
我将从本地机器启动命令,并由 cron 运行。
更新
此方法会导致:在转储表时查询期间与 MySQL 服务器失去连接
答案1
我觉得这个命令没什么问题。您是:
- 导出 mysql 并压缩远程机器上的转储。
- 将压缩的转储发送到本地机器并解压缩。
- 将转储导入到本地 mysql。
这应该足够好了。显然,此类命令的执行时间取决于连接速度和数据库大小。
如果您遇到执行时间过长的问题,您可以考虑采用其他方法来同步数据库。例如,您可以尝试仅导出更改部分,而不是整个数据库。
答案2
也许吧。这取决于你的系统瓶颈是什么。如果你的网络很快,瓶颈是转储过程,那么执行 LVM 快照并同步数据文件将非常快。否则,如果网络是瓶颈,你可能已经到达了你能实现的极限。
答案3
如果您确定该mysqldump
命令是您的瓶颈,您可以尝试使用转储器反而。
看起来你不能将输出直接传输到目标服务器,但是你可以rsync
在转储过程中随意使用,并在转储完成后再次使用,以便最终的 rsync 相对较快。
您可以让 MyDumper 使用 进行压缩-c
,也可以使用 单独压缩,或者在命令中gzip
使用让 SSH 处理压缩。-e "ssh -C"
rsync