上周小张负责的客户管理系统突然崩了,MongoDB 里上万条订单记录全丢了。IT同事查了一圈,发现是备份脚本上周被误删,又没手动执行过快照——这事儿搁在传统办公场景里,真不是危言耸听。
为啥NoSQL备份不能照搬MySQL那一套?
很多同事一听说“备份”,下意识就去翻 mysqldump 命令。但 MongoDB、Cassandra、Redis 这些NoSQL数据库压根不走 SQL 路线,结构松散、分片多、常跑在容器里,用传统逻辑备份容易漏掉索引、权限或副本状态。比如 Redis 的 RDB 快照和 AOF 日志得配合用,单开一个,恢复时可能丢几分钟数据。
几个常用NoSQL的实操备份法
MongoDB:日常用 mongodump 最稳:
mongodump --host 192.168.1.100:27017 --db sales --out /backup/mongo/20240520恢复时也简单:mongorestore --host 192.168.1.100:27017 /backup/mongo/20240520/sales注意:生产环境建议加 --oplog 参数,能实现基于时间点的恢复。Redis:如果开了 RDB(默认配置),直接拷贝 /var/lib/redis/dump.rdb 文件就行;但更推荐每天定时触发一次:
redis-cli -h 127.0.0.1 -p 6379 BGSAVE再把生成的 dump.rdb 备份到 NAS 或云盘,比等它自动触发更可控。Cassandra:用 nodetool snapshot,不锁表、不影响业务:
nodetool snapshot -t backup_20240520 mykeyspace快照存在 /var/lib/cassandra/data/mykeyspace/ 下,压缩打包带走即可。恢复前,先做三件事
1. 查日志确认最后写入时间,别盲目恢复旧备份;
2. 在测试库先跑一遍 restore,看字段有没有乱码、嵌套对象是否塌陷;
3. 恢复后立刻连应用跑几笔模拟订单或登录,验证读写通不通。
办公室里用 NoSQL,往往图它灵活上手快,但数据一旦出事,没人会问你“为啥不用关系型”。备份不是IT部门的事,是每个接触数据库的人该心里有数的动作。下班前顺手敲一行命令,比半夜爬起来救火强多了。