情况很复杂

情况很复杂

我们希望从远程服务器备份/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传输)。
如果有人知道可以执行此操作的软件,请告诉我。
开源项目有数千个,当然我不能说了解所有项目。

相关内容