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 程序已经安装并且正在运行(有些系统没有安装),另外如定时任务命令中执行的是脚本,需要把脚本加上执行权限。