MENU

自动备份大法

March 28, 2018 • Read: 668 • Services,Blog,Linux OS

引入

最近看到几个数据爆炸的可怕事件,虽然我平时偶尔有手动备份的,但还是不怎么放心。以前有用过lsyncd自动同步到其他机器。但昨天发生了一个更可怕的事情,我重启机器后发现mysql启动不了,apt也不能update了。当时就蒙了,后来发现是我的/var目录满了。mysql与apt都需要用到/var目录,所以爆炸了。但是为什么会满呢…

因为一个lsyncd的日志写了34GB。

1.png/

 

操作

放弃lsyncd。

以前因为懒,写过一个自动压缩网页根目录的脚本,配合crontab在每天的凌晨自动执行一遍非常不错。

但是最重要的不是根目录,而是数据库。最近有了解到mysqldump,表示可以crontab一下。

dump为sql文件

导出整个数据库:

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

例:

mysqldump -u root -p typecho > typecho_backup.sql

导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

例:

mysqldump -u root -p typecho users > users_backup.sql

导出一个数据库结构

mysqldump -u 用户名 -p -d 数据库名 > 导出的文件名

例:

mysqldump -u root -p -d typecho >  typecho.sql

 

导入数据库

mysql -u 用户名 -p 数据库名 < 数据库名.sql

例:

mysql -u root -p typecho < typecho.sql

实际操作了一下,确实很简单方便好用。但问题是,对于我这种勤(lan)快的人肯定要脚本自动一体化啊。

 

感觉很厉害的Script

自我感觉,自我感觉。

#!/bin/bash

#定义数据库信息
USER="root"
PASS="password"
HOST="localhost"
NAME="typecho"
NAME2="wordpress"

#其他信息
BAK_DIR="/root/backup/"
TIME=`date +%F`

#操作
mysqldump -u$USER -p$PASS -h$HOST $NAME > $NAME"_"$TIME.sql
mysqldump -u$USER -p$PASS -h$HOST $NAME2 > $NAME2"_"$TIME.sql

#压缩并移动
#tar -zPcvf /root/backup/tar.gz/sql/$NAME"_"$TIME.tar.gz /root/backup/$NAME"_"$TIME.sql
#tar -zPcvf /root/backup/tar.gz/sql/$NAME2"_"$TIME.tar.gz /root/backup/$NAME2"_"$TIME.sql

#删除多余文件
rm -rf /root/backup/$NAME"_"$TIME.sql /root/backup/$NAME2"_"$TIME.sql
rm -rf /root/$NAME"_"$TIME.sql /root/$NAME2"_"$TIME.sql

#删除三天前的数据
find /root/backup/tar.gz/sql -mtime +3 -name "*.*" -exec rm -rf {} \;

只要将其放到crontab中,并按时间进行执行。就能实现完美的sql备份了。

再加上以前写过的一些备份其他文件的Shell Script,就能实现最基本的收据备份了。并且七牛的云储存有个在Linux上的下载备份脚本。正好给了我不小的帮助。

(虽然喜欢写交互式的脚本,但是只要将命令挑出来放crontab就好了)

