目前使用的有 MySql 、MongoDB 、Redis Mysql 和 Mongo 主要是存放业务数据使用,Redis 是作为一个中间缓存数据库使用 现在问题就是线上用户很少,但是有位同事不小心把测试环境的库干没了,领导很生气很重视这件事情,之前线上也一直没有上数据备份,现在准备把数据备份加上,想请教一下各位老哥,这几种数据库的数据备份大概需要做到哪种程度?需要一步到位还是一点一点来比较好
PS:目前目前开发的软件和系统确实有点玩具的意思在,完全不抗造,只能尽量想到哪些去做哪些了...
1
AboPlus OP 备份各位大佬有什么比较主流的或者说比较抗造的方案没
|
2
albertqcy 2023-12-22 17:32:48 +08:00 1
最简单高效的备份,直接定时调度加数据库导出命令加 ftp 就行了
|
4
vopsoft 2023-12-22 17:44:07 +08:00 1
我们线上 mysql 是 5 台+2 台存储 ,其中 3 台做 mha ,1 台延迟库,1 台查询和备份导出
每天全量备份到存储再同步到另一台存储 |
5
RightHand 2023-12-22 17:46:00 +08:00 via Android 1
SQLite 文件 copy ,无敌
|
6
BQsummer 2023-12-22 18:07:50 +08:00 1
一般是每天晚上做全量备份, 出现事故需要恢复就拿昨天的全量然后回放当天 binlog
|
7
Maboroshii 2023-12-22 18:11:38 +08:00 via Android 1
上云,自动备份。
另 binlog 这一套,恢复起来好像挺麻烦的,而且你恢复时要保证你的 mongo 和 mysql 数据的一致性,好像也挺难。 但总归可以自动备份,还原也方便。 |
9
qiyilai 2023-12-22 18:21:30 +08:00 1
玩具就要用玩具的方案(手动斜眼):
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 |
10
AboPlus OP @Maboroshii 中层领导不愿意上云,想让我们自己搞,但是又根据目前的使用规模使用场景觉得好像也不用折腾太复杂(毕竟没人用),准备用上面老哥提的全量备份+binlog 的方式
|
11
joyhub2140 2023-12-22 18:23:40 +08:00 1
直接每天打个快照完事了。。。
|
13
AboPlus OP @joyhub2140 谢谢佬~
|
14
mylovesaber 2023-12-22 20:16:27 +08:00 1
mysql 5.7 系列版本和 mariadb 的数据库我曾写过一个纯 shell 实现的小工具,你只需要往配置文件中按照提示填写必要的参数,然后命令行依次进行:
1. 检查 2. 检查没问题就运行 3. 运行没问题就安装 数据库就全自动备份了(全量),适合于对 linux 命令行操作没经验的产品类人员 目前应用在好些省市的政府服务器上生产验证了的 开源的暂时在 dev 分支,欢迎试用 : -) https://github.com/mylovesaber/Tools-Share/tree/dev/shell-tool/other/mysql-backup |
15
mylovesaber 2023-12-22 20:18:45 +08:00 1
14 楼我发的那个工具是 9 楼的功能强化版本,看 9 楼可以简单理解工作原理,实际我这工具支持 root 和非 root 用户,涉密和非涉密系统
|
16
laminux29 2023-12-22 22:43:25 +08:00 1
金融级一致性要求,需要在应用上,进行业务性停机,应用停机完成后,再对数据库进行导出。
能容忍不超过 24 小时的一致性,那么先准备冗余节点,该节点拥有全量数据,并且全量数据单次导入导出不能超过 24 小时。需要备份时,把冗余节点进行离线,然后从冗余节点导出数据进行备份。操作完成后,冗余节点重新上线,同步最新数据。 能容忍超过 24 小时的一致性,只需要每晚备份一次,用数据库默认数据导出命令,导出全库即可。 |
17
datocp 2023-12-23 05:54:13 +08:00 via Android 1
自己用的 mongodb 竟然因为 tar 释放被覆盖了。。。
后来就写 shell cron 导出,tar 打包,只留最近的三天备份。备份要做的,不然后果很严重。 |
18
datocp 2023-12-23 08:41:51 +08:00 1
#!/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 |