网站迁移完成之后,忘了数据库备份工作没有完成。之前用的云虚拟主机数据库是分离出来的,阿里会帮你保留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里的
定时备份数据库任务完成,过几天就可以验证效果如何啦。