Typecho数据库备份脚本,定时自动导出

Typecho站点最怕的就是数据库损坏或误删,手动导出既容易忘又麻烦。
本文给出一套可落地的Shell备份脚本,配合crontab定时自动导出,并自动清理过期文件,零基础也能照着做完。

先理清备份前要确认的三件事

动手写脚本之前,先把下面几个信息记下来,后面命令里都要用到:

  • 数据库连接信息:Typecho的数据库名、用户名、密码、主机地址。这些在网站根目录的 config.inc.php 文件里能找到,打开后看 $db->database$db->user$db->password$db->host 这几个变量。
  • 备份文件存放目录:建议放在网站根目录之外,例如 /www/backup/typecho,避免被Web访问到。
  • 服务器是否已安装mysqldump:在SSH里执行 which mysqldump,有路径返回说明可用。宝塔面板用户一般已自带。

编写自动导出脚本

在服务器上创建脚本文件,路径可以自己定,这里用 /root/backup_typecho.sh

nano /root/backup_typecho.sh

把下面内容粘贴进去,记得把开头四个变量改成你自己的:

#!/bin/bash

DB_NAME="typecho_db"
DB_USER="typecho_user"
DB_PASS="你的数据库密码"
DB_HOST="localhost"

BACKUP_DIR="/www/backup/typecho"
DATE=$(date +%Y%m%d_%H%M%S)
FILE_NAME="typecho_${DATE}.sql"

mkdir -p "$BACKUP_DIR"

mysqldump -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/$FILE_NAME"

gzip "$BACKUP_DIR/$FILE_NAME"

find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete

保存后给脚本加执行权限:

chmod +x /root/backup_typecho.sh

脚本逻辑不复杂:
先进入备份目录,
mysqldump 导出纯SQL文件,
gzip 压缩成 .sql.gz
最后用 find 删掉7天前的旧备份。保留天数可以按需调整
-mtime +7 里的7改成14就是保留两周。

配置crontab实现定时自动导出

先手动跑一次脚本,确认能正常生成文件:

/root/backup_typecho.sh
ls -lh /www/backup/typecho

看到有 .sql.gz 文件就说明脚本没问题。
随后加入定时任务,执行:

crontab -e

在打开的编辑器中添加一行,比如每天凌晨3点执行一次:

0 3 * * * /bin/bash /root/backup_typecho.sh > /dev/null 2>&1

这行的意思是:
每天3点0分,
用bash执行备份脚本。> /dev/null 2>&1 表示不保留输出日志,
如果你需要排查问题,
可以改成 >> /var/log/typecho_backup.log 2>&1
把每次执行结果写进日志文件。

保存退出后,用 crontab -l 能看到刚添加的任务就说明配置成功。

宝塔面板用户的替代操作路径

如果你用的是宝塔面板,不想敲crontab命令,可以走面板界面:

  1. 进入面板左侧菜单的 计划任务
  2. 点击 添加任务,任务类型选 Shell脚本
  3. 任务名称填“Typecho数据库备份”,执行周期选“每天”,时间设为凌晨3点。
  4. 脚本内容直接粘贴上面脚本文件的全部内容。
  5. 保存后点击 执行 测试一次,再到备份目录查看是否生成文件。

两种方式效果一样,选自己顺手的即可。

容易踩坑的几个地方

密码里带特殊字符:如果数据库密码包含 $! 等符号,直接写在脚本里可能被Shell解析出错。
稳妥做法是把密码用单引号包起来,或者改用MySQL配置文件方式,但最简单的办法是给Typecho单独建一个只含字母数字的数据库用户。

备份目录权限:脚本由cron执行时的用户身份可能和手动执行不同,如果备份目录权限不够会静默失败。
建议先手动执行一次,确认目录可写;
cron默认以当前登录用户身份运行,用 whoami 确认。

没验证就放任不管:定时任务配好后,第二天务必到备份目录看一眼文件时间戳是不是新的。备份脚本最怕的就是“以为在跑,其实早就失败了”

只备份数据库不够:Typecho的附件和主题文件在 usr/uploadsusr/themes 目录里,数据库备份只含文章和配置。
重要站点建议数据库和 usr 目录一起备份,或者定期手动打包整站。

怎么确认备份真的可用

光有文件还不够,要验证备份能恢复。
最直接的方法:新建一个空数据库,用 mysql 命令导入备份文件试试:

gunzip -c /www/backup/typecho/typecho_20250101_030000.sql.gz | mysql -u test_user -p test_db

导入不报错、表结构完整,就说明备份是有效的。建议每隔一两个月做一次恢复演练,别等到真出事才发现备份是坏的。

如果服务器磁盘空间紧张,可以把备份目录挂载到对象存储或另一台机器上,脚本里加一行 rsyncscp 同步过去,这样即使本机磁盘损坏也有异地副本。

常见疑问

脚本里mysqldump提示command not found怎么办?
说明服务器没装MySQL客户端工具。宝塔用户可以在软件商店安装MySQL后自带;其他环境用包管理器安装,如 apt install mysql-clientyum install mysql

备份文件越来越大怎么处理?
可以把保留天数改短,比如 -mtime +3 只留3天;或者把备份同步到对象存储后本地只留最近1份。

cron任务没执行,怎么排查?
先检查 crontab -l 里任务在不在,再看系统日志 /var/log/cron/var/log/syslog 里有没有执行记录。把脚本输出重定向到日志文件是最快的排查方式。

能不能用宝塔自带的数据库备份功能?
可以,宝塔计划任务里也有“备份数据库”类型,操作更简单。但自写脚本更灵活,方便自定义保留策略和异地同步,两者不冲突,按需选择。

数据库备份是Typecho站点运维里性价比最高的一个动作,花十分钟配好脚本,之后就不用再操心。
先把本文的脚本跑通,再根据自己服务器的实际情况调整目录、保留天数和同步策略,基本就稳了。

分享到:
上一篇
Typecho开启CDN,静态资源加速
下一篇
Typecho更换模板后样式错乱修复
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意