数据库自动备份脚本


1 环境介绍

在聊实施步骤之前我们先来看看我的应用环境:
所在平台:Aliyun ECS 云服务器,CentOS 7.5 。只有40GB的硬盘,空间非常局限
所安装的Mysql 5.7,是直接建在阿里云的云轻量上
云端存储采用阿里云OSS,直接买40GB一年的存储包,9元钱。但是需要注意因为只买了存储包,在使用中还要注意会产生流量,具体收费已阿里云平台为主。
使用到的工具有 MYSQL client端、linux压缩工具gzip、阿里云OSS命令行工具Ossutil

2 操作步骤

2.1 本地备份mysql数据库
本地备份mysql数据库是非常简单的mysql命令,随便百度一大把教程,我就不多说了直接上代码:

mysqldump -u root -p123456 sys > /data/mysqlbackup/sys.sql

mysqldump是mysql备份命令;
-u表示指定用户名,如:-uscott 表示指定用户名为scott,当然mysql没有scott用户,scott是Oracle的用户;
-p表示指定密码,如-p123456,表示该用户的密码为123456;
sys表示的是数据库名称,这里使用的是users数据库,如果要备份其他数据库请将sys换成对应名称即可;

/data/mysqlbackup/sys.sql 表示指定将备份文件存放在/data/mysqlbackup/文件夹内,命名为sys.sql
一般情况备份后产生的.sql

文件比较大,占用空间多,所以建议进行压缩,方便传输,下面介绍试一下使用的压缩命令和解压缩命令:

gzip sys.sql        # 压缩sys.sql 文件为.gz 格式
gunzip zxvf sys.sql.gz # 解压缩 sys.sql.gz

2.2 使用shell脚本实现mysql备份
shell 脚本是在linux 上强大的执行语言,我们要将刚刚在上面执行的备份语句、压缩语句 形成一个shell脚本,执行xxx.sh即可把备份、压缩自动执行完成;
下面贴出我自己写的执行脚本如下:

#!/bin/bash
#备份保存路径
backup_dir=~/Downloads/mysqlbackup/
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
tool=mysqldump
# 主机
host=127.0.0.1
#用户名
username=root
#密码
password=root
#需要备份的数据库
database_name=sys
#判断文件夹不存在则创建
if [ ! -d $backup_dir ]; 
then     
    mkdir -p $backup_dir; 
fi
#将备份文件压缩  mysqldump -uroot -proot sys | gzip > ~/Downloads/mysqlbackup/sys-$filename.sql
$tool -h$host -u$username -p$password $database_name | gzip > $backup_dir/$database_name-$dd.sql.gz
echo "文件备份 $backup_dir/$database_name-$dd.sql.gz 成功!!!"
#将备份日志写入log文件
echo "create $backup_dir/$database_name-$dd.dump " >> $backup_dir/$database_name.log
echo "$backup_dir/$database_name-$dd.sql.gz 已将该次操作日志记录到$database_name.log文件!!!"

将以上脚本内容创建到.sh文件中,如我创建在mysqldump.sh 文件中,由于权限问题,该脚本不具有执行权限,所以还需要先改权限:

sudo chmod 755 mysqldump.sh

调整完该文件权限后开始执行该脚本:

./mysqldump.sh

执行完成后查看是否已生成对应的文件,然后解压后使用mysql的source命令导入数据库验证是否正常:
接下来我们介绍一下ossutil工具。

2.3 将本地文件上传到oss

ossutil工具的详细介绍直接去找马爸爸,我给你们电话,哦不给你们地址:ossutil详细介绍请点此
介绍一下安装ossutil,从官网文档中介绍了如何安装试用oss,这里我简单介绍一下:
第一步:下载ossutil
下载ossutil,使用:

curl -o ossutilmac64 http://gosspublic.alicdn.com/ossutil/1.6.6/ossutilmac64  # 不同平台对应不同的下载方式,请自行查看官网文档

我这是将文档下载到/tmp 文件夹中并修改文件名称为ossutil

mv /tmp/ossutil64 /tmp/ossutil //修改名称为ossutil

下载完成后需要修改文件为可以执行权限,并
创建软连接到/usr/local/bin目录
中,以方便在命令行能直接只用ossutil命令:

ln -s /tmp/ossutil /usr/local/bin/

这里必须要使用绝对目录连接

sudo chmod 755 ossutil 

第二步:配置ossutil
配置ossutil,在官方文档中有详细介绍,如下操作:

