唠嗑部分
先来问一个问题,作为开发,编写升级说明文档基本上已成了家常便饭,那么对于数据库数据升级你们是怎么做的呢?
还没有工作的小伙伴可能不知道哈,举个例子:假如项目中有一个表,用来存储不经常变的数据,但是由于业务的要求,下次迭代时,需要换掉这些数据,那应该怎么做呢?
首先我来说说大家可能想得到的方式,后台做成接口,增删改查…直接调用,完事
不可取昂,后端接口的设计要跟需求紧密相连,每一个接口要是经过严格测试才能上线的,并不是接口你想加就加,不常用的数据你加了接口,测试要写用例、白白增加团队工作量,项目经理肯定不允许
这种情况一般都是写sql脚本处理的,运维人员根据升级说明文档进行升级,这就需要数据的备份机制,如果升级失败,要恢复升级前的状态
MySQL的备份命令就不多说了昂,本次文章说一说Linux系统如何定时的备份数据库
先介绍一下Linux的定时job
安装
vixie-cron软件包是crontab的主程序
crontabs软件包是用来安装、卸装、或列举用来驱动crontab守护进程的表格的程序
# 检查是否安装
crontab -e
# 安装
yum -y install vixie-cron
yum -y install crontabs
# 启动
systemctl start crond.service
# 开机自启动
systemctl enable crond.service
操作命令
crontab -e # 编辑用户的定时任务
crontab -l # 列出用户的定时任务列表
crontab -r # 清空用户的定时任务
言归正传
备份的shell脚本,bf.sh
#!/bin/bash
# 备份目录
DIR=/root/db_bf
# 获取时间
DATE=$(date +%Y-%m-%d)
DATETIME=$(date +%Y-%m-%d_%H%M%S)
# 主机地址
HOST=localhost
# 端口
PORT=3306
# 用户名
USERNAME=root
# 密码
PASSWORD=root
# 要备份的数据库
DATABASE=db_bf
# 检查并创建备份目录
[ ! -d "${DIR}/${DATABASE}/${DATE}" ] && mkdir -p "${DIR}/${DATABASE}/${DATE}"
# beifen
mysqldump -u${USERNAME} -p${PASSWORD} -h${HOST} -P${PORT} -q -R --databases ${DATABASE} | gzip > ${DIR}/${DATABASE}/${DATE}/${DATABASE}_${DATETIME}.sql.gz
# 打包归档
cd ${DIR}/${DATABASE}
tar -zcvf ${DATE}.tar.gz ${DATE}
rm -rf ${DATE}
find ${DIR}/${DATABASE} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "数据库${DATABASE}备份成功...."
将bf.sh上传至服务器,授权
[root@cxs-centos8 db_bf]# ls
bf.sh
[root@cxs-centos8 db_bf]# chmod +x bf.sh
[root@cxs-centos8 db_bf]#
配置定时任务
crontab -e
# 将下面这行输入(每一分钟执行一次), Esc :wq
*/1 * * * * /root/db_bf/bf.sh
重启
systemctl restart crond
等待一分钟,查看结果
顺便说一下Mysql命令行导入sql脚本
首先删除原有的db_bf库
[root@cxs-centos8 2023-03-07]# mysql -u root -p -e "drop database db_bf"
Enter password:
[root@cxs-centos8 2023-03-07]#
直接恢复
[root@cxs-centos8 2023-03-07]# mysql -u root -p < db_bf_2023-03-07_151501.sql
Enter password:
[root@cxs-centos8 2023-03-07]#
登录查看结果
结语
备份命令可在脚本中获取,如下可参考
mysqldump -uroot -proot -q -R --databases db_bf > bf.sql
1、制作不易,一键三连再走吧,您的支持永远是我最大的动力!