宝塔面板用「备份数据库」计划任务可开箱即用,本质是调用mysqldump生成.sql并压缩为.tar.gz;需勾选具体数据库、设合理保留份数、排查权限与密码同步问题。

怎么用计划任务自动备份数据库
宝塔面板的「备份数据库」计划任务是开箱即用的最简方案,本质是调用 mysqldump 命令生成 .sql 文件并压缩为 .tar.gz,全程无需写脚本或配环境。
- 登录后直奔左侧【计划任务】→ 点击【添加计划任务】→ 任务类型选【备份数据库】
- 执行周期建议设在凌晨 2–4 点,比如填
每天 02:00,避开业务高峰和其它定时任务争资源 - 必须勾选具体数据库名——如果下拉列表为空,请先确认数据库已创建且未被删除(空库不会显示)
- 保留份数别设太高:设
30没问题,但若单库超 500MB,又保留 30 份,磁盘可能几天就满;建议搭配日志定期清理
为什么备份文件只有几 KB 或直接失败
这是最常被忽略的权限与路径陷阱:备份动作由宝塔后台服务(bt 进程)以 www 用户身份执行,它默认无权读取某些数据库配置或写入目标目录。
- 现象:
backup_*.tar.gz文件大小为128B或0B,点开是空文件或报错mysqldump: Got error: 1045: Access denied for user - 原因一:数据库 root 密码被修改过,但宝塔未同步更新(查看
/www/server/panel/data/default.db或重置面板数据库密码) - 原因二:备份到本地磁盘时,目标路径如
/www/backup/database权限为700且属主不是www,导致写入失败 - 临时验证法:手动执行一次任务 → 查看右侧【日志】→ 搜索
mysqldump关键字,看是否出现认证失败或Permission denied
备份到 FTP/COS/七牛云时连不上怎么办
远程备份失败几乎全是连接层问题,和数据库本身无关。宝塔插件只做上传封装,不处理网络协商细节。
- FTP 备份卡在「正在获取文件列表」:90% 是 FTP 主动模式被防火墙拦截,需在 FTP 服务端开启被动模式(PASV),或改用 SFTP(宝塔暂不原生支持,得换 shell 脚本)
- COS 报错
InvalidAccessKeyId或Bucket not found:检查secret_id和secret_key是否复制完整(尤其开头结尾有空格)、region是否和 Bucket 实际地域一致(如ap-shanghai≠ap-beijing) - 所有远程备份首次务必点【执行】手动触发一次,并立刻去目标存储里找文件——不要等第二天,否则问题积压难定位
不用宝塔时,crontab + mysqldump 怎么写才可靠
脱离面板后,mysqldump 是唯一通用解法,但裸写容易出错:密码明文、时间戳冲突、锁表阻塞业务。
- 避免密码写进命令:用
~/.my.cnf配置文件存凭证,权限设为600,内容如下:[client] user = root password = your_real_password
- 时间戳必须带秒级精度,否则同分钟多次执行会覆盖:
$(date +\%Y\%m\%d_\%H\%M\%S) - 加
--single-transaction参数避免锁全表(InnoDB 有效),大库务必加:mysqldump --single-transaction dbname > /backup/dbname_$(date +\%Y\%m\%d_\%H\%M\%S).sql - crontab 行末不能有注释,且
%是特殊字符,必须转义:0 2 * * * /bin/bash /root/backup_db.sh \> /dev/null 2\>\&1
真正麻烦的从来不是“怎么点出来”,而是备份后没人检查文件是否可恢复。哪怕每周抽一分钟,从备份包里 tar -tzf 看一眼结构,或随机挑一个 .sql 用 head -20 确认有 CREATE TABLE,就能避开绝大多数“备份了等于没备”的现场。

















