对于生产环境来说,数据库备份是必不可少的操作;本文主要介绍在Centos服务器上使用mysqldump+crontab对mysql数据库进行定时自动备份。
整体思路:
1、编写脚本使用mysqldump对数据库进行备份。
2、使用crontab添加定时任务定时执行备份脚本实现数据库备份。
mysqldump
mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等;再次执行sql脚本即可恢复数据。
crontab
Linux crontab 是用来定期执行程序的命令。
crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
mysql备份脚本准备
首先准备msyql备份目录
mkdir /data/mysql_backup
cd /data/mysql_backup
编写mysql备份脚本
vi mysql_backup_script.sh
按 i 进入编辑模式
#!/bin/bash
# mysql备份执行文件
mysqldump=/usr/local/mysql-8.0.22/bin/mysqldump
# 设置备份目录
backup_dir=/data/mysql_backup
# 备份时间 年月日时分
dt=$(date '+%Y%m%d%H%M')
# 数据库密码
mypwd=password123456
cd $backup_dir
# 开始执行数据库备份
$mysqldump -uroot -p$mypwd xxl_job > $backup_dir/xxl_job_$dt.sql
# 备份完成后压缩sql备份文件
zip xxl_job_$dt.zip xxl_job_$dt.sql
# 删除备份的sql原始文件
find $backup_dir/ -type f -name "*.sql" -exec rm {} \;
# 删除7天前的备份文件
find $backup_dir/ -type f -name "*.zip" -mtime +7 -exec rm -rf {} \;
echo 'backup completed!'
Esc :wq 保存脚本
为脚本授权
chmod u+x mysql_backup_script.sh
测试脚本
[root@adsl-172-10-0-1 mysql_backup]# sh ./mysql_backup_script.sh
mysqldump: [Warning] Using a password on the command line interface can be insecure.
adding: xxl_job_202206171607.sql (deflated 85%)
backup completed!
配置crontab定时任务
创建定时任务:crontab -e
查看所有定时任务:crontab -l
crontab [-u username] //省略用户表表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作作)
用crontab -e进入当前用户的工作表编辑,登录vim模式编辑
# 每天凌晨3点执行脚本
0 3 * * * /data/mysql_backup/mysql_backup_script.sh
crontab 配置说明
以下内容转自www.runoob.com;详细内容自行查阅
crontab 时间格式说明
f1 f2 f3 f4 f5 program
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program表示要执行的程序。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
- 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
crontab 配置示例
0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache
50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务
0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令