./ossutil64 config
该命令将创建一个配置文件,在其中存储配置信息。 请输入配置文件路径(默认为:/home/user/.ossutilconfig,回车将使用默认路径。如果用户设置为其它路径,在使用命令时需要将--config-file选项设置为该路径): 
未输入配置文件路径,将使用默认配置文件:/home/user/.ossutilconfig。 
对于下述配置,回车将跳过相关配置项的设置,配置项的具体含义,请使用"help config"命令查看。 
请输入endpoint:http://oss-cn-shenzhen.aliyuncs.com 
请输入accessKeyID:yourAccessKeyID 
请输入accessKeySecret:yourAccessKeySecret
请输入stsToken: 
endpoint:填写Bucket所在地域的域名信息,可参考访问域名和数据中心。
accessKeyID:查看方式请参考创建AccessKey。
accessKeySecret:查看方式请参考创建AccessKey。
stsToken:非必配项,若采用STS临时授权方式访问OSS需要配置该项,否则置空即可。stsToken生成方式参考临时访问凭证。
个人建议不要修改.ossutilconfig文件的存储路径!

配置完成后尝试使用cp命令推送一张图片到oss中,关于cp命令请查看官方文档。

ossutil cp ~/Downloads/mysqlbackup/sys.log oss://hyooss/test/      # 将~/Downloads/mysqlbackup目录下的sys.log文件上传到oss的Bucket为 hyooss的test文件夹下

这个是我写好了的备份脚本对接了阿里云oss 只需要安装配置ossutil就好了保证ossutil可以全局使用

#!/bin/bash
#备份保存路径
backup_dir=~/mysqlbackup/
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
tool=mysqldump
# 主机
host=127.0.0.1
#用户名
username=
#密码
password=
#需要备份的数据库
database_name=

#判断文件夹不存在则创建
if [ ! -d $backup_dir ];
then
    mkdir -p $backup_dir;
fi
#将备份文件压缩  mysqldump -uroot -proot sys | gzip > ~/Downloads/mysqlbackup/sys-$filename.sql
$tool -h$host -u$username -p$password $database_name | gzip > $backup_dir/$database_name-$dd.sql.gz

echo "文件备份 $backup_dir/$database_name-$dd.sql.gz 成功!!!"
#将备份日志写入log文件
echo "create $backup_dir/$database_name-$dd.dump " >> $backup_dir/$database_name.log
echo "$backup_dir/$database_name-$dd.sql.gz 已将该次操作日志记录到$database_name.log文件!!!"
filename=`ls -lt ~/mysqlbackup/ | grep sql.gz | head -n 1 |awk '{print $9}'`
ossutil cp ~/mysqlbackup/$filename oss://shepi/back/
if [ $? -ne 0 ]; then
    echo -e "\033[41;36m 上传失败了 \033[0m"
else
    echo -e "\033[41;36m 上传成功了 \033[0m"
fi

这里根据上面的脚本举一反三写了一个自动备份网页的

#!/bin/bash
#备份保存路径
webbackup_dir=~/webbackup/
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#需要备份的网站目录 这里要写上级目录也就网页文件所在的上一级目录暂时没办法解决网页使用绝对目录打包造成的绝对目录打包
web_dir=/home/wwwroot/
#网站文件夹
web=shagain.club
#文件后缀
houzhui=.zip
#上传到第三方储存命令接口
#jiekou=ossutil cp $webbackup_dir$filename oss://shepi/back/
#判断文件夹不存在则创建
if [ ! -d $webbackup_dir ];
then
    mkdir -p $webbackup_dir;
fi
#切换到目录避免打包产生绝对目录
cd $web_dir
zip -9r $webbackup_dir/$web$dd$houzhui $web
if [ $? -ne 0 ]; then
    echo -e "\033[0;31m 网站备份失败了 \033[0m"
else
    echo -e "\033[0;32m 网站备份成功了 \033[0m"
fi
echo "文件备份 $wbackup_dir/$web$dd 成功!!!"
#获取最新文件
filename=`ls -lt $webbackup_dir | grep .zip | head -n 1 |awk '{print $9}'`
ossutil cp $webbackup_dir$filename oss://shepi/back/
if [ $? -ne 0 ]; then
    echo -e "\033[0;31m 网站备份上传失败了 \033[0m"
else
    echo -e "\033[0;32m 网站备份上传成功了 \033[0m"
fi
echo "文件备份 $wbackup_dir/$web$dd 成功!!!"

搭配crontab定时任务岂不是美滋滋

crontab -e //编辑定时任务

声明:小小博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 数据库自动备份脚本


Carpe Diem and Do what I like