centOS7-MySQL5.7定时备份数据库

网站迁移完成之后,忘了数据库备份工作没有完成。之前用的云虚拟主机数据库是分离出来的,阿里会帮你保留3天的数据库备份。现在的轻量应用服务器,数据库备份是需要自己完成的。因此搜索了许多资料,整理出如下本人认为比较适合我使用的方法。

一、编写数据库备份脚本、设置

参考资料如下

#!/bin/bash
DATE=`date +%Y%m%d%H%M`                #every minute
DATABASE=springboot-admin              #database name
DB_USERNAME=root                       #database username
DB_PASSWORD="mysql"                    #database password
BACKUP_PATH=/backup/mysqldata          #backup path

#backup command

/usr/bin/mysqldump -u$DB_USERNAME -p$DB_PASSWORD -h 127.0.0.1 -R --opt $DATABASE | gzip > ${BACKUP_PATH}\/${DATABASE}_${DATE}.sql.gz

#just backup the latest 5 days

find ${BACKUP_PATH} -mtime +5 -name "${DATABASE}_*.sql.gz" -exec rm -f {} \;

经测试以上代码是可以使用成功备份数据库的,但是数据库备份时会出现警告!

mysqldump: [Warning] Using a password on the command line interface can be insecure.

大概意思是:命令行界面使用密码是不安全的

于是再参考了一些资料,我们的数据库用户名和密码,应该写在my.cnf配置文件里。

###在[mysqldump]下增加用户名和密码##################
[mysqldump]
user=root
password=mysql

脚本代码里不再需要涉及用户名和密码了,代码如下:

#!/bin/bash
DATE=`date +%Y%m%d%H%M`                #every minute
DATABASE=springboot-admin              #database name
BACKUP_PATH=/backup/mysqldata          #backup path

#backup command

/usr/bin/mysqldump -h 127.0.0.1 -R --opt $DATABASE | gzip > ${BACKUP_PATH}\/${DATABASE}_${DATE}.sql.gz

#just backup the latest 5 days

find ${BACKUP_PATH} -mtime +5 -name "${DATABASE}_*.sql.gz" -exec rm -f {} \;

写好脚本代码(我用的是notepad++编辑的要转换为UNIX格式),可以随便命名为:backup_mysql_shell.sh保存到/root/目录,并设置权限为可执行。(我用WinSCP上传文件权限设置为755)

记得要根据脚本代码中的BACKUP_PATH=/backup/mysqldata目录

提前创建好文件夹,不然会出现

mysqldump: Got errno 32 on write
find: ‘/backup/mysqldata’: 没有那个文件或目录

保存好脚本代码后,可以马上执行脚本,测试一下是否可以正常工作。

[root@iz2zecnv***0sp3z ~]# /root/backup_mysql_shell.sh

然后查看/backup/mysqldata这个目录里有没有成功备份出来的数据库.gz压缩包,即可验证脚本代码是否成功了。

二、创建crontab计划任务

输入命令:crontab -e

[root@iz2zecnv***0sp3z ~]# crontab -e

###会进入编辑模式###########################
0 5 * * * /root/backup_mysql_shell.sh
###每天凌晨5点执行任务############################
编辑好按Esc(跳到命令模式),再分别输入:wq(保存文件并退出),按回车
################################################

####跳出如下信息?###############################
no crontab for root - using an empty one
crontab: installing new crontab

###再次输入命令crontab -e ########################
[root@iz2zecnv***0sp3z ~]# crontab -e

###进入编辑模式,刚才编辑好的内容还在###############
0 5 * * * /root/backup_mysql_shell.sh
#################################################
###Esc(跳到命令模式),再分别输入:wq(保存文件并退出),按回车###

###现在只跳出一行了,正常了吗?####################
crontab: installing new crontab

###查看运行状态##################################
[root@iz2zecnv***0sp3z ~]# service crond status
Redirecting to /bin/systemctl status  crond.service
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-12-31 16:27:10 CST; 1 day 8h ago
......
###列出当前的所有调度任务########################
[root@iz2zecnv***0sp3z ~]# crontab -l
0 5 * * * /root/backup_mysql_shell.sh
###计划任务应该正常添加上了吧#####################

参考一些资料,再次确认了,任务成功添加了。

/etc/crontab配置文件讲解

crontab -e 是针对使用者的 cron 来设计的,如果是 系统的例行性任务 时,就要编辑 /etc/crontab 这个文件。

那就是 crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个运行档,但是 /etc/crontab 可是一个 纯文字档 ,必须用 root 的身份编辑一下这个文件。

/usr/bin/crontab只有管理员才有编辑权限,每个用户会以用户名作为文件名,里面存储计划任务要执行的操作

基于每个用户。crontab -e 编辑的计划任务,其实是保存在/var/spool/cron/$username里的

定时备份数据库任务完成,过几天就可以验证效果如何啦。

“centOS7-MySQL5.7定时备份数据库”的2个回复

发表评论