我们希望从远程服务器备份/DB_TABLES
到本地/bck
ssh root@main_server "tar cfz - /DB_TABLES" |tar xz -C /bck
由于/DB_TABLES
远程服务器上的分区是1.4T
,我们希望确保以下方法是将大分区备份到本地文件夹的正确方法
挂载到的本地文件/bck
夹来自2T磁盘。
答案1
情况很复杂
柏油
ssh root@main_server "tar czf - /DB_TABLES" |tar xzf - -C /bck
(z
之前f
注释中指出,以及f -
提取tar
)
将文件从远程传输main_server
到本地/bck
目录,由于/DB_TABLES
文件不小,因此在传输完成时某些文件可能已更改,因此/bck
可能不连贯。
同步
rsync --archive --verbose --relative --delete root@main_server:/DB_TABLES/ /bck
稍微好一点,rsync
将在两侧收集文件,然后传输新的或更改的文件。第一次rsync
将传输所有文件。之后,希望能够传输较小的体积;但是,如果文件在收集阶段后发生更改/DB_TABLES
,它们将被丢失(例如未传输)。
如果您有很多小文件,您可能会并行运行 (1)
rsync --archive --verbose --relative --delete root@main_server:/DB_TABLES/dir1/ /bck
rsync --archive --verbose --relative --delete root@main_server:/DB_TABLES/dir2/ /bck
(...)
(1) 无法保证正确的语法。
数据库
您必须确保/确保文件/DB_TABLES
在传输过程中不会更改(ssh+tar
或者rsync
),如果可以实现这一点(例如通过停止数据库),那么任一解决方案都可以工作(rsync
长期运行可能会更快)。
您可能想要校准rsync
需要多长时间才能知道停止/挂起数据库需要多长时间。
如果数据库无法停止,请使用远程同步机制(如果提供)(日志传送、从库)。
钻头
一个昂贵但有效的解决方案是尝试实际恢复数据(例如构建本地副本并搜索最新插入的记录)。这将涉及许多资源和许多人,还可能包括一个或多个实际停止生产的数据库。理想情况下,该测试应每年/季度进行一次。
答案2
如果你有足够的空间(在远程服务器中),你可以先通过某些东西(例如x,创建类似mycopy.x的东西,通过ssh启动)进行存档,然后使用rsync在本地传输mycopy.x
如果事实上与有些归档器你甚至可以使用 --append,这可以将流量(多次运行,例如每天)减少大约 2/3 个数量级(大约快 100 倍/1000 倍),请自行搜索哪些。
使用 ssh 密码登录(调整路径!)这里有一个片段
ssh [email protected] "/bin/x a /tmp/mycopy.x /DB_TABLES"
或使用 RSA 密钥(在此示例中,在默认端口 22 上)
/bin/ssh -p 22 -i /root/mysshkey [email protected] /bin/x a /tmp/mycopy.x /DB_TABLES
使用古老/普通的归档程序(tar、7z、zip、rar 等),您需要每次都传输所有数据(或者至少进行全面检查),仅维护数据的一份副本,如下所示(本例中没有密钥,但输入密码登录)。
rsync -avr [email protected]:/tmp/mycopy.x /temporaneo/dedup/mylocal
或者这个(使用 RSA 密钥,通过标准端口 22)
/bin/rsync -I -vv --omit-dir-times --no-owner --no-perms --partial --progress -e "/bin/ssh -p 22 -i /root/mysshkey" -rlt --delete "[email protected]:/tmp/mycopy.x" "/temporaneo/dedup/mylocal"
如果您使用 zfs 文件系统,您可以制作快照,然后制作副本 (zfs-over-ssh),但恐怕这不是您的情况。
编辑/2:为了避免任何类型的问题,即使我不明白它们可能是什么,我也不会指出哪种软件适合这种情况(大数据库备份的WAN传输)。
如果有人知道可以执行此操作的软件,请告诉我。
开源项目有数千个,当然我不能说了解所有项目。