MySQL数据库自动备份与定时备份

MySQL数据库自动备份与定时备份

图片

备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。而对于一些网站、系统来说,数据库就是一切,所以做好数据库的备份是至关重要的!

  1. 查看磁盘空间
# df -h
复制代码

日常普遍用该命令可以查看磁盘被占用了多少空间、还剩多少空间等信息。

常用参数

-a 显示所有系统文件
-B <块大小> 指定显示时的块大小
-h 以容易阅读的方式显示
-H 以1000字节为换算单位来显示
-i 显示索引字节信息
-k 指定块大小为1KB
-l 只显示本地文件系统
-t <文件系统类型> 只显示指定类型的文件系统
-T 输出时显示文件系统类型
-- -sync 在取得磁盘使用信息前,先执行sync命令

image-20210829153730492

  1. 创建备份目录
cd /home
mkdir backupcd backup
复制代码
  1. 创建备份Shell脚本

假设我们需要定时备份的数据库为 test

#!/bin/bash  # 创建脚本
vim test.sh 

#!/bin/bash  # 粘贴一下内容
mysqldump -uroot -proot test > /home/backup/t_user$(date +%Y%m%d_%H%M%S).sql

#!/bin/bash # 对备份进行压缩
mysqldump -uroot -proot test | gzip > /home/backup/test$(date +%Y%m%d_%H%M%S).sql.gz
复制代码
  1. 添加可执行权限
chmod u+x test.sh
复制代码
  1. 添加定时任务

安装crontab

执行 crontab 命令如果报 command not found,就表明没有安装

yum -y install vixie-cron
复制代码

查看crontab状态

service crond start
service crond stop
service crond restart
service crond reload
service crond status
复制代码

image-20210829160234160

添加计划任务

crontab -e
# 输入以下内容
# 每一分钟执行一次shell脚本
0 0 0 * * ?  /home/backup/test.sh
复制代码

查看crontab任务

# 新建定时任务命令
crontab -e
# 查看定时任务命令
crontab -l
# 删除所有定时任务命令
crontab -r
复制代码

Docker下的MySQL定时备份

# 在/home目录下创建
vim test.sh
复制代码

定时脚本

#!/bin/bash
# 设置mysql的登录用户名和密码
mysql_user="root"
mysql_password="root"
mysql_host="localhost"
mysql_port="3306"
 
# 备份文件存放地址
backup_location=/home/backup
 
# 是否删除过期数据
expire_backup_delete="ON"
expire_days=7
backup_time=`date +%Y%m%d%H%M`
backup_dir=$backup_location
welcome_msg="Welcome to use MySQL backup tools!"
# 备份test数据库中数据
docker exec -i mysql mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B test > $backup_dir/test-$backup_time.sql
echo $welcome_msg
# 删除过期数据
if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
        `find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`
        echo "Expired backup data delete complete!"
fi
复制代码

设置脚本权限

chmod 755 test.sh
复制代码

可以尝试执行 sh test.sh是否能正常执行

Welcome to use MySQL backup tools!
Expired backup data delete complete!
复制代码

确认脚本无误后即可添加定时任务

# 添加定时crontab定时任务
0 0 12 * * ? cd /home;sh test.sh >> log.txt 2>>log.txt
复制代码