一开始没想到我会弄这个,以前觉得数据库一般很安全不需要定时备份。但是前几天的经历还是让我意识到了定时备份数据库的重要性,一个作业的数据库莫名其妙没了,后面通过快照回滚找回来了。后来就想到定时备份数据库了,经过一番折腾终于完成了这个功能。接下来就详细记一下 Linux定时备份MySQL数据库 的教程。

系统环境

  1. CentOS 7.6.1810
  2. MySQL 5.7.26

Step 1:创建目录

### 创建定时脚本目录
mkdir -p /home/backup/mysql/shell
### 创建sql文件放置目录
mkdir -p /home/backup/mysql/sql

Step 2:编写备份脚本

在我们上一步新建的 /home/backup/mysql/shell 下 新建一个 backup.sh,内容如下

### 数据库用户
db_user="root"
### 数据库用户密码
db_passwd="*******"
### 要备份的数据库名称
db_name="example"
### 备份出来的sql名称
name="example-"$(date "+%Y-%m-%d-%H-%M-%S")

###前面路径是mysql绝对路径,后面/home/backup/mysql/sql/是要备份到的目录
/www/server/mysql/bin/mysqldump -u$db_user -p$db_passwd $db_name>/home/backup/mysql/sql/$name.sql

Step 3:给脚本添加可执行权限

这一步很重要,不给backup.sh添加可执行权限,定时任务是无法完成备份的。

chmod +x backup.sh

Step 4: 将脚本添加到定时任务

首先使用如下命令编辑定时任务

crontab -e 

编辑的内容如下

###每一分钟执行一次后面的脚本(设置的周期短易于观察)
*/1 * * * * /home/backup/mysql/shell/backup.sh

Step 5 :查看执行情况

去我们制定的备份目录/home/backup/mysql/sql查看是否输出了sql文件

可以看到每一分钟都输出了sql文件,让我们看看里面的内容

确实看到了user表的数据,至此也就大功告成

附:crontab 定时任务时间格式设定

crontab 文件的格式

{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} 

  1. minute: 区间为 0 – 59 
  2. hour: 区间为0 – 23 
  3. day-of-month: 区间为0 – 31 
  4. month: 区间为1 – 12. 1 是1月. 12是12月. 
  5. Day-of-week: 区间为0 – 7. 周日可以是0或7.

示例

*/1 * * * * 每分钟运行一次命令
0 * * * * 每小时执行
0 0 * * * 每天执行
0 0 * * 0 每周执行
0 0 1 * * 每月执行

标签云

ajax AOP Bootstrap cdn Chevereto CSS Docker Editormd Hexo IDEA JavaScript jsDeliver JS樱花特效 Linux markdown Maven MyBatis MyBatis-plus MySQL Pictures Sakura SEO Spring Boot SpringMVC SSR Thymeleaf V2ray Vue Web WebSocket Wechat Social WordPress Yoast SEO 代理 分页 图床 小幸运