#!/bin/bash
#Defectink
echo "备份脚本"
#备份整个www目录
echo "
+---------------------------+            XX
| 1. 备份www整个目录        |     XXX  XXX
| 2. 备份.zshrc配置         |       XXXX
| 3. 备份apache2配置目录    |     XXXXX XXX
| 4. 备份Lets Encrypt目录   |         X
| 5. 备份qiniu云储存到本地  |       XXXXX
| 6. 备份apache2日志        |         X
| 7. 备份mysqlconf目录      |  XXXXXXXXXXXXX XX
| 8. 备份mysql日志          |         X
| 9. 备份mysql数据          |         X
| a. 执行以上全部           |         X
| b. 任意键及其退出         |         X
+---------------------------+
"
read an
case $an in
 1)
        #压缩并移动至备份目录
        tar -zPcvf /root/backup/tar.gz/www.tar.gz /var/www
        echo "解压缩时请添加'-P'参数。"
        ;;
 2)
        tar -zPcvf /root/backup/tar.gz/zshrc.tar.gz /root/.zshrc
        echo "解压缩时请添加'-P'参数。"
        ;;
 3)
        tar -zPcvf /root/backup/tar.gz/apache2.tar.gz /etc/apache2
        echo "解压缩时请添加'-P'参数。"
        ;;
 4)
        tar -zPcvf /root/backup/tar.gz/letsencrypt.tar.gz /etc/letsencrypt
        echo "解压缩时请添加'-P'参数。"
        ;;
 5)
        cd /root/backup/qiniu && ./qshell qdownload 10 qshell.conf
        tar -zPcvf /root/backup/qiniu/qshell-log.tar.gz /root/.qshell
        echo "good bey."
        ;;
 6)
        tar -zPcvf /root/backup/tar.gz/apache-log.tar.gz /var/log/apache2
        echo "解压缩时请添加'-P'参数。"
        ;;

 7)
        tar -zPcvf /root/backup/tar.gz/mysql-conf.tar.gz /etc/mysql/mysql.conf.d
        echo "解压缩时请添加'-P'参数。"
        ;;

 8)
        tar -zPcvf /root/backup/tar.gz/mysql-log.tar.gz /var/log/mysql
        echo "解压缩时请添加'-P'参数。"
        ;;
 9)
        tar -zPcvf /root/backup/tar.gz/mysql.tar.gz /var/lib/mysql
        echo "解压缩时请添加'-P'参数。"
        ;;

 a)
        tar -zPcvf /root/backup/tar.gz/www.tar.gz /var/www
        tar -zPcvf /root/backup/tar.gz/zshrc.tar.gz /root/.zshrc
        tar -zPcvf /root/backup/tar.gz/apache2.tar.gz /etc/apache2
        tar -zPcvf /root/backup/tar.gz/letsencrypt.tar.gz /etc/letsencrypt
        tar -zPcvf /root/backup/tar.gz/apache-log.tar.gz /var/log/apache2
        tar -zPcvf /root/backup/tar.gz/mysql-conf.tar.gz /etc/mysql/mysql.conf.d
        tar -zPcvf /root/backup/tar.gz/mysql-log.tar.gz /var/log/mysql
        tar -zPcvf /root/backup/tar.gz/mysql.tar.gz /var/lib/mysql
        cd qiniu && ./qshell qdownload 10 qshell.conf
        echo "good bey."
        ;;

 b)
        exit
        echo "good bey."
        ;;
 *)
        exit
        echo "good bey."
        ;;
esac

 

写入crontab

先来简单的介绍下可爱的crontab文件的时间格式吧。

2.png/

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

 

然后就是写到Crontab里去了。第一次我也是以为直接找到并编辑crontab这个文件的,后来才发现,原来人家有编辑的命令的:

crontab -e

后按照格式讲我们的脚本写进去就好了。

# m h  dom mon dow   comman
0 5 * * * /bin/sh /root/backup/c.sh
0 4 * * * /bin/sh /root/backup/d.sh

 

结尾

进过超级简单的操作再配合定时任务,就能实现自动化的各种各样的操作了。对于备份这种操作,手动来做的话迟早会累死,就是不累也会感觉到烦。所以将其运用到定时任务上就是非常的人性化了。主要是方便,不需要任何的人工参与。

对于数据这方面的,还是经常性的备份比较重要。不光光是不本机的备份,也要经常性的实施多机备份。


本文使用知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议许可
转载时请保留出处:《自动备份大法》https://www.defectink.com/defect/775.html,蟹蟹∠( ᐛ 」∠)_.

Tags: None
Archives QR Code Tip
QR Code for this page
Tipping QR Code
Leave a Comment

已有 8 条评论
  1. 自动备份大法,腻害@(小乖)

  2. mysqldump 备份数据库,cp 备份主题和插件,git push 到 coding,删除备份文件,每天执行一次@(太开心)

    1. @九四自动备份大法好ヾ(≧∇≦*)ゝ

    2. @Defectink不怕天灾人祸,就怕哪天手误 rm -rf /* @(笑眼)

  3. 那只黑猫。。。。图没扣干净。。。。#(看不见)

    1. @cunzher从我的名字的前几个字母就能看出一个单词“Defect”,暗寓着“瑕疵”与“不完美”。所以我这个头像走的是“No Perfect”的概念。也就是传说中的不完美主义。

      想了一下午,终于能吹出来了@(滑稽)

    2. @cunzher所以其实我故意不扣干净的。真的不是当初懒,真的。#(脸红)

    3. @Defectink好吧你赢了#(咽气)