数据库备份问题

2023-12-22 17:27:40 +08:00
 AboPlus

目前使用的有 MySql 、MongoDB 、Redis Mysql 和 Mongo 主要是存放业务数据使用,Redis 是作为一个中间缓存数据库使用 现在问题就是线上用户很少,但是有位同事不小心把测试环境的库干没了,领导很生气很重视这件事情,之前线上也一直没有上数据备份,现在准备把数据备份加上,想请教一下各位老哥,这几种数据库的数据备份大概需要做到哪种程度?需要一步到位还是一点一点来比较好

PS:目前目前开发的软件和系统确实有点玩具的意思在,完全不抗造,只能尽量想到哪些去做哪些了...

1598 次点击
所在节点    数据库
19 条回复
AboPlus
2023-12-22 17:29:31 +08:00
备份各位大佬有什么比较主流的或者说比较抗造的方案没
albertqcy
2023-12-22 17:32:48 +08:00
最简单高效的备份,直接定时调度加数据库导出命令加 ftp 就行了
AboPlus
2023-12-22 17:37:35 +08:00
@albertqcy 有做热备份的必要性吗
vopsoft
2023-12-22 17:44:07 +08:00
我们线上 mysql 是 5 台+2 台存储 ,其中 3 台做 mha ,1 台延迟库,1 台查询和备份导出
每天全量备份到存储再同步到另一台存储
RightHand
2023-12-22 17:46:00 +08:00
SQLite 文件 copy ,无敌
BQsummer
2023-12-22 18:07:50 +08:00
一般是每天晚上做全量备份, 出现事故需要恢复就拿昨天的全量然后回放当天 binlog
Maboroshii
2023-12-22 18:11:38 +08:00
上云,自动备份。
另 binlog 这一套,恢复起来好像挺麻烦的,而且你恢复时要保证你的 mongo 和 mysql 数据的一致性,好像也挺难。
但总归可以自动备份,还原也方便。
AboPlus
2023-12-22 18:20:06 +08:00
@BQsummer 感觉这个是目前最适合我们的一个方案,毕竟没啥人用
qiyilai
2023-12-22 18:21:30 +08:00
玩具就要用玩具的方案(手动斜眼):
30 2 * * * /data/backup/database/mysql_backup.sh
#mysql 备份 XXX 数据库脚本
#保留最近 10 天备份
#备份目录
backupDir=/data/backup/database
#mysqlDump
mysqldump=mysqldump
#ip
host=***
#用户名
username=***
#密码
password=***
#今天日期
today=`date +%Y%m%d`
#十 backupDir=天前的日期
timeTenDayAgo=`date -d -10day +%Y%m%d`
#备份的数据库
database=***

#如果文件夹不存在则创建
if [ ! -d $backupDir ];
then
mkdir -p $backupDir;
fi

echo '开始备份'$database
docker exec mysql $mysqldump -h$host -u$username -p$password $database | gzip > $backupDir/$database-$today.sql.gz
echo '成功备份'$database'到'$backupDir/$database-$today.sql.gz
if [ ! -f "$backupDir/$database-$timeTenDayAgo.sql.gz" ];
then
echo '10 天前备份不存在,无需删除'
else
rm -f $backupDir/$database-$timeTenDayAgo.sql.gz
echo '删除 10 天前备份文件'$backupDir/$database-$timeTenDayAgo.sql.gz
fi
AboPlus
2023-12-22 18:22:35 +08:00
@Maboroshii 中层领导不愿意上云,想让我们自己搞,但是又根据目前的使用规模使用场景觉得好像也不用折腾太复杂(毕竟没人用),准备用上面老哥提的全量备份+binlog 的方式
joyhub2140
2023-12-22 18:23:40 +08:00
直接每天打个快照完事了。。。
AboPlus
2023-12-22 18:26:09 +08:00
@qiyilai 好像真是目前阶段最合适的一个方案了
AboPlus
2023-12-22 18:28:51 +08:00
@joyhub2140 谢谢佬~
mylovesaber
2023-12-22 20:16:27 +08:00
mysql 5.7 系列版本和 mariadb 的数据库我曾写过一个纯 shell 实现的小工具,你只需要往配置文件中按照提示填写必要的参数,然后命令行依次进行:
1. 检查
2. 检查没问题就运行
3. 运行没问题就安装
数据库就全自动备份了(全量),适合于对 linux 命令行操作没经验的产品类人员
目前应用在好些省市的政府服务器上生产验证了的
开源的暂时在 dev 分支,欢迎试用 : -)

https://github.com/mylovesaber/Tools-Share/tree/dev/shell-tool/other/mysql-backup
mylovesaber
2023-12-22 20:18:45 +08:00
14 楼我发的那个工具是 9 楼的功能强化版本,看 9 楼可以简单理解工作原理,实际我这工具支持 root 和非 root 用户,涉密和非涉密系统
laminux29
2023-12-22 22:43:25 +08:00
金融级一致性要求,需要在应用上,进行业务性停机,应用停机完成后,再对数据库进行导出。

能容忍不超过 24 小时的一致性,那么先准备冗余节点,该节点拥有全量数据,并且全量数据单次导入导出不能超过 24 小时。需要备份时,把冗余节点进行离线,然后从冗余节点导出数据进行备份。操作完成后,冗余节点重新上线,同步最新数据。

能容忍超过 24 小时的一致性,只需要每晚备份一次,用数据库默认数据导出命令,导出全库即可。
datocp
2023-12-23 05:54:13 +08:00
自己用的 mongodb 竟然因为 tar 释放被覆盖了。。。

后来就写 shell cron 导出,tar 打包,只留最近的三天备份。备份要做的,不然后果很严重。
datocp
2023-12-23 08:41:51 +08:00
#!/bin/sh
cd /path/bak/wekan
/path/mongodb/bin/mongodump -h 127.0.0.1:27018 -d wekan1 -o /path/bak/wekan
#/path/mongodb/bin/mongorestore -h 127.0.0.1:27018 -d wekan1 /path/bak/wekan/wekan
tar -czvf /path/bak/wekan/wekan$(date +%Y%m%d).tar.gz ./wekan
now="`date +%s` - 259200" #72hour
now=`expr $now`
>/tmp/wekan.date;ls /path/bak/wekan/*.gz -lu| awk '{print $9}'>>/tmp/wekan.date
for i in $(cat /tmp/wekan.date); do time=`date +%s -r $i`;
if [ "$time" -lt "$now" ];then echo $i;
rm -rf $i;
fi;done
rm -rf /path/bak/wekan/wekan
albertqcy
2023-12-27 17:25:53 +08:00
@AboPlus 热备份其实就是主备嘛

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1002709

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX