从零开始在centos搭建博客(二)
本篇为备份篇。
因为装的东西不多,所以需要备份的只有mysql和wordpress的文件夹。
备份mysql
mysql备份命令
使用mysqldump命令,格式如下:
# 这是格式
mysqldump -u${username} -p${dbrootpwd} --databases ${DBname} > ${DumpFile}
# 这是例子
mysqldump -uroot -proot --databases wordpress > /home/backup.sql
使用${}代表的是变量,请自行替换
username:数据库用户名
dbrootpwd:数据库用户的密码
DBname:需要备份的数据库
DumpFile:输出的文件路径+文件名
搭配docker使用
因为mysql使用的是docker安装的,服务器所在的Centos中是没有mysql的相关命令的,执行命令需要到mysql的docker容器中。
# 这是格式
docker exec -it ${container} ${sqlCmd}
# 这是例子
docker exec -it 123321 mysqldump -uroot -proot --databases wordpress > /home/backup.sql
使用${}代表的是变量,请自行替换
container:docker容器的别名或id
sqlCmd:需要执行的备份命令
备份脚本
此脚本是基于oneinstack修改的
逻辑是:
- mysqldump生成xxx.sql文件
- 压缩xxx.sql为xxx.tgz
- 删除xxx.sql和旧的压缩文件
新建db_bk.sh文件,以下是内容:
#!/bin/bash
# 引用同目录下的options.conf文件
. ./options.conf # 传递参数
DBname=$1
# 日志
LogFile=${backup_dir}/db.log
# 临时文件
DumpFile=${backup_dir}/DB_${DBname}_$(date +%Y%m%d_%H).sql
# 新的压缩文件
NewFile=${backup_dir}/DB_${DBname}_$(date +%Y%m%d_%H).tgz
# 旧的压缩文件
OldFile=${backup_dir}/DB_${DBname}_$(date +%Y%m%d --date="${expired_days} days ago")*.tgz
# 备份目录不存在则创建
[ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir} # 使用mysql的show databases判断数据库是否存在
DB_tmp=`docker exec -it mysql mysql -uroot -p${dbrootpwd} -e "show databases\G" | grep ${DBname}`
[ -z "${DB_tmp}" ] && { echo "[${DBname}] not exist" >> ${LogFile} ; exit 1 ; } # 删除旧的压缩文件
if [ -n "`ls ${OldFile} 2>/dev/null`" ]; then
rm -f ${OldFile}
echo "[${OldFile}] Delete Old File Success" >> ${LogFile}
else
echo "[${OldFile}] Delete Old Backup File" >> ${LogFile}
fi # 判断新的压缩文件是否已存在
if [ -e "${NewFile}" ]; then
echo "[${NewFile}] The Backup File is exists, Can't Backup" >> ${LogFile}
else
# 生成临时备份文件
docker exec -it mysql mysqldump -uroot -p${dbrootpwd} --databases ${DBname} > ${DumpFile}
# 进入到备份目录
pushd ${backup_dir} > /dev/null
# 压缩临时文件
tar czf ${NewFile} ${DumpFile##*/} >> ${LogFile} 2>&1
# 输出日志
echo "[${NewFile}] Backup success ">> ${LogFile}
# 删除临时文件
rm -f ${DumpFile}
# 退回之前的目录
popd > /dev/null
fi
以下是options.conf文件的部分内容
# mysql相关
backup_dir=/home/backup
dbrootpwd='root'
expired_days=5
执行脚本
# 这是格式
./db_bk.sh #{DBname}
# 这是例子,数据库名为wordpress
./db_bk.sh wordpress
备份wordpress
编写脚本
备份wordpress其实只需要备份wordpress所在的html目录即可。
所以脚本也很简单,就是压缩相关目录,删除旧的压缩文件。
新建website_bk.sh文件,以下是内容:
#!/bin/bash . ./options.conf # 变量定义
WebSite=$1
LogFile=${backup_dir}/web.log
NewFile=${backup_dir}/Web_${WebSite}_$(date +%Y%m%d_%H).tgz
OldFile=${backup_dir}/Web_${WebSite}_$(date +%Y%m%d --date="${expired_days} days ago")*.tgz
# 备份文件夹不存在则创建
[ ! -e "${backup_dir}" ] && mkdir -p ${backup_dir}
# 需要备份的目录不存在则退出
[ ! -e "${wwwroot_dir}/${WebSite}" ] && { echo "[${wwwroot_dir}/${WebSite}] not exist" >> ${LogFile} ; exit 1 ; } # 判断大小,如果小于1024m
if [ `du -sm "${wwwroot_dir}/${WebSite}" | awk '{print $1}'` -lt 1024 ]; then
if [ -n "`ls ${OldFile} 2>/dev/null`" ]; then
rm -f ${OldFile}
echo "[${OldFile}] Delete Old File Success" >> ${LogFile}
else
echo "[${OldFile}] Delete Old Backup File" >> ${LogFile}
fi # 如果文件已存在,则不重复备份
if [ -e "${NewFile}" ]; then
echo "[${NewFile}] The Backup File is exists, Can't Backup" >> ${LogFile}
else
pushd ${wwwroot_dir} > /dev/null
tar czf ${NewFile} ./${WebSite} >> ${LogFile} 2>&1
echo "[${NewFile}] Backup success ">> ${LogFile}
popd > /dev/null
fi
else
rsync -crazP --delete ${wwwroot_dir}/${WebSite} ${backup_dir}
fi
以下是options.conf文件的部分内容
backup_dir=/home/backup
wwwroot_dir=/home/docker-workspace/wordpress
website_name=html
expired_days=5
执行脚本
./website_bk.sh html
备份OSS
使用的是ossutil
以下是相关命令:
# 上传文件
./ossutil64 cp -f file_url cloud_url
# 删除命令
./ossutil64 rm oss://bucketname[/prefix]
定时执行
备份的脚本需要定时执行,这里用的是crontab。
安装
一般centos都有安装crontab,检查是否安装:
rpm -qa | grep crontab
安装命令:
yum -y install vixie-cronyum -y install crontabs
使用
crontab -e进入编辑页或者vi /etc/crontab
区别在于:前者配置是针对当前用户的,后者是针对系统的
添加执行脚本的定时任务:
# 这是格式
${cron} ${cmd}
# 这是例子
0 0 * * 1 /home/xxx.sh > /dev/null 2>&1
使用${}代表的是变量,请自行替换
cron:cron表达式,注意,crontab所使用的cron表达式,与java使用的cron有所区别,是不包含秒的,看 /etc/crontab的注释就知道了
cmd:需要执行的命令
从零开始在centos搭建博客(二)的更多相关文章
- 从零开始在centos搭建博客(一)
本篇为安装篇. 基于centos 7.9,大部分东西使用docker安装. 软件列表:docker + mysql + wordpress 安装docker yum install -y yum-ut ...
- hexo零基础搭建博客系列(一)
关于其他搭建 [hexo4快速搭建博客(二)更换主题](https://blog.csdn.net/weixin_41800884/article/details/103750634)[hexo4快速 ...
- hexo搭建博客系列(三)美化主题
文章目录 其他搭建 1. 添加博客图标 2. 鼠标点击特效(二选一) 2.1 红心特效 2.2 爆炸烟花 3. 设置头像 4. 侧边栏社交小图标设置 5. 文章末尾的标签图标修改 6. 访问量统计 7 ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置
前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)
前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)
前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置
前言 有朋友问了我关于博客系统搭建相关的问题,由于是做开发相关的工作,我给他推荐的是使用github的gh-pages服务搭建个人博客. 推荐理由: 免费:github提供gh-pages服务是免费的 ...
- flask tutorial => make a blog :) flask 搭建博客系统从零开始!
please follow the tutorial from the official site :) http://flask.pocoo.org/docs/ You could download ...
- Django搭建博客网站(二)
Django搭建自己的博客网站(二) 这里主要讲构建系统数据库Model. Django搭建博客网站(一) model 目前就只提供一个文章model和一个文章分类标签model,在post/mode ...
随机推荐
- 馒头的1day漏洞巡舰系统
馒头的1day漏洞巡舰系统 1day漏洞巡舰系统的目的 1day漏洞巡舰系统的可行性 1day漏洞巡舰系统所用技术 1day漏洞巡舰系统思维导图 1day漏洞巡舰系统初步设计图 1day漏洞巡舰系统初 ...
- 解构HE2E中的Kubernetes技术应用
摘要:我们从Kubernetes技术应用的角度解构华为云DevCloud HE2E DevOps实践. 本文分享自华为云社区<解构HE2E中的Kubernetes技术应用>,作者: 敏捷小 ...
- kvm 虚拟化技术 1.2 之配置网络桥接
实验一:配置网路桥接模式 默认kvm的网络是NAT模式,一般生产环境用桥接模式,把虚拟机改成桥接模式 1.查看是否安装网桥设备 [root@kibana opt]# rpm -qa|grep brid ...
- 136. Single Number - LeetCode
Question 136. Single Number Solution 思路:构造一个map,遍历数组记录每个数出现的次数,再遍历map,取出出现次数为1的num public int single ...
- Android 实现开机自启APP
原文地址:Android 实现开机自启APP - Stars-One的杂货小窝 公司有个项目,需要实现自启动的功能,本来想着是设置桌面启动器的方式去实现,但是设备是华为平板(EMUI系统),不允许设置 ...
- Linux版本的项目环境搭建
项目环境docker及docker-compose文档 1.Linux环境介绍 centos7.6 16G以上内存空间(至少8G) 2.静态IP设置 1.找到配置文件 cd /etc/sysconfi ...
- django框架8
内容概要 ajax简介 前后端传输数据编码格式 ajax发送json格式数据 ajax携带文件数据 回调机制处理策略 内容详情 ajax简介 页面不刷新的情况下可以与后端进行数据交互 异步提交 局部刷 ...
- GDKOI 2021 Day2 TG 总结
又是爆炸的一天,炸多了本蒟蒻已经习以为常 但今天比昨天整整高了 40 分!!!!却还是没有 100 今天本蒟蒻本想模仿奆佬的打字速度,结果思路混乱让我无法开始 T1 不是吧怎么是期望 dp ,期望值怎 ...
- cool-admin vite-vue3 打包部署 nginx代理设置
location /api {rewrite ^/api/(.*)$ /$1 break;proxy_pass http://xxx.com;}location /socket.io {rewrite ...
- .Net CLR GC动态获取函数头地址,C++的骚操作(慎入)
前言: 太懒了,从没有在这里正儿八经的写过文章.看到一些人的高产,真是惭愧.决定稍微变得不那么懒.如有疏漏,请指正. .net的GC都谈的很多了,本篇主要是剑走偏锋,聊聊一些个人认为较为核心的细节方面 ...