本篇为备份篇。
因为装的东西不多,所以需要备份的只有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 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 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:需要执行的命令
文章评论