【正文】
各位正在用键盘撬动地球的朋友们,今天我们不谈电商江湖,也不聊云计算星辰大海,只聊一个听起来枯燥却能让心脏停拍半秒的七字咒语——“dz备份数据库”。
十年前,我在西湖边跟程序员撸串,他说服务器一旦宕机,就像西湖水瞬间蒸干,鱼虾全裸奔。我当时筷子一抖,问他怎么办?他吐出两个字:备份。今天,我把这两个字拆成七步,送给所有把数据当命的人。
第一步,认清“dz”到底是谁。它不是拼音缩写,而是 Discuz! 的昵称,国内八成论坛的心脏。这颗心脏跳动在 MySQL 里,帖子、用户、积分、附件,全在里头。心脏停了,论坛就是一块数字墓碑。
第二步,选时间。别在论坛最嗨的午夜十二点动手,挑清晨五点,在线人数堪比火星人。提前发公告:“兄弟们,系统做个SPA,半小时后满血复活。”用户骂声减半。
第三步,进服务器。用SSH登陆,姿势优雅:ssh root@你的IP。输入密码那一刻,手指要有钢琴家的节奏,太快会被防火墙当成暴力破解,太慢服务器以为你睡着了。
第四步,锁表。MySQL里跑一句:FLUSH TABLES WITH READ LOCK; 就像给数据库打了一针,所有写入暂停,数据静止成琥珀。此刻千万别手抖关终端,否则锁永远解不开,论坛直接社死。
第五步,打包。用 tar 命令把 /data/mysql 整个文件夹打成 tar.gz,就像把整座图书馆装进真空袋。再顺手 mysqldump 导出一份 .sql,双保险。命令不长,却决定生死:
mysqldump -u root -p discuz > /backup/discuz_$(date +%F).sql
第六步,解锁。结束,UNLOCK TABLES; 论坛恢复呼吸,用户继续灌水,仿佛什么都没发生。但你知道,保险箱里已多了一颗时间胶囊。
第七步,异地。把 .tar.gz 和 .sql 扔到另一台云主机,或者 OSS,甚至NAS。记住,同城备份是备胎,异地备份才是亲儿子。火灾、地震、熊孩子一杯水,都可能让同城备份变笑话。
七步走完,论坛依旧喧嚣,你却悄悄在数字世界埋下了一颗复活币。有人问,多久备份一次?我说,数据变动一次,备份就跟一次。做不到?那就每天自动脚本,让 cron 在凌晨替你守夜。
最后一碗鸡汤:数据不是冰冷的0和1,它是千万用户熬的夜、吹的牛、留下的青春。备份不是技术,是责任。今天你懒一次,明天用户就能把你挂热搜。别问我怎么知道的,我见过太多“如果当时”的眼泪。
把服务器当恋人,把备份当情书,每天写一封,灾难来时才能体面地说:别怕,我在。
【教程】手把手教你完成一次 dz 备份数据库
以下操作基于 Linux + MySQL + Discuz!,小白也能五分钟学会。
前期准备
• 服务器 root 权限
• 已安装 MySQL / MariaDB
• 已安装 SSH 客户端(Windows 可用 PuTTY)
登录服务器
打开终端或 PuTTY,输入:
ssh root@服务器公网IP
回车后输入密码。
查看数据库名
登录 MySQL:
mysql -u root -p
输入密码后执行:
SHOW DATABASES;
找到 discuz 对应的数据库名(假设为 discuz)。
锁表并导出
在 MySQL 内执行:
FLUSH TABLES WITH READ LOCK;
保持此窗口不动,另开一个新终端窗口,执行:
mysqldump -u root -p discuz > /backup/discuz_$(date +%F).sql
导出完成后回到 MySQL 窗口:
UNLOCK TABLES;
EXIT;
打包附件与程序
论坛上传的图片、附件一般在 /data/attachment 或 /uc_server/data。
tar -zcvf /backup/discuz_files_$(date +%F).tar.gz /网站根目录
传输到异地
以阿里云 OSS 为例:
• 安装 ossutil
• 配置密钥
• 上传:
ossutil cp /backup/discuz_(date +%F).sql oss://你的Bucket/backup/
ossutil cp /backup/discuz_files_(date +%F).tar.gz oss://你的Bucket/backup/
自动化脚本(可选)
创建 /root/backup.sh:
#!/bin/bash
DATE=$(date +%F)
mysqldump -u root -p你的密码 discuz /backup/discuz_${DATE}.sql
tar -zcf /backup/discuz_files_${DATE}.tar.gz /网站根目录
ossutil cp /backup/discuz_${DATE}.sql oss://你的Bucket/backup/
ossutil cp /backup/discuz_files_${DATE}.tar.gz oss://你的Bucket/backup/
find /backup -type f -mtime +7 -delete
赋可执行权限:
chmod +x /root/backup.sh
加入定时任务:
crontab -e
写入:
0 5 * * * /root/backup.sh
每天凌晨五点自动备份并上传。
恢复演练(必做)
• 新建测试库:CREATE DATABASE discuz_test;
• 导入备份:mysql -u root -p discuz_test < /backup/discuz_2025-09-02.sql
• 检查表、附件是否完整。
只有演练过,灾难来时才不会手抖。
备份不是仪式,是习惯。祝你的论坛长命百岁,永不宕机。