PHPackages                             hlw2326/think-plugin-backup - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. hlw2326/think-plugin-backup

ActiveThink-admin-plugin[Database &amp; ORM](/categories/database)

hlw2326/think-plugin-backup
===========================

HLW,SQL Data

v1.0.2(2mo ago)14MITPHPPHP &gt;8.2

Since Apr 6Pushed 2mo agoCompare

[ Source](https://github.com/hlw2326/think-plugin-backup)[ Packagist](https://packagist.org/packages/hlw2326/think-plugin-backup)[ Docs](https://www.hlw2326.com)[ RSS](/packages/hlw2326-think-plugin-backup/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (5)Used By (0)

数据库配置
=====

[](#数据库配置)

数据库备份管理模块，纯 PHP 实现，无需 shell 命令，支持本地存储和远程对象存储（阿里云 OSS、七牛云、腾讯云 COS、又拍云 USS、Alist）同步上传。

> **作者微信**：hlw2326 | **官网**：

---

用户解析器注册
-------

[](#用户解析器注册)

插件通过 `UserResolverService` 获取当前登录用户 ID，**具体实现由主应用注册**：

```
// 在主应用初始化时注册
use hlw2326\mp\shared\service\UserResolverService;

UserResolverService::register(function (string $appid): ?string {
    return \app\mini\model\MiniUser::getCurrentUserId($appid);
});
```

---

API 接口
------

[](#api-接口)

ThinkAdmin 插件根据控制器命名空间自动发现路由。

路由映射规则：`plugin\{code}\controller\{module}\{controller}@{action}`

本插件 `{code}` 为 `backup`，控制器在 `controller/api/v1/` 下：

```
plugin\backup\controller\api\v1\Backup::list   → /backup/api/v1/backup/list
plugin\backup\controller\api\v1\Backup::stats  → /backup/api/v1/backup/stats
plugin\backup\controller\api\v1\Backup::tables → /backup/api/v1/backup/tables

```

### 接口认证

[](#接口认证)

参数位置说明`appid`Header / GET / POST小程序标识，用于解析用户身份### 接口列表

[](#接口列表)

接口方法登录说明`/backup/api/v1/backup/list`GET是获取备份记录列表`/backup/api/v1/backup/stats`GET是获取备份统计`/backup/api/v1/backup/tables`GET否获取可备份的表列表---

功能特性
----

[](#功能特性)

- **纯 PHP 备份**：无需 shell/mysqldump，直接通过 PDO 导出数据库结构和数据
- **分批导出**：大表分批查询（每批 500 条），避免内存溢出
- **本地存储**：备份文件存储到服务器本地目录，支持自定义路径
- **远程同步**：备份成功后自动上传到对象存储（需在系统存储配置中完成云存储配置）
- **配置校验**：上传前自动检测对象存储配置是否完整，配置缺失时跳过上传不影响本地备份
- **远程删除**：删除本地备份时同步删除远程对象存储中的文件
- **孤表清理**：可清理数据库无记录但本地仍有文件的孤立备份

---

安装说明
----

[](#安装说明)

执行 Phinx 迁移创建备份记录表：

```
php think migrate:run -p package/think-sql-data/stc
```

> 如果迁移文件已执行过，需手动补加新字段：
>
> ```
> ALTER TABLE `data_backup`
>   ADD COLUMN `storage_type` varchar(20) NOT NULL DEFAULT '' COMMENT '存储类型(空=本地,alioss/qiniu等=对象存储)' AFTER `status`,
>   ADD COLUMN `storage_url` varchar(500) NOT NULL DEFAULT '' COMMENT '对象存储访问地址' AFTER `storage_type`,
>   ADD INDEX `storage_type` (`storage_type`);
> ```

---

配置说明
----

[](#配置说明)

### 备份存储路径

[](#备份存储路径)

**配置路径**：`系统管理 → 数据库配置`

配置项说明备份存储路径自定义备份文件存储目录，留空使用 `runtime/database`（常规）或 `public/runtime/database`（网站根目录可访问）远程对象存储选择本地存储（不同步）或任一云存储类型。切换为云存储后，备份文件将自动同步上传到远程空间> 远程对象存储需要先在 **系统管理 → 存储设置** 中完成对应云存储的配置（AccessKey、SecretKey、Bucket 等），否则备份时将跳过上传步骤。

### 配置 key 一览

[](#配置-key-一览)

key说明可选值`data.backup_path`备份文件本地存储路径留空使用默认路径`data.backup_storage_type`远程对象存储类型`""`（本地），`alioss`，`qiniu`，`txcos`，`upyun`，`alist`---

数据库表结构
------

[](#数据库表结构)

### data\_backup 备份记录表

[](#data_backup-备份记录表)

字段类型说明`id`int主键ID`name`varchar(255)备份名称`file`varchar(500)备份文件名（含时间戳）`size`bigint备份文件大小（字节）`path`varchar(500)备份文件完整路径`tables`int备份表数量`status`tinyint状态（0=失败，1=成功）`storage_type`varchar(20)存储类型（空=本地，`alioss`/`qiniu` 等=对象存储）`storage_url`varchar(500)对象存储访问地址（上传成功时填充）`create_at`timestamp创建时间`update_at`timestamp更新时间---

使用说明
----

[](#使用说明)

### 创建备份

[](#创建备份)

1. 进入 **数据管理 → 备份管理**
2. 点击 **创建备份** 按钮
3. 可填写备份名称（留空自动生成）
4. 点击 **开始备份**，完成后自动返回列表

### 还原备份

[](#还原备份)

1. 在备份列表中点击对应记录的 **还原** 按钮
2. 确认后执行 SQL 还原（单文件限制 20MB）

### 远程对象存储

[](#远程对象存储)

- 备份文件始终先保存到本地，再根据配置决定是否上传到云存储
- 上传前会自动检查云存储配置是否完整（Bucket、AccessKey、SecretKey 等），配置缺失时跳过上传，不影响本地备份
- 上传失败（如 key 被删除、网络异常）时 `storage_url` 为空，本地备份记录不受影响

### 清理孤立文件

[](#清理孤立文件)

点击 **清理孤立文件**，删除本地存在但数据库无对应记录的备份文件。

---

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance84

Actively maintained with recent releases

Popularity5

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 87.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

4

Last Release

85d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ee6da66b65746f35ea0bae8c4ed1625bd4e07d1eed206d19161ba4e22a412574?d=identicon)[hlw2326](/maintainers/hlw2326)

---

Top Contributors

[![hlw2326](https://avatars.githubusercontent.com/u/273061548?v=4)](https://github.com/hlw2326 "hlw2326 (7 commits)")[![a1608626143](https://avatars.githubusercontent.com/u/26795162?v=4)](https://github.com/a1608626143 "a1608626143 (1 commits)")

### Embed Badge

![Health badge](/badges/hlw2326-think-plugin-backup/health.svg)

```
[![Health](https://phpackages.com/badges/hlw2326-think-plugin-backup/health.svg)](https://phpackages.com/packages/hlw2326-think-plugin-backup)
```

###  Alternatives

[jdorn/sql-formatter

a PHP SQL highlighting library

3.9k117.2M117](/packages/jdorn-sql-formatter)[propel/propel1

Propel is an open-source Object-Relational Mapping (ORM) for PHP5.

8351.6M87](/packages/propel-propel1)[pgvector/pgvector

pgvector support for PHP

198741.5k11](/packages/pgvector-pgvector)[jfelder/oracledb

Oracle DB driver for Laravel

11518.4k](/packages/jfelder-oracledb)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
