美文网首页
数据备份迁移

数据备份迁移

作者: genglintong | 来源:发表于2017-10-13 19:59 被阅读13次

    起因:
    今天公司有台线上数据主机双硬盘损坏,随时都会有宕机的危险,因此需要对该机器上的代码和数据进行数据备份。

    准备工作

    1.申请获取该主机以及备份主机的备份数据的读写权限
    2.查看进程或者crontab查看线上使用的代码路径
    crontab -l

    定时任务

    迁移方法

    使用SCP命令进行跨主机数据复制
    SCP XXX:/home/video/a.txt ./ 将目标机器文件复制到本地目录下
    SCP ./a.txt XXX:/home/video/ 将本地文件复制到远程机器下
    传输一个目录SCP -r XXX:/home/video ./

    问题

    使用SCP迁移耗时太慢
    经过分析发现有如下两个原因:
    1.需要迁移的文件数量太大
    du -sh ./*

    2.需要迁移的文件太多
    ls -lR|grep "^_"|wc -l

    可以看到仅仅一个目录下就有5000+文件
    因此一般的操作就是先打包再上传

    解决

    对于问题二来说,一般都是先打包再上传,这样会比较快一点
    tar a.tar.gz -zcvf ./
    然后再去使用SCP传输

    但是对于问题一而言就需要首先找出哪些文件太大(毕竟code不可能达到G)
    使用du -sh /目录 逐步发现那些文件比较大

    可以看到/logs/目录占94G的空间,而我们之前程序运行积压的logs相比于我们的从程序代码可配置文件来说,重要性就很低了,因此我们可以尝试着去减少迁移这部分代码。
    如何迁移一个目录内去除某个子目录的所有文件代码呢?

    思路一:
    根据正则匹配,SCP 去递归复制除了logs的文件(考虑到logs文件的文件名相似性)

    这种方式问题比较多,一个是仍然SCP复制很多文件,速度较慢,另一个是这种方法不容易保持文件间的目录结构。

    思路二:
    利用tar的特性
    tar test.tar.gz --exclude=./test/ext ./test
    打包test目录下,非ext子目录的所有文件,并且保持其目录结构

    tar -zcvf wangwenfeng.tar.gz --exclude=../wangwenfeng/work/cooper-cover-baishi/logs --exclude=../wangwenfeng/work/paytofree-monitor/logs --exclude=../wangwenfeng/work/person-to-aladdin/logs --exclude=../wangwenfeng/work/topqtobaishi/logs ../wangwenfeng
    然后再使用SCP传输就很快了

    命令总结

    1.SCP XXX:/home/video/a.txt ./ 将目标机器文件复制到本地目录下
    2.ls -lR|grep "^_"|wc -l 递归查找目录文件总数
    3.du -sh ./* 查看文件夹内子文件总大小
    4.tar test.tar.gz --exclude=./test/ext ./test打包test目录下,非ext子目录的所有文件,并且保持其目录结构

    相关文章

      网友评论

          本文标题:数据备份迁移

          本文链接:https://www.haomeiwen.com/subject/ghhgyxtx.html