mirror of
https://github.com/DefectingCat/DefectingCat.github.io
synced 2025-07-15 16:51:37 +00:00
23 lines
18 KiB
HTML
23 lines
18 KiB
HTML
<!DOCTYPE html><html lang="zh-CN" data-default-color-scheme=""auto""><head><meta charset="UTF-8"><link rel="apple-touch-icon" sizes="76x76" href="/images/img/apple-touch-icon.webp"><link rel="icon" type="image/png" href="/images/img/favicon.webp"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,shrink-to-fit=no"><meta http-equiv="x-ua-compatible" content="ie=edge"><meta name="theme-color" content="#9DC8C8"><meta name="description" content=""><meta name="author" content="Defectink"><meta name="keywords" content=""><title>自动备份大法 - 🍭Defectink</title><link rel="stylesheet" href="https://cdn.defectink.com/static/twitter-bootstrap/4.5.3/css/bootstrap.min.css"><link rel="stylesheet" href="https://cdn.defectink.com/static/github-markdown-css/4.0.0/github-markdown.min.css"><link rel="stylesheet" href="/lib/hint/hint.min.css"><link rel="stylesheet" href="https://cdn.defectink.com/static/highlight.js/10.0.0/styles/github-gist.min.css"><link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_ba1fz6golrf.css"><link rel="stylesheet" href="https://cdn.defectink.com/static/t/font_1736178_kmeydafke9r.css"><link rel="stylesheet" href="/css/main.css"><link rel="stylesheet" href="/css/xfy.css"><script src="/js/utils.js"></script><script src="/js/color-schema.js"></script><meta name="generator" content="Hexo 5.2.0"><link rel="alternate" href="/xml/atom.xml" title="🍭Defectink" type="application/atom+xml"><link rel="alternate" href="/xml/rss.xml" title="🍭Defectink" type="application/rss+xml"></head><body><header style="height:75vh"><nav id="navbar" class="navbar fixed-top navbar-expand-lg navbar-dark scrolling-navbar"><div class="container"><a class="navbar-brand" href="/"> <strong>🍭Defectink</strong> </a> <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><div class="animated-icon"><span></span><span></span><span></span></div></button><div class="collapse navbar-collapse" id="navbarSupportedContent"><ul class="navbar-nav ml-auto text-center"><li class="nav-item"><a class="nav-link" href="/">🏠 首页</a></li><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">📕 索引</a><div class="dropdown-menu" aria-labelledby="navbarDropdown"><a class="dropdown-item" href="/categories/">🎁 分类</a> <a class="dropdown-item" href="/tags/">🎐 标签</a></div></li><li class="nav-item"><a class="nav-link" href="/archives/">📂 归档</a></li><li class="nav-item"><a class="nav-link" href="/about/">🎃 关于</a></li><li class="nav-item"><a class="nav-link" href="/links/">🙆♀️ 小伙伴</a></li><li class="nav-item"><a class="nav-link" href="/pgp/">🔐 PGP</a></li><li class="nav-item" id="search-btn"><a class="nav-link" data-toggle="modal" data-target="#modalSearch"> <i class="iconfont icon-search"></i> </a></li><li class="nav-item" id="color-toggle-btn"><a class="nav-link" href="javascript:"> <i class="iconfont icon-dark" id="color-toggle-icon"></i> </a></li></ul></div></div></nav><div class="banner intro-2" id="background" parallax="true" style="background:url(/images/img/post.webp) no-repeat center center;background-size:cover"><div class="full-bg-img"><div class="mask flex-center" style="background-color:rgba(0,0,0,.3)"><div class="container page-header text-center fade-in-up"><span class="h2" id="subtitle"></span><div class="mt-3"><span class="post-meta mr-2"><i class="iconfont icon-author" aria-hidden="true"></i> Defectink</span><span class="post-meta"><i class="iconfont icon-date-fill" aria-hidden="true"></i> <time datetime="2019-06-05 16:41" pubdate>2019年6月5日 下午</time></span></div><div class="mt-1"><span class="post-meta mr-2"><i class="iconfont icon-chart"></i> 1.1k 字</span><span class="post-meta mr-2"><i class="iconfont icon-clock-fill"></i> 14 分钟</span></div></div></div></div></div></header><main><div class="container-fluid"><div class="row"><div class="d-none d-lg-block col-lg-2"></div><div class="col-lg-8 nopadding-md"><div class="container nopadding-md" id="board-ctn"><div class="py-5" id="board"><article class="post-content mx-auto" id="post"><h1 style="display:none">自动备份大法</h1><p class="note note-info">本文最后水于:2020年11月2日 凌晨</p><div class="markdown-body" id="post-body"><h2 id="引入"><a href="#引入" class="headerlink" title="引入"></a>引入</h2><p>最近看到几个数据爆炸的可怕事件,虽然我平时偶尔有手动备份的,但还是不怎么放心。以前有用过lsyncd自动同步到其他机器。但昨天发生了一个更可怕的事情,我重启机器后发现mysql启动不了,apt也不能update了。当时就蒙了,后来发现是我的/var目录满了。mysql与apt都需要用到/var目录,所以爆炸了。但是为什么会满呢…</p><p>因为一个lsyncd的日志写了34GB。</p><p><img src="../images/%E8%87%AA%E5%8A%A8%E5%A4%87%E4%BB%BD%E5%A4%A7%E6%B3%95/2874899693.webp" srcset="/images/img/loading.gif" alt="1.webp/"></p><h2 id="操作"><a href="#操作" class="headerlink" title="操作"></a>操作</h2><p>放弃lsyncd。</p><p>以前因为懒,写过一个自动压缩网页根目录的脚本,配合crontab在每天的凌晨自动执行一遍非常不错。</p><p>但是最重要的不是根目录,而是数据库。最近有了解到mysqldump,表示可以crontab一下。</p><h3 id="dump为sql文件"><a href="#dump为sql文件" class="headerlink" title="dump为sql文件"></a>dump为sql文件</h3><p>导出整个数据库:</p><pre><code class="hljs nginx"><span class="hljs-attribute">mysqldump</span> -u 用户名 -p 数据库名 > 导出的文件名</code></pre><p>例:</p><pre><code class="hljs css"><span class="hljs-selector-tag">mysqldump</span> <span class="hljs-selector-tag">-u</span> <span class="hljs-selector-tag">root</span> <span class="hljs-selector-tag">-p</span> <span class="hljs-selector-tag">typecho</span> > <span class="hljs-selector-tag">typecho_backup</span><span class="hljs-selector-class">.sql</span></code></pre><p>导出一个表</p><pre><code class="hljs nginx"><span class="hljs-attribute">mysqldump</span> -u 用户名 -p 数据库名 表名> 导出的文件名</code></pre><p>例:</p><pre><code class="hljs routeros">mysqldump -u root -p typecho<span class="hljs-built_in"> users </span>> users_backup.sql</code></pre><p>导出一个数据库结构</p><pre><code class="hljs nginx"><span class="hljs-attribute">mysqldump</span> -u 用户名 -p -d 数据库名 > 导出的文件名</code></pre><p>例:</p><pre><code class="hljs css"><span class="hljs-selector-tag">mysqldump</span> <span class="hljs-selector-tag">-u</span> <span class="hljs-selector-tag">root</span> <span class="hljs-selector-tag">-p</span> <span class="hljs-selector-tag">-d</span> <span class="hljs-selector-tag">typecho</span> > <span class="hljs-selector-tag">typecho</span><span class="hljs-selector-class">.sql</span></code></pre><h3 id="导入数据库"><a href="#导入数据库" class="headerlink" title="导入数据库"></a>导入数据库</h3><pre><code class="hljs css"><span class="hljs-selector-tag">mysql</span> <span class="hljs-selector-tag">-u</span> 用户名 <span class="hljs-selector-tag">-p</span> 数据库名 < 数据库名<span class="hljs-selector-class">.sql</span></code></pre><p>例:</p><pre><code class="hljs css"><span class="hljs-selector-tag">mysql</span> <span class="hljs-selector-tag">-u</span> <span class="hljs-selector-tag">root</span> <span class="hljs-selector-tag">-p</span> <span class="hljs-selector-tag">typecho</span> < <span class="hljs-selector-tag">typecho</span><span class="hljs-selector-class">.sql</span></code></pre><p>实际操作了一下,确实很简单方便好用。但问题是,对于我这种勤(lan)快的人肯定要脚本自动一体化啊。</p><h3 id="感觉很厉害的Script"><a href="#感觉很厉害的Script" class="headerlink" title="感觉很厉害的Script"></a>感觉很厉害的Script</h3><p>自我感觉,自我感觉。</p><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash</span>
|
||
<span class="hljs-comment">#定义数据库信息</span>
|
||
USER=<span class="hljs-string">"root"</span>
|
||
PASS=<span class="hljs-string">"password"</span>
|
||
HOST=<span class="hljs-string">"localhost"</span>
|
||
NAME=<span class="hljs-string">"typecho"</span>
|
||
NAME2=<span class="hljs-string">"wordpress"</span>
|
||
<span class="hljs-comment">#其他信息</span>
|
||
BAK_DIR=<span class="hljs-string">"/root/backup/"</span>
|
||
TIME=`date +%F`
|
||
<span class="hljs-comment">#操作</span>
|
||
mysqldump -u<span class="hljs-variable">$USER</span> -p<span class="hljs-variable">$PASS</span> -h<span class="hljs-variable">$HOST</span> <span class="hljs-variable">$NAME</span> > <span class="hljs-variable">$NAME</span><span class="hljs-string">"_"</span><span class="hljs-variable">$TIME</span>.sql
|
||
mysqldump -u<span class="hljs-variable">$USER</span> -p<span class="hljs-variable">$PASS</span> -h<span class="hljs-variable">$HOST</span> <span class="hljs-variable">$NAME2</span> > <span class="hljs-variable">$NAME2</span><span class="hljs-string">"_"</span><span class="hljs-variable">$TIME</span>.sql
|
||
<span class="hljs-comment">#压缩并移动</span>
|
||
<span class="hljs-comment">#tar -zPcvf /root/backup/tar.gz/sql/$NAME"_"$TIME.tar.gz /root/backup/$NAME"_"$TIME.sql</span>
|
||
<span class="hljs-comment">#tar -zPcvf /root/backup/tar.gz/sql/$NAME2"_"$TIME.tar.gz /root/backup/$NAME2"_"$TIME.sql</span>
|
||
<span class="hljs-comment">#删除多余文件</span>
|
||
rm -rf /root/backup/<span class="hljs-variable">$NAME</span><span class="hljs-string">"_"</span><span class="hljs-variable">$TIME</span>.sql /root/backup/<span class="hljs-variable">$NAME2</span><span class="hljs-string">"_"</span><span class="hljs-variable">$TIME</span>.sql
|
||
rm -rf /root/<span class="hljs-variable">$NAME</span><span class="hljs-string">"_"</span><span class="hljs-variable">$TIME</span>.sql /root/<span class="hljs-variable">$NAME2</span><span class="hljs-string">"_"</span><span class="hljs-variable">$TIME</span>.sql
|
||
<span class="hljs-comment">#删除三天前的数据</span>
|
||
find /root/backup/tar.gz/sql -mtime +3 -name <span class="hljs-string">"*.*"</span> -<span class="hljs-built_in">exec</span> rm -rf {} \;</code></pre><p>只要将其放到crontab中,并按时间进行执行。就能实现完美的sql备份了。</p><p>再加上以前写过的一些备份其他文件的Shell Script,就能实现最基本的收据备份了。并且七牛的云储存有个在Linux上的下载备份脚本。正好给了我不小的帮助。</p><p>(虽然喜欢写交互式的脚本,但是只要将命令挑出来放crontab就好了)</p><h3 id="写入crontab"><a href="#写入crontab" class="headerlink" title="写入crontab"></a>写入crontab</h3><p>先来简单的介绍下可爱的crontab文件的时间格式吧。</p><p><img src="../images/%E8%87%AA%E5%8A%A8%E5%A4%87%E4%BB%BD%E5%A4%A7%E6%B3%95/4160640759.webp" srcset="/images/img/loading.gif" alt="2.webp/"></p><p>星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。</p><p>逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”</p><p>中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”</p><p>正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。</p><p>然后就是写到Crontab里去了。第一次我也是以为直接找到并编辑crontab这个文件的,后来才发现,原来人家有编辑的命令的:</p><pre><code class="hljs ebnf"><span class="hljs-attribute">crontab -e</span></code></pre><p>然后按照格式讲我们的脚本写进去就好了。</p><pre><code class="hljs awk"><span class="hljs-comment"># m h dom mon dow comman</span>
|
||
<span class="hljs-number">0</span> <span class="hljs-number">5</span> * * * <span class="hljs-regexp">/bin/</span>sh <span class="hljs-regexp">/root/</span>backup/c.sh
|
||
<span class="hljs-number">0</span> <span class="hljs-number">4</span> * * * <span class="hljs-regexp">/bin/</span>sh <span class="hljs-regexp">/root/</span>backup/d.sh</code></pre><h2 id="结尾"><a href="#结尾" class="headerlink" title="结尾"></a>结尾</h2><p>进过超级简单的操作再配合定时任务,就能实现自动化的各种各样的操作了。对于备份这种操作,手动来做的话迟早会累死,就是不累也会感觉到烦。所以将其运用到定时任务上就是非常的人性化了。主要是方便,不需要任何的人工参与。</p><p>对于数据这方面的,还是经常性的备份比较重要。不光光是不本机的备份,也要经常性的实施多机备份。</p></div><hr><div><div class="post-metas mb-3"><div class="post-meta mr-3"><i class="iconfont icon-category"></i> <a class="hover-with-bg" href="/categories/Linux/">Linux</a></div><div class="post-meta"><i class="iconfont icon-tags"></i> <a class="hover-with-bg" href="/tags/Linux/">Linux</a></div></div><p class="note note-warning"><a target="_blank" href="https://zh.wikipedia.org/wiki/Wikipedia:CC_BY-SA_3.0%E5%8D%8F%E8%AE%AE%E6%96%87%E6%9C%AC" rel="nofollow noopener noopener">CC BY-SA 3.0❤</a></p><div class="post-prevnext row"><article class="post-prev col-6"><a href="/defect/public-key-cryptgraphy.html"><i class="iconfont icon-arrowleft"></i> <span class="hidden-mobile">公开密钥密码学🔑</span> <span class="visible-mobile">上一篇</span></a></article><article class="post-next col-6"><a href="/defect/basic-knowledge-of-qinq.html"><span class="hidden-mobile">QinQ基础操作</span> <span class="visible-mobile">下一篇</span><i class="iconfont icon-arrowright"></i></a></article></div></div><article class="comments" id="comments"><div id="vcomments"></div><script type="text/javascript">function loadValine(){addScript("https://cdn.defectink.com/static/valine/1.4.14/Valine.min.js",function(){new Valine({el:"#vcomments",app_id:"dD9t7mcIBVzJWag5ez6GPy2v-MdYXbMMI",app_key:"bWG6pmKsEscrH4JjrpNNAAy6",placeholder:"嘤嘤嘤???",path:window.location.pathname,avatar:"retro",meta:["nick","mail","link"],pageSize:"10",lang:"zh-CN",highlight:!0,recordIP:!1,serverURLs:""})})}waitElementVisible("vcomments",loadValine)</script><noscript>Please enable JavaScript to view the <a target="_blank" href="https://valine.js.org" rel="nofollow noopener noopener">comments powered by Valine.</a></noscript></article></article></div></div></div><div class="d-none d-lg-block col-lg-2 toc-container" id="toc-ctn"><div id="toc"><p class="toc-header"><i class="iconfont icon-list"></i> 目录</p><div id="tocbot"></div></div></div></div></div></main><a id="scroll-top-button" href="#" role="button"><i class="iconfont icon-arrowup" aria-hidden="true"></i></a><div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel" aria-hidden="true"><div class="modal-dialog modal-dialog-scrollable modal-lg" role="document"><div class="modal-content"><div class="modal-header text-center"><h4 class="modal-title w-100 font-weight-bold">搜索</h4><button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button></div><div class="modal-body mx-3"><div class="md-form mb-5"><input type="text" id="local-search-input" class="form-control validate"> <label data-error="x" data-success="v" for="local-search-input">关键词</label></div><div class="list-group" id="local-search-result"></div></div></div></div></div><footer class="text-center mt-5 py-3"><div class="footer-content"><a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a><i class="iconfont icon-love"></i> <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a></div><div class="beian"><a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow noopener">皖ICP备17017808号</a></div></footer><script src="https://cdn.defectink.com/static/jquery/3.4.1/jquery.min.js"></script><script src="https://cdn.defectink.com/static/twitter-bootstrap/4.5.3/js/bootstrap.min.js"></script><script src="/js/debouncer.js"></script><script src="/js/main.js"></script><script src="/js/lazyload.js"></script><script defer="defer" src="https://cdn.defectink.com/static/clipboard.js/2.0.6/clipboard.min.js"></script><script src="/js/clipboard-use.js"></script><script src="/js/xfy.js"></script><script src="https://cdn.defectink.com/static/tocbot/4.11.1/tocbot.min.js"></script><script>$(document).ready(function(){var t=$("#board-ctn").offset().top;tocbot.init({tocSelector:"#tocbot",contentSelector:"#post-body",headingSelector:"h1,h2,h3,h4,h5,h6",linkClass:"tocbot-link",activeLinkClass:"tocbot-active-link",listClass:"tocbot-list",isCollapsedClass:"tocbot-is-collapsed",collapsibleClass:"tocbot-is-collapsible",collapseDepth:3,scrollSmooth:!0,headingsOffset:-t}),0<$(".toc-list-item").length&&$("#toc").css("visibility","visible")})</script><script src="https://cdn.defectink.com/static/typed.js/2.0.11/typed.min.js"></script><script>var typed=new Typed("#subtitle",{strings:[" ","自动备份大法 "],cursorChar:"❤",typeSpeed:70,loop:!1});typed.stop(),$(document).ready(function(){$(".typed-cursor").addClass("h2"),typed.start()})</script><script src="/js/local-search.js"></script><script>var path="/xml/local-search.xml",inputArea=document.querySelector("#local-search-input");inputArea.onclick=function(){searchFunc(path,"local-search-input","local-search-result"),this.onclick=null}</script><script src="https://cdn.defectink.com/static/fancybox/3.5.7/jquery.fancybox.min.js"></script><link rel="stylesheet" href="https://cdn.defectink.com/static/fancybox/3.5.7/jquery.fancybox.min.css"><script>$("#post img:not(.no-zoom img, img[no-zoom]), img[zoom]").each(function(){var t=document.createElement("a");$(t).attr("data-fancybox","images"),$(t).attr("href",$(this).attr("src")),$(this).wrap(t)})</script><script src="https://cdn.defectink.com/static/mermaid/8.5.0/mermaid.min.js"></script><script>window.mermaid&&mermaid.initialize({theme:"default"})</script></body></html> |