利用Dropbox自动备份网站数据及SQL数据库的折腾记录

发布于 2018-07-13  1605 次阅读


讲道理网上很多教程的,为啥我就还是要写呢?【其实我很懒的】因为我——就要!

首先是准备一个Dropbox账号,这个hin简单的,推荐使用google邮箱注册,注册完成后打开Apps界面。

点击 Create App 按钮,创建一个 App:

这里注意app的名字是任意的,当然啦,dropbox不允许出现相同的名字,所以别人注册的名字就用不了啦,这里推荐使用自己网站的域名进行create。

创建好后进入自己的app,如下图,点击画圈的图标,也就是Generated  access token:

当然这一步可以暂缓,先SSH进入自己的VPS,可以通过putty和Xshell进入(em……如何进入就不用我说了吧,我才不是就蹭蹭的那种呢)

使用代码获取Dropbox Uploader,这里提供两种,我是通过第二种获得的,不要问我为什么,我——不!知!道!

git clone https://github.com/andreafabrizi/Dropbox-Uploader.git

curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

在执行安装完Dropbox后会自动弹出请求输入access token的语段,这个时候把刚刚的access token输入进去并且y确定就好了(如果没有弹出来……自己google去……抓头)

然后赋予dropbox_uploader权限(大概就是为sh文件增加可执行权限),这样:

chmod +x dropbox_uploader.sh

可以通过./dropbox_uploader.sh info查看自己刚才绑定的信息,如果提示错误,试试在前面加sh空格再执行。

到了这一步,我们的所有准备工作就已经准备完毕(雾)

不不,我们还要安装7zip压缩软件,因为一般建站传上去的文件名称中或多或少都会不可避免的有一些汉字存在,而在Linux环境下只有rar和7z格式才支持中文编码,而rar又是收费的,所以我推荐7z,这里执行以下命令进行安装:

yum install p7zip

我是centos系统啦,所以是这个命令,如果是Debian的话可能是使用:apt-get install p7zip,如果以后需要卸载7zip,使用yum -y remove p7zip试试看。

好了,到了这一步,我们的所有准备工作就已经准备完毕w

下面开始吹逼——(/手动滑稽)

经过尝试,我使用以下代码(不要问我怎么获得的,不会google啊,口亨口即):

7za a -t7z -r /tmp/backup.7z /data/www/005233.xyz:9999 -mx1

这个意思就是把/data/www/005233.xyz:9999目录下的所有文件使用低压缩方式添加到/tmp/backup.7z压缩包中。

然后利用刚才安装的dropbox_uploader进行上传:

./dropbox_uploader.sh upload /tmp/backup.7z /backup/backup.7z

大概意思就是使用dropbox_uploader将位于/tmp/backup.7z的文件上传到绑定的dropbox/app/backup目录下并命名为backup.7z这样。

然后删除刚才的压缩包:

rm -f /tmp/backup.7z

-f就是不提示直接删除,这样。

接着是SQL数据库:

  • [uname] 数据用户名
  • [pass] 数据密码
  • [dbname] 数据库名称
  • [backupfile.sql] 备份文件

导出数据:

mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]

注意opt前面的两个--是没有空格的,然后-p后面的密码也是不加空格的。

需要导出压缩的数据库可以这样:

mysqldump --opt -u [uname] -p[pass] [dbname] | gzip -9 > [backupfile.sql.gz]

如果以后需要使用这个文件进行恢复操作的话可以执行以下命令:

mysql -u [uname] -p[pass] [db_to_restore] < [backupfile.sql]

然后便是将导出的数据库文件上传到dropbox,标准语句是这样:

./dropbox_uploader.sh upload [sourcefile] [remotefile]

我的是这样:

mysqldump --opt -u 数据库用户名 -p数据库密码 需要导出的数据库名称 > backupfile.sql

./dropbox_uploader.sh upload backupfile.sql /backup/backupfile.sql

大概意思就是……这么简单自己看……(懒)

然后作为一个强迫症,还是要删除刚才导出的数据库文件的:

