网站首页 > 技术文章 正文
最近给朋友写了一个应用,用的是阿里云的服务器,但是没有买云备份,朋友又怕出问题。因为这个应用是作为朋友员工发工资的凭证。所以我想给朋友做一个数据库定时备份的功能。
当时思路有2个,一个是主从服务,另一个是计划任务备份。我想都没想,因为我有群晖,7x24小时不关机,所以直接选择了计划任务备份。那么选定了思路,下面就开始执行。
老朋友看我的文章,应该都了解,跟着我来做,总有一些先决条件。没错,这一次也是一样的。它的条件就是:群晖要获取root的权限!有了这一步,那么我们就可以继续了。
对应shell命令,小编不是特别懂,所以,咱们就去询问一下AI。下面是小编和的chatGPT3.5的对话。第一次让它写的shell
然后,因为小编的MySQL端口不是默认的,又只需要备份一个数据库,并非全部。所以通过多次对话,得到了最终的shell命令
#!/bin/sh
# 配置MySQL连接信息
MYSQL_HOST="your_host"
MYSQL_PORT="your_port"
MYSQL_USER="your_user"
MYSQL_PASS="your_password"
BACKUP_DIR="your_dir"
DATE=$(date +"%Y%m%d_%H%M%S")
DATABASE_TO_BACKUP="your_dbname"
# 循环备份每个数据库
for DB in $(mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"); do
# 如果当前循环的数据库不是需要备份的数据库,则跳过备份
if [ "$DB" != "$DATABASE_TO_BACKUP" ]; then
continue
fi
# 构建备份文件名
FILENAME="$DB"_"$DATE.sql"
# 备份数据库到指定文件
mysqldump -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASS $DB > $BACKUP_DIR/$FILENAME
# 打印备份结果
if [ $? -eq 0 ]; then
echo "备份成功: $FILENAME"
else
echo "备份失败: $FILENAME"
fi
done
只要将上面的各个配置信息修改成服务器上正确的内容就可以了。修改完成,把这个shell保存成sh文件。小编就把这个文件保存成smjj_sql_bak.sh。这里就需要注意了。保存成这个文件后,因为是windows下写的shell,换行格式需要转换为LF,所以打开文本编辑器。小编使用的是editplus。所以再文档-》文件格式-》更改文件格式
再选择Unix/Mac OS X,点击确定
这样的话,这个shell就可以使用了。
下面打开winscp和putty,使用root账号登录到群晖nas
把sh文件上传到nas。小编就通过nas自带的FTP拷贝到了files文件夹下面的smjj_sqlbak里面,然后之前设置的备份目录也是再这里哦。
接着,记得给sh权限。我这边直接给了777的权限。
下面就是测试了。
在putty进入smjj_sqlbak目录,然后运行smjj_sql_bak.sh
执行完成
这里要注意一点,就是ftp的那些目录都是在volume1这个目录下面的。使用过群晖的朋友应该多多少少有些了解。
能运行成功后,我们就可以在我们备份的目录下面,看到刚刚导出的sql文件。
那么,这个sh就执行成功了。
要让他定时执行的话,我们就登录群晖去新增一个定时任务吧。
登录群晖的网页,双击打开【控制面板】,找到【任务计划】点击新增【计划的任务】,【用户定义的脚本】
常规修改【任务名称】:smjjbak
计划修改频率,小编这边是【每天】首次运行时间00:01就是每天的凌晨12点零1分,执行这个sh
任务设置:修改【用户定义脚本】:bash /volume1/files/smjj_sqlbak/smjj_sql_bak.sh
保存。
测试一下这个任务
选中任务,点击运行。
到备份文件夹里面查看,是否有备份的文件,如果有,那么就设置成功了。
今天的教程就到这里,谢谢同学们关注,阅读,转发,评论和点赞。
猜你喜欢
- 2025-01-05 Linux运维获取内存、cpu、磁盘IO信息
- 2025-01-05 基础到实战一飞冲天(一)--linux基础(六)
- 2025-01-05 分享跨平台免费的SSH客户端 PortX
- 2025-01-05 前方高能预警!电脑病毒再度来袭!
- 2025-01-05 推荐-运维管理服务器常用的工具
- 2025-01-05 树莓派制造木制 LED 显示器,只需几百元,从此过瘾玩游戏
- 2025-01-05 揭秘!那些让程序员爱不释手的终端神器,你用过几个?
- 2025-01-05 Dever勒索病毒实例分析一则
- 2025-01-05 Python基础到实战一飞冲天(一)--linux基础(五)
- 2025-01-05 外网访问群晖DSM7.0使用Docker安装ZeroTier实现内网穿透
- 1509℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 527℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 492℃MySQL service启动脚本浅析(r12笔记第59天)
- 472℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 469℃启用MySQL查询缓存(mysql8.0查询缓存)
- 450℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 429℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 426℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)