备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。而对于一些网站、系统来说,数据库就是一切,所以做好数据库的备份是至关重要的!
1 查看磁盘空间情况
既然是定时备份,就要选择一个空间充足的磁盘空间,避免出现因空间不足导致备份失败,数据丢失的恶果!
存储到当前磁盘这是最简单,却是最不推荐的;服务器有多块硬盘,最好是把备份存放到另一块硬盘上;有条件就选择更好更安全的存储介质;
使用 df -h 目前磁盘空间和使用情况
2 创建备份目录
尽量选择空间比较充足的目录,这里以/home目录为例保存备份文件;
进入到/home目录下,创建backup目录,并进入到新建的backup目录下
cd /home
mkdir backup
cd backup
3 创建备份Shell脚本
注意把以下命令中的dataBaseTest换为实际的数据库名称,也可自定命名规则
vi dataBaseTest.sh
输入/粘贴以下内容:
#备份路径,没有提前建好
BACKUP=/home/backup/sql/
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo "===备份开始==="
echo "备份文件存放于${BACKUP}/$DATETIME.sql.gz"
#这个是我的mysqldump的路径,使用时要根据自己的环境修改;一般在/var/bin下面
#mysqldump的命令如果没有写绝对路径得话,可能导致备份是空得(指定mysql安装目录bin目录下的mysqldump)
DUMP=/usr/mysql-5.6.39/mysql-5.6.39/bin/mysqldump
#数据库地址
HOST=10.16.133.23
#数据库端口号(不设置默认是3306)
PORT=3306
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=root
#创建备份目录
[ ! -d "${BACKUP}/$DATETIME" ] && mkdir -p "${BACKUP}/$DATETIME"
#后台系统数据库
DATABASE=test_backup_database
$DUMP -u${DB_USER} -p${DB_PW} -h${HOST} -P${PORT} -q -R --databases $DATABASE | gzip > ${BACKUP}/$DATETIME/$DATABASE.sql.gz
#压缩成tar.gz包
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除备份目录
rm -rf ${BACKUP}/$DATETIME
#删除10天前备份的数据
find $BACKUP -mtime +10 -name "*.sql.gz" -exec rm -rf {} \;
echo "===备份成功==="
把HOST替换为数据库地址;
把 PORT 替换为实际数据库端口号;
把 DB_USER替换为实际的用户名;
把 DB_PW替换为实际的密码;
把 DATABASE替换为实际的数据库名;
4 添加可执行权限
chmod u+x dataBaseTest.sh
添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用(一点要确保备份的.sql文件有数据);
./dataBaseTest.sh
5 添加计划任务
检测或安装 crontab
确认crontab是否安装:
执行 crontab 命令如果报 command not found,就表明没有安装
# crontab
-bash: crontab: command not found
如时没有安装 crontab,具体步骤请参考:
添加计划任务
执行命令:
crontab -e
这时就像使用vi编辑器一样,可以对计划任务进行编辑。
输入以下内容并保存:
*/1 * * * * /home/backup/dataBaseTest.sh
意思是每一分钟执行一次shell脚本“/home/backuwep/dataBaseTest.sh”。
crontab -r 为删除定时任务
6 测试任务是否执行
很简单,我们就执行几次“ls”命令,看看一分钟过后文件有没有被创建就可以了!
如果任务执行失败了,可以通过以下命令查看任务日志:
tail -f /var/log/cron
输出类似如下: