写在前面:
为了保证数据库容灾性,定期对数据库数据进行备份是十分重要的。
备份数据的基本思路是将数据库中的数据导出保存到其他位置,每隔一段时间便进行一次导出,以保证数据的完整。为了让数据能够定期保存,利用Linux的Crontab自动执行Bash脚本以达到自动备份的要求。
第一步:选择位置创建数据保存的文件夹
选择指定位置创建文件夹mysqlbackup文件夹
cd ~
mkdir mysqlbackup
然后创建保存数据和保存日志的文件夹,并对当前用户进行授权。
#进入 mysqlback 文件夹
cd mysqlback
#创建备份数据文件夹
mkdir backup_data
#创建备份日志文件夹
mkdir backup_logs
#对当前用户授予对文件夹的写入权限
sudo chmod u+w backup_data
sudo chmod u+w backup_logs
第二步:编写Bash脚本
vim mysqlbackup.sh
#!/bin/bash
#数据库用户名
dbuser='root'
#数据库用密码
dbpasswd='root'
#需要备份的数据库,多个数据库用空格分隔
dbname='TestData'
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份路径
logpath='/root/mysqlbackup/backup_logs'
#数据备份路径
datapath='/root/mysqlbackup/backup_data'
#备份数据
mysqldump -u ${dbuser} -p${dbpasswd} ${dbname} > "${datapath}/${dbname}"-"${backtime}.sql" 2>> ${logpath}/mysqllog.log;
#若备份成功则进行进行数据压缩
if [ "$?" == 0 ];then
cd $datapath
#将数据压缩节省存储空间
tar jcf "${dbname}"-"${table}"-"${backtime}.tar.bz2" "${dbname}"-"${backtime}.sql" > /dev/null
#删除原始文件,只留压缩后文件
rm -f "${datapath}/${dbname}"-"${backtime}.sql"
#删除七天前备份,也就是只保存7天内的备份
find $datapath -name "*.tar.bz2" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
echo ${backtime}-"数据库 ${dbname} 备份成功!!" >> ${logpath}/mysqllog.log
else
#否则,备份失败则进行以下操作
echo ${backtime}-"数据库 ${dbname} 备份失败!!" >> ${logpath}/mysqllog.log
fi
脚本编辑完成后,先执行脚本测试是否能够成功运行
./mysqlbackup.sh
若正常执行,则控制台无信息输出,在 backup_data 和 backup_logs 文件夹中可查看到 tar.bz2 和 log 文件
第三步:设置Crontab进行定期执行
crontab -e
打开当前用户的crontab表,编辑格式可参考/etc/crontab中的格式。
下图为来自百度百科的Crontab文件格式说明:
附:
1、查看CronTab日志
sudo cat /var/log/cron
2、Chmod
语法:
chmod [-cfvR] [--help] [--version] mode file...
参数说明:
mode : 权限设定字串,格式如下 :
[ugoa...][[+-=][rwxX]...][,...]
其中:
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
其他参数说明:
- -c : 若该文件权限确实已经更改,才显示其更改动作
- -f : 若该文件权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
- -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
- --help : 显示辅助说明
- --version : 显示版本
写在最后:
在Centos和Ubuntu系统下都有测试过,这个方式都可以使用,Bash脚本参考https://blog.csdn.net/lwwl12/article/details/83214651