MySQL|实现定时备份数据

数据库中的数据是撑起应用系统的重中之重,定期备份数据库中的数据是很有必要的。定期备份数据是为了防止数据库出现意外情况,如被病毒入侵造成删库,勒索等。

实现是使用 mysql 的 mysqldump 备份命令, 利用 cron 配合脚本实现定期备份。

mysqldump 备份命令使用

#mysqldump -u用户名 -p用户密码  数据库名  > 导出文件
mysqldump -uroot -p111 mydb > mydb_bak.sql

#备份多个数据库
mysqldump -uroot -p111 dbname mydb1, mydb2 > mydb1_mydb2_bak.sql

#备份所有数据库
mysqldump -uroot -p111 --all-databases > all_db.sql

cron 定时任务

可以通过crontab命令添加 cron 表达式创建更加细致的定时任务,网上有很多可自行参考。

这里是以周为频率备份数据库的,有两种实现方法,一是在/etc/cron.weekly 放置 shell 脚本,二是使用 crontab 创建定时任务。cron.weekly 文件夹下的 shell 脚本 cron 程序每周会执行一次,把备份脚本的命令写在里面就可以实现定时备份。使用crontab命令创建一个定时任务,每当定时任务到达指定时间点执行定时命令(命令可以是个 shell 脚本)。

/etc/cron.weekly下放置备份脚本

# 进入文件夹
cd /etc/cron.weekly
# vi backup.sh

2.复制一下内容

#!/bin/bash

#日期
DATE=$(date +'%Y-%m-%d')

#备份命令
mysqldump -uroot -p这里放置密码 数据库名> 备份名称-$DATE.sql 2> /dev/null

3.添加执行权限

chmod +x backup.sh

使用crontab命令创建定时任务实现

# 查看定时任务
crontab -l

# 进入cron任务编辑界面
crontab -e

# 创建任务,在编辑中输入如下内容, 替换中文
22 4 * * 0 root mysqldump -uroot -p密码 数据库名 > 备份名称-$(date +'%Y-%m-%d').sql 2> /dev/null

# 保存并退出vi编辑器

cron 表达式参考 每周定期执行表达式为:22 4 * * 0

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

其他

要保证定时任务执行还需要保证 cron 程序已经安装并且正在运行(有些系统没有安装),另外如定时任务命令中执行的是脚本,需要把脚本加上执行权限。