rm -f /root/backupfile.sql

这里为啥我知道这个被我命名为backupfile.sql的文件在root下面呢,这里我使用了find命令:

find / -name "backupfile.sql"

大概意思就是从根目录下查找backupfile.sql并给出所在位置。

铛铛铛铛!完成!(大雾)

喂喂,说好的jo本呢。(憋打我,听我说完)

最后将上面你自己编写的语句按顺序编写到notepad++里面,并且每个语句间进行提行并将文档转化为UNIX格式(具体操作编辑-文档格式转化-转化为UNIX格式,这里感谢@卡布

然后我是通过FileZilla软件将命名为backup.sh的jo本上传到/root/backup.sh(这里就不说咋个弄了,麻烦……)

一样的赋予backup.sh执行权限:

chmod +x /root/backup.sh

到这里可以尝试一下该shell脚本是否能正常运行:

sh ./backup.sh(我必须加sh不知道为什么……)

最后利用crontab命令添加定时任务:

crontab -e

打开crontab文件,注意这里是使用的VIM文字编辑工具,大概需要的操作如下(以下是一些废话):

vim简介:Linux世界几乎所有的配置文件都是以纯文本形式存在的,而在所有的Linux发行版系统上都有vi编辑器,因此利用简单的文字编辑软件就能够轻松地修改系统的各种配置了,非常方便。vi就是一种功能强大的文本编辑器,而vim则是高级版的vi,不但可以用不同颜色显示文字内容,还能进行诸如shell脚本、C语言程序编辑等功能,可以作为程序编辑器。

vim有三种模式:一般模式、编辑模式、命令模式。

下面是一些可以在一般模式中使用的命令:

  • x:删除一个字符
  • u :撤销一个操作(相当与 Ctrl+z)
  • dd :删除一行内容
  • dw :删除一个单词
  • yy :复制一行内容
  • yw :复制一个单词
  • p :粘贴一个之前删除或复制的行或者单词
  • e :跳到下个单词(LCTT 译注:词尾)(比单纯用方向键更快)
  • r :替换一个字母(按 r ,松开,然后再按新字母)

(当然我都不用……)

按i键(当然用a、o或者r也可以,大小写区分,具体区别见下)进入编辑模式,这时可以用←、→(不是表情!)移动光标。

①进入插入模式(6个命令)
【i】 从目前光标所在处插入
【I】 从目前光标
【a】 从当前光标所在的下一个字符处开始插入
【A】 从光标所在行的最后一个字符处开始插入
【o】 英文小写字母o,在目前光标所在行的下一行处插入新的一行并开始插入
【O】 英文大写字母O,在目前光标所在行的上一行处插入新的一行并开始插入
②进入替换模式(2个命令)
【r】 只会替换光标所在的那一个字符一次
【R】 会一直替换光标所在字符,直到按下[ESC]键为止
【[ESC]】 退出编辑模式回到一般模式

③一般模式切换到命令行模式
【:w】 保存文件
【:w!】 若文件为只读,强制保存文件
【:q】 离开vi
【:q!】 不保存强制离开vi
【:wq】 保存后离开
【:wq!】 强制保存后离开
【:! command】 暂时离开vi到命令行下执行一个命令后的显示结果
【:set nu】 显示行号
【:set nonu】 取消显示行号
【:w newfile】 另存为

所以,我的操作是,i→编辑→:wq(惊不惊喜意不意外w)

偏题了,回到crontab命令:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

举个栗子吧——

每天早上6点
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

每两个小时
0 */2 * * * echo "Have a break now." >> /tmp/test.txt

晚上11点到早上8点之间每两个小时和早上八点
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line

每小时执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly

每天执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily

每星期执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly

每月去执行/etc/cron.monthly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly

注意: "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。

上面抄的……我的是很简单的这样(还在测试中……):

44 4 * * 0 /root/backup.sh

每星期天4:44执行backup.sh,酱w

以后想到啥子再说啦,好累,趴~


做人,最重要的就是开心。