创建备份目录
我的备份目录为/data/mysql_bak
,根据自己的需要更改即可:
mkdir /data/mysql_bak
编写备份清理脚本
进入 mysql_bak 目录
cd /data/mysql_bak
创建 backup.sh
Shell 脚本文件
touch backup.sh
执行权限,如果不赋予执行权限则该脚本不可执行,这里暴力一点,直接给全部权限
chmod 777 backup.sh
vim 编辑该文件
vim backup.sh
粘贴以下内容,并将参数修改为你自己需要的
db_user="root"
db_pwd="123456"
db_name="test_demo"
bak_dir="/data/mysql_bak"
time="$(date +"%Y%m%d_%H%M%S")"
mysqldump -u$db_user -p$db_pwd $db_name > $bak_dir/${db_name}_$time.sql
#remove out-date backup
find $bak_dir -name "$db_name*.sql" -type f -mtime +15 -exec rm -rf {} \; > /dev/null 2>&1
脚本解读
基础参数
db_user
为数据库账号;,db_pwd
为数据库密码;db_name
为要备份的数据库名称,如果想要备份所有数据库可以填写为 --all-databases
;bak_dir
为备份到的目录。这些参数可根据自己的进行修改。
time
参数为备份文件名时间格式,我这里使用的是 %Y%m%d_%H%M%S
,例如:20191123_161523,则生成的文件名为:test_demo_20191123_161523.sql。
备份命令
mysqldump...
为备份数据库的命令,如果为本机数据库备份则无需更改,如果要备份其他服务器的数据库则为该命令增加主机和端口参数,例如:
mysqldump -u$db_user -p$db_pwd -h110.119.110.119 -P3306 $db_name > $bak_dir/${db_name}_$time.sql
清理过期文件:
脚本的最后一行命令为清理过期文件,用于清理 15 天前的文件。
-type f
表示查找普通类型的文件,f
表示普通文件,可不写;
-mtime +15
按照文件的更改时间来查找文件,+15 表示文件更改时间距现在 15 天以前;如果是 -mmin +15
表示文件更改时间距现在 15 分钟以前;
-exec rm {} ;
表示执行一段 shell 命令,exec
选项后面跟随着所要执行的命令或脚本,然后是一对 {}
,一个空格和一个 \
,最后是一个分号;
;
/dev/null 2>&1
把标准出错重定向到标准输出,然后扔到 /DEV/NULL
下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的 2>&1
表示让该命令在后台执行
测试脚本
执行命令:
./backup.sh
执行 ls
或者 ls -l
(简写为:ll
),查看是否生成了备份文件,如果有备份文件,则证明脚本正常。
定时任务
设置定时任务
执行命令:
crontab -e
按 a
或者 i
进入编辑模式,我这里设置每天凌晨 1 点 30 分执行任务脚本,粘贴以下代码:
30 01 * * * /data/mysql_bak/backup.sh
保存并退出即可。Crontab 时间设置很容易,可以参考以下说明:
Crontab 格式:分 时 日 月 周 执行命令
第 1 列分钟 1~59,每分钟用 * 或者*/1表示,整点分钟数为00或0
第 2 列小时 1~23(0 表示 0 点)
第 3 列日 1~31
第 4 列月 1~12
第 5 列星期 0~6(0 表示星期天)
第 6 列要运行的命令
0 3 * * * /data/mysql_bak/backup.sh,此命令表示在每天的凌晨三点执行一次脚本,可自行调整时间
重启 crondtab 服务
service crond restart
然后,等到时间到了之后,查看备份目录是否生成了备份文件,即可证明定时任务是否设置成功。当然,你可以临时设置一个近一点的时间查看,成功之后再改成真正需要执行的时间即可。别忘了重启 Crontab
服务。
测试删除备份文件
要测试是否能正确清理过期备份文件,可以将删除命令改为以下命令:
find $bak_dir -name "$db_name*.sql" -type f -mmin +1 -exec rm -rf {} \; > /dev/null 2>&1
即清理一分钟前的备份文件。
执行命令:
./backup.sh
查看目录是否成功删除一分钟之前的文件,并生成新的备份文件。
😇 enjoy!