文章目录
在一次迁移数据库过程中,一不小心把用户相关的数据清空了,幸好只是在开发环境,影响不大,若是在生产环境,我可能就悲剧咯!
所以不得不把数据库备份提上日程啦~~
背景及相关知识点
环境介绍
linux机器:Ubuntu 16.04
定时器:系统级定时器
数据库:直接部署在linux上,mysql8
知识点
linux 定时任务类别
linux 定时任务分为两种:
- 系统级
cat /etc/crontab
- 用户级
cat /usr/bin/crontab
定时任务定义格式
定时器格式如下:
.------------ minute (0-59) (* = every minute)
| .---------- hour (0-23) (* = every hour)
| | .-------- day of month (1-31) (* = every day)
| | | .------ month (1-12 or jan-dec) (* = every month)
| | | | .---- day of week (0-6 or mon-sun) (Sunday=0) (* = every day)
| | | | |
* * * * * command_to_run
ubuntu打开cron日志
- 进入整个系统日志目录
sudo vim /etc/rsyslog.d/50-default.conf
展示如下内容:
#
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
#user.* -/var/log/user.log
重点可以看到#cron. /var/log/cron.log*
- 去掉cron.*相关的#,保存并退出
- 重启rsyslog服务
sudo service rsyslog restart
- 查看cron日志
sodo cat /var/log/cron.log
crontab命令
查看系统的定时任务列表
cat /etc/crontab
查看当前用户的定时任务列表
crontab -l
修改当前用户的定时任务列表
crontab -e
键入以上命令会,进入GNU nano模式,修改任务列表后执行保存退出操作(保存退出操作: CTRL+O Enter CTRL+X)
定时备份实现方式
系统级别定时任务
编写备份脚本
在/root/mysql/目录下,创建并编写备份脚本backup.sh
#!/bin/bash
mysqldump -uroot -p123456 db_pmp > /root/mysql/backup/db_pmp/$(date +%Y%m%d).sql
mysqldump -uroot -p123456 db_user > /root/mysql/backup/db_user/$(date +%Y%m%d).sql
修改系统级定时任务
- 修改/etc/crontab
vim /etc/crontab
- 加入备份定时任务
0 1 * * * root sh /root/mysql/backup.sh
- 查看是否添加成功
cat /etc/crontab
结果如下:
root@ubuntu:~# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
0 1 * * * root sh /root/mysql/backup.sh
用户级别定时任务(待实现)
因为还没搞清楚目前系统的用户权限,倒腾半天没弄出来,有点遗憾。。。
TODO
后记:使用系统级别的定时任务定时备份mysql肯定是不好的,慎用!