herdux-cli 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -25
- package/README.pt-BR.md +81 -25
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +29 -2
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cloud.d.ts +3 -0
- package/dist/commands/cloud.d.ts.map +1 -0
- package/dist/commands/cloud.js +322 -0
- package/dist/commands/cloud.js.map +1 -0
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +33 -1
- package/dist/commands/restore.js.map +1 -1
- package/dist/core/interfaces/database-engine.interface.d.ts +1 -1
- package/dist/core/interfaces/database-engine.interface.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/infra/cloud/cloud-credential.d.ts +4 -0
- package/dist/infra/cloud/cloud-credential.d.ts.map +1 -0
- package/dist/infra/cloud/cloud-credential.js +16 -0
- package/dist/infra/cloud/cloud-credential.js.map +1 -0
- package/dist/infra/cloud/s3.service.d.ts +23 -0
- package/dist/infra/cloud/s3.service.d.ts.map +1 -0
- package/dist/infra/cloud/s3.service.js +114 -0
- package/dist/infra/cloud/s3.service.js.map +1 -0
- package/dist/infra/config/config.service.d.ts +11 -0
- package/dist/infra/config/config.service.d.ts.map +1 -1
- package/dist/infra/config/config.service.js +16 -0
- package/dist/infra/config/config.service.js.map +1 -1
- package/dist/infra/docker/docker.service.d.ts.map +1 -1
- package/dist/infra/docker/docker.service.js.map +1 -1
- package/dist/infra/engines/engine-factory.d.ts.map +1 -1
- package/dist/infra/engines/engine-factory.js +3 -0
- package/dist/infra/engines/engine-factory.js.map +1 -1
- package/dist/infra/engines/inspect-backup.d.ts +1 -0
- package/dist/infra/engines/inspect-backup.d.ts.map +1 -1
- package/dist/infra/engines/inspect-backup.js +14 -1
- package/dist/infra/engines/inspect-backup.js.map +1 -1
- package/dist/infra/engines/mongodb/mongodb-env.d.ts +11 -0
- package/dist/infra/engines/mongodb/mongodb-env.d.ts.map +1 -0
- package/dist/infra/engines/mongodb/mongodb-env.js +32 -0
- package/dist/infra/engines/mongodb/mongodb-env.js.map +1 -0
- package/dist/infra/engines/mongodb/mongodb.engine.d.ts +21 -0
- package/dist/infra/engines/mongodb/mongodb.engine.d.ts.map +1 -0
- package/dist/infra/engines/mongodb/mongodb.engine.js +282 -0
- package/dist/infra/engines/mongodb/mongodb.engine.js.map +1 -0
- package/dist/infra/engines/resolve-connection.d.ts +17 -0
- package/dist/infra/engines/resolve-connection.d.ts.map +1 -1
- package/dist/infra/engines/resolve-connection.js +4 -4
- package/dist/infra/engines/resolve-connection.js.map +1 -1
- package/package.json +7 -1
package/README.md
CHANGED
|
@@ -12,12 +12,13 @@
|
|
|
12
12
|
|
|
13
13
|
A fast, interactive CLI that removes friction from daily local database workflows, especially when juggling multiple instances and large datasets.
|
|
14
14
|
|
|
15
|
-

|
|
16
16
|

|
|
17
17
|

|
|
18
18
|

|
|
19
19
|

|
|
20
20
|

|
|
21
|
+

|
|
21
22
|
[](https://github.com/sponsors/eduardozaniboni)
|
|
22
23
|
[](https://www.buymeacoffee.com/eduardozaniboni)
|
|
23
24
|
|
|
@@ -39,11 +40,12 @@ herdux list
|
|
|
39
40
|
|
|
40
41
|
## Supported Engines
|
|
41
42
|
|
|
42
|
-
| Engine | Status | Client Tools Required
|
|
43
|
-
| ---------- | ------ |
|
|
44
|
-
| PostgreSQL | ✅ | `psql`, `pg_dump`, `pg_restore`
|
|
45
|
-
| MySQL | ✅ | `mysql`, `mysqldump`
|
|
46
|
-
| SQLite | ✅ | `sqlite3`
|
|
43
|
+
| Engine | Status | Client Tools Required |
|
|
44
|
+
| ---------- | ------ | -------------------------------------- |
|
|
45
|
+
| PostgreSQL | ✅ | `psql`, `pg_dump`, `pg_restore` |
|
|
46
|
+
| MySQL | ✅ | `mysql`, `mysqldump` |
|
|
47
|
+
| SQLite | ✅ | `sqlite3` |
|
|
48
|
+
| MongoDB | ✅ | `mongosh`, `mongodump`, `mongorestore` |
|
|
47
49
|
|
|
48
50
|
Use `--engine <name>` or configure the engine in a saved profile. PostgreSQL is the default.
|
|
49
51
|
|
|
@@ -51,6 +53,7 @@ Use `--engine <name>` or configure the engine in a saved profile. PostgreSQL is
|
|
|
51
53
|
herdux list # PostgreSQL (default)
|
|
52
54
|
herdux --engine mysql list # MySQL
|
|
53
55
|
herdux --engine sqlite list # SQLite (file-based, no server required)
|
|
56
|
+
herdux --engine mongodb list # MongoDB
|
|
54
57
|
herdux list -s my-profile # Using a saved server profile
|
|
55
58
|
```
|
|
56
59
|
|
|
@@ -91,6 +94,7 @@ Same commands. Any engine. Fewer flags. Fewer mistakes. Zero terminal fatigue.
|
|
|
91
94
|
- **For PostgreSQL:** `psql`, `pg_dump`, `pg_restore` installed and in your `PATH`
|
|
92
95
|
- **For MySQL:** `mysql`, `mysqldump` installed and in your `PATH`
|
|
93
96
|
- **For SQLite:** `sqlite3` installed and in your `PATH`
|
|
97
|
+
- **For MongoDB:** `mongosh`, `mongodump`, `mongorestore` installed and in your `PATH`
|
|
94
98
|
|
|
95
99
|
> [!TIP]
|
|
96
100
|
> Run `herdux doctor` after installation to verify everything is correctly set up.
|
|
@@ -191,19 +195,23 @@ Aborts immediately if any safety backup fails. No data is dropped without a conf
|
|
|
191
195
|
Creates a timestamped backup in `~/.herdux/backups/` by default.
|
|
192
196
|
|
|
193
197
|
```bash
|
|
194
|
-
herdux backup mydb
|
|
195
|
-
herdux backup mydb --format plain
|
|
196
|
-
herdux backup mydb --drop
|
|
197
|
-
herdux backup mydb --drop --yes
|
|
198
|
-
herdux backup mydb -o ./my-backups
|
|
198
|
+
herdux backup mydb # Engine-native format (.dump for PG, .db for SQLite, .sql for MySQL, .mongodump for MongoDB)
|
|
199
|
+
herdux backup mydb --format plain # Plain SQL (.sql) — not supported by MongoDB
|
|
200
|
+
herdux backup mydb --drop # Backup, then prompt to drop
|
|
201
|
+
herdux backup mydb --drop --yes # Backup + drop, no confirmation
|
|
202
|
+
herdux backup mydb -o ./my-backups # Custom output directory
|
|
203
|
+
herdux backup mydb --upload backups/ # Backup and upload to S3 prefix backups/
|
|
204
|
+
herdux backup mydb --upload backups/ --no-keep # Backup, upload, then delete local file
|
|
199
205
|
```
|
|
200
206
|
|
|
201
|
-
| Option | Description
|
|
202
|
-
| --------------------- |
|
|
203
|
-
| `-F, --format <type>` | `custom` (default, engine-native) or `plain` (SQL)
|
|
204
|
-
| `-d, --drop` | Prompt to drop the database after a successful backup
|
|
205
|
-
| `-y, --yes` | Skip drop confirmation (requires `--drop`)
|
|
206
|
-
| `-o, --output <dir>` | Output directory (default: `~/.herdux/backups`)
|
|
207
|
+
| Option | Description |
|
|
208
|
+
| --------------------- | ----------------------------------------------------------------- |
|
|
209
|
+
| `-F, --format <type>` | `custom` (default, engine-native) or `plain` (SQL) |
|
|
210
|
+
| `-d, --drop` | Prompt to drop the database after a successful backup |
|
|
211
|
+
| `-y, --yes` | Skip drop confirmation (requires `--drop`) |
|
|
212
|
+
| `-o, --output <dir>` | Output directory (default: `~/.herdux/backups`) |
|
|
213
|
+
| `--upload [prefix]` | Upload backup to S3 after creation (requires cloud config) |
|
|
214
|
+
| `--no-keep` | Delete local backup after successful upload (requires `--upload`) |
|
|
207
215
|
|
|
208
216
|
---
|
|
209
217
|
|
|
@@ -228,16 +236,20 @@ The target database is automatically created if it does not exist.
|
|
|
228
236
|
|
|
229
237
|
Inspects the contents of a backup file without connecting to a database. Completely offline.
|
|
230
238
|
|
|
231
|
-
| Extension | Output
|
|
232
|
-
| ----------------- |
|
|
233
|
-
| `.dump` | PostgreSQL custom format: full Table of Contents (`pg_restore --list`)
|
|
234
|
-
| `.
|
|
235
|
-
| `.
|
|
239
|
+
| Extension | Output |
|
|
240
|
+
| ----------------- | ---------------------------------------------------------------------------- |
|
|
241
|
+
| `.dump` | PostgreSQL custom format: full Table of Contents (`pg_restore --list`) |
|
|
242
|
+
| `.tar` | PostgreSQL tar format: full Table of Contents (`pg_restore --list`) |
|
|
243
|
+
| `.sql` | Plain SQL (any engine): CREATE TABLE, VIEW, INDEX, SEQUENCE statements |
|
|
244
|
+
| `.db` / `.sqlite` | SQLite database file: schema (`sqlite3 .schema`) |
|
|
245
|
+
| `.mongodump` | MongoDB archive: collection list dry-run (`mongorestore --archive --dryRun`) |
|
|
236
246
|
|
|
237
247
|
```bash
|
|
238
|
-
hdx inspect backup.dump
|
|
239
|
-
hdx inspect
|
|
240
|
-
hdx inspect
|
|
248
|
+
hdx inspect backup.dump # Table of Contents of a PostgreSQL custom dump
|
|
249
|
+
hdx inspect backup.tar # Table of Contents of a PostgreSQL tar dump
|
|
250
|
+
hdx inspect export.sql # CREATE statements extracted from plain SQL
|
|
251
|
+
hdx inspect mydb.db # SQLite schema
|
|
252
|
+
hdx inspect mydb_2026-03-04.mongodump # MongoDB archive collection listing
|
|
241
253
|
```
|
|
242
254
|
|
|
243
255
|
---
|
|
@@ -256,6 +268,50 @@ hdx docker stop pg-dev --remove # Stop and remove the container
|
|
|
256
268
|
|
|
257
269
|
---
|
|
258
270
|
|
|
271
|
+
### `herdux cloud`
|
|
272
|
+
|
|
273
|
+
Manages backup files in S3-compatible cloud storage (AWS S3, Cloudflare R2, MinIO, DigitalOcean Spaces, and others).
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
# Configure
|
|
277
|
+
hdx cloud config bucket my-bucket
|
|
278
|
+
hdx cloud config region us-east-1
|
|
279
|
+
hdx cloud config access-key AKIAIO...
|
|
280
|
+
hdx cloud config secret-key wJalrX...
|
|
281
|
+
hdx cloud config endpoint https://account.r2.cloudflarestorage.com # optional, for non-AWS providers
|
|
282
|
+
|
|
283
|
+
# Browse and manage backups in the bucket
|
|
284
|
+
hdx cloud list # Directory mode: list immediate children at root
|
|
285
|
+
hdx cloud list backups/mydb/ # List immediate children at path (positional)
|
|
286
|
+
hdx cloud list --prefix backups/mydb/ # Same as above (flag form)
|
|
287
|
+
hdx cloud list --recursive # List all objects in the bucket
|
|
288
|
+
hdx cloud list backups/ --recursive # List all objects under a prefix
|
|
289
|
+
hdx cloud download backups/mydb_2026-03-03.dump # Save to ~/.herdux/backups/
|
|
290
|
+
hdx cloud download backups/mydb_2026-03-03.dump -o /tmp/ # Save to custom directory
|
|
291
|
+
hdx cloud upload ./mydb_2026-03-03.dump # Upload file to bucket root
|
|
292
|
+
hdx cloud upload ./mydb_2026-03-03.dump --prefix backups/ # Upload under a prefix
|
|
293
|
+
hdx cloud delete backups/mydb_2026-03-03.dump # Verifies existence, then asks for confirmation
|
|
294
|
+
hdx cloud delete backups/mydb_2026-03-03.dump --yes
|
|
295
|
+
|
|
296
|
+
# Backup directly to S3
|
|
297
|
+
hdx backup mydb --upload backups/ # Backup and upload to prefix backups/
|
|
298
|
+
hdx backup mydb --upload # Backup and upload to bucket root
|
|
299
|
+
hdx backup mydb --upload backups/ --no-keep # Backup, upload, then delete local file
|
|
300
|
+
|
|
301
|
+
# Restore directly from S3
|
|
302
|
+
hdx restore s3://my-bucket/backups/mydb_2026-03-03.dump --db mydb
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Credentials can also be provided via env vars (recommended for CI/production):
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
export AWS_ACCESS_KEY_ID=AKIAIO...
|
|
309
|
+
export AWS_SECRET_ACCESS_KEY=wJalrX...
|
|
310
|
+
export AWS_DEFAULT_REGION=us-east-1
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
259
315
|
## Configuration & Server Profiles
|
|
260
316
|
|
|
261
317
|
Configuration is stored at `~/.herdux/config.json`.
|
package/README.pt-BR.md
CHANGED
|
@@ -12,12 +12,13 @@
|
|
|
12
12
|
|
|
13
13
|
Uma CLI rápida e interativa que remove a fricção dos workflows diários com bancos de dados locais, especialmente ao lidar com múltiplas instâncias e grandes datasets.
|
|
14
14
|
|
|
15
|
-

|
|
16
16
|

|
|
17
17
|

|
|
18
18
|

|
|
19
19
|

|
|
20
20
|

|
|
21
|
+

|
|
21
22
|
[](https://github.com/sponsors/eduardozaniboni)
|
|
22
23
|
[](https://www.buymeacoffee.com/eduardozaniboni)
|
|
23
24
|
|
|
@@ -39,11 +40,12 @@ herdux list
|
|
|
39
40
|
|
|
40
41
|
## Engines Suportadas
|
|
41
42
|
|
|
42
|
-
| Engine | Status | Ferramentas Cliente Necessárias
|
|
43
|
-
| ---------- | ------ |
|
|
44
|
-
| PostgreSQL | ✅ | `psql`, `pg_dump`, `pg_restore`
|
|
45
|
-
| MySQL | ✅ | `mysql`, `mysqldump`
|
|
46
|
-
| SQLite | ✅ | `sqlite3`
|
|
43
|
+
| Engine | Status | Ferramentas Cliente Necessárias |
|
|
44
|
+
| ---------- | ------ | -------------------------------------- |
|
|
45
|
+
| PostgreSQL | ✅ | `psql`, `pg_dump`, `pg_restore` |
|
|
46
|
+
| MySQL | ✅ | `mysql`, `mysqldump` |
|
|
47
|
+
| SQLite | ✅ | `sqlite3` |
|
|
48
|
+
| MongoDB | ✅ | `mongosh`, `mongodump`, `mongorestore` |
|
|
47
49
|
|
|
48
50
|
Use `--engine <nome>` ou configure a engine em um perfil salvo. PostgreSQL é o padrão.
|
|
49
51
|
|
|
@@ -51,6 +53,7 @@ Use `--engine <nome>` ou configure a engine em um perfil salvo. PostgreSQL é o
|
|
|
51
53
|
herdux list # PostgreSQL (padrão)
|
|
52
54
|
herdux --engine mysql list # MySQL
|
|
53
55
|
herdux --engine sqlite list # SQLite (baseado em arquivos, sem servidor)
|
|
56
|
+
herdux --engine mongodb list # MongoDB
|
|
54
57
|
herdux list -s meu-perfil # Usando um perfil de servidor salvo
|
|
55
58
|
```
|
|
56
59
|
|
|
@@ -91,6 +94,7 @@ Mesmos comandos. Qualquer engine. Menos flags. Menos erros. Zero fadiga de termi
|
|
|
91
94
|
- **Para PostgreSQL:** `psql`, `pg_dump`, `pg_restore` instalados e no `PATH`
|
|
92
95
|
- **Para MySQL:** `mysql`, `mysqldump` instalados e no `PATH`
|
|
93
96
|
- **Para SQLite:** `sqlite3` instalado e no `PATH`
|
|
97
|
+
- **Para MongoDB:** `mongosh`, `mongodump`, `mongorestore` instalados e no `PATH`
|
|
94
98
|
|
|
95
99
|
> [!TIP]
|
|
96
100
|
> Execute `herdux doctor` após a instalação para verificar se tudo está configurado corretamente.
|
|
@@ -191,19 +195,23 @@ Aborta imediatamente se algum backup de segurança falhar. Nenhum dado é removi
|
|
|
191
195
|
Cria um backup com timestamp em `~/.herdux/backups/` por padrão.
|
|
192
196
|
|
|
193
197
|
```bash
|
|
194
|
-
herdux backup mydb
|
|
195
|
-
herdux backup mydb --format plain
|
|
196
|
-
herdux backup mydb --drop
|
|
197
|
-
herdux backup mydb --drop --yes
|
|
198
|
-
herdux backup mydb -o ./meus-backups
|
|
198
|
+
herdux backup mydb # Formato nativo da engine (.dump para PG, .db para SQLite, .sql para MySQL, .mongodump para MongoDB)
|
|
199
|
+
herdux backup mydb --format plain # SQL puro (.sql)
|
|
200
|
+
herdux backup mydb --drop # Backup e depois pergunta se quer dropar
|
|
201
|
+
herdux backup mydb --drop --yes # Backup + drop sem confirmacao
|
|
202
|
+
herdux backup mydb -o ./meus-backups # Diretorio de saida personalizado
|
|
203
|
+
herdux backup mydb --upload backups/ # Backup e upload para o prefixo backups/ no S3
|
|
204
|
+
herdux backup mydb --upload backups/ --no-keep # Backup, upload e deleta o arquivo local
|
|
199
205
|
```
|
|
200
206
|
|
|
201
|
-
|
|
|
202
|
-
| --------------------- |
|
|
203
|
-
| `-F, --format <tipo>` | `custom` (
|
|
204
|
-
| `-d, --drop` | Pergunta se quer dropar o banco
|
|
205
|
-
| `-y, --yes` | Pula a
|
|
206
|
-
| `-o, --output <dir>` |
|
|
207
|
+
| Opcao | Descricao |
|
|
208
|
+
| --------------------- | ------------------------------------------------------------------- |
|
|
209
|
+
| `-F, --format <tipo>` | `custom` (padrao, nativo da engine) ou `plain` (SQL) |
|
|
210
|
+
| `-d, --drop` | Pergunta se quer dropar o banco apos o backup bem-sucedido |
|
|
211
|
+
| `-y, --yes` | Pula a confirmacao de drop (requer `--drop`) |
|
|
212
|
+
| `-o, --output <dir>` | Diretorio de saida (padrao: `~/.herdux/backups`) |
|
|
213
|
+
| `--upload [prefix]` | Faz upload do backup para o S3 apos a criacao (requer cloud config) |
|
|
214
|
+
| `--no-keep` | Deleta o arquivo local apos upload bem-sucedido (requer `--upload`) |
|
|
207
215
|
|
|
208
216
|
---
|
|
209
217
|
|
|
@@ -228,16 +236,20 @@ O banco de dados é criado automaticamente se não existir.
|
|
|
228
236
|
|
|
229
237
|
Inspeciona o conteúdo de um arquivo de backup sem se conectar ao banco de dados. Funciona completamente offline.
|
|
230
238
|
|
|
231
|
-
| Extensão | Output
|
|
232
|
-
| ----------------- |
|
|
233
|
-
| `.dump` | Formato custom do PostgreSQL: Table of Contents completo (`pg_restore --list`)
|
|
234
|
-
| `.
|
|
235
|
-
| `.
|
|
239
|
+
| Extensão | Output |
|
|
240
|
+
| ----------------- | ---------------------------------------------------------------------------------------- |
|
|
241
|
+
| `.dump` | Formato custom do PostgreSQL: Table of Contents completo (`pg_restore --list`) |
|
|
242
|
+
| `.tar` | Formato tar do PostgreSQL: Table of Contents completo (`pg_restore --list`) |
|
|
243
|
+
| `.sql` | SQL puro (qualquer engine): declarações CREATE TABLE, VIEW, INDEX, SEQUENCE |
|
|
244
|
+
| `.db` / `.sqlite` | Arquivo SQLite: schema (`sqlite3 .schema`) |
|
|
245
|
+
| `.mongodump` | Archive MongoDB: listagem de collections via dry-run (`mongorestore --archive --dryRun`) |
|
|
236
246
|
|
|
237
247
|
```bash
|
|
238
|
-
hdx inspect backup.dump
|
|
239
|
-
hdx inspect
|
|
240
|
-
hdx inspect
|
|
248
|
+
hdx inspect backup.dump # Table of Contents de um dump custom do PostgreSQL
|
|
249
|
+
hdx inspect backup.tar # Table of Contents de um dump tar do PostgreSQL
|
|
250
|
+
hdx inspect export.sql # CREATE statements extraídos de SQL puro
|
|
251
|
+
hdx inspect mydb.db # Schema do SQLite
|
|
252
|
+
hdx inspect mydb_2026-03-04.mongodump # Listagem de collections do archive MongoDB
|
|
241
253
|
```
|
|
242
254
|
|
|
243
255
|
---
|
|
@@ -256,6 +268,50 @@ hdx docker stop pg-dev --remove # Para e remove o container
|
|
|
256
268
|
|
|
257
269
|
---
|
|
258
270
|
|
|
271
|
+
### `herdux cloud`
|
|
272
|
+
|
|
273
|
+
Gerencia arquivos de backup em cloud storage S3-compatible (AWS S3, Cloudflare R2, MinIO, DigitalOcean Spaces e outros).
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
# Configurar
|
|
277
|
+
hdx cloud config bucket meu-bucket
|
|
278
|
+
hdx cloud config region us-east-1
|
|
279
|
+
hdx cloud config access-key AKIAIO...
|
|
280
|
+
hdx cloud config secret-key wJalrX...
|
|
281
|
+
hdx cloud config endpoint https://account.r2.cloudflarestorage.com # opcional, para provedores nao-AWS
|
|
282
|
+
|
|
283
|
+
# Navegar e gerenciar backups no bucket
|
|
284
|
+
hdx cloud list # Modo diretorio: lista filhos imediatos na raiz
|
|
285
|
+
hdx cloud list backups/mydb/ # Lista filhos imediatos no caminho (posicional)
|
|
286
|
+
hdx cloud list --prefix backups/mydb/ # Mesmo que acima (forma de flag)
|
|
287
|
+
hdx cloud list --recursive # Lista todos os objetos no bucket
|
|
288
|
+
hdx cloud list backups/ --recursive # Lista todos os objetos sob um prefixo
|
|
289
|
+
hdx cloud download backups/mydb_2026-03-03.dump # Salva em ~/.herdux/backups/
|
|
290
|
+
hdx cloud download backups/mydb_2026-03-03.dump -o /tmp/ # Salva em diretorio personalizado
|
|
291
|
+
hdx cloud upload ./mydb_2026-03-03.dump # Envia arquivo local para a raiz do bucket
|
|
292
|
+
hdx cloud upload ./mydb_2026-03-03.dump --prefix backups/ # Envia sob um prefixo
|
|
293
|
+
hdx cloud delete backups/mydb_2026-03-03.dump # Verifica existencia e pede confirmacao
|
|
294
|
+
hdx cloud delete backups/mydb_2026-03-03.dump --yes
|
|
295
|
+
|
|
296
|
+
# Backup direto para o S3
|
|
297
|
+
hdx backup mydb --upload backups/ # Backup e upload para o prefixo backups/
|
|
298
|
+
hdx backup mydb --upload # Backup e upload para a raiz do bucket
|
|
299
|
+
hdx backup mydb --upload backups/ --no-keep # Backup, upload e deleta o arquivo local
|
|
300
|
+
|
|
301
|
+
# Restore direto do S3
|
|
302
|
+
hdx restore s3://meu-bucket/backups/mydb_2026-03-03.dump --db mydb
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
As credenciais tambem podem ser fornecidas via variaveis de ambiente (recomendado para CI/producao):
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
export AWS_ACCESS_KEY_ID=AKIAIO...
|
|
309
|
+
export AWS_SECRET_ACCESS_KEY=wJalrX...
|
|
310
|
+
export AWS_DEFAULT_REGION=us-east-1
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
259
315
|
## Configuração e Perfis de Servidor
|
|
260
316
|
|
|
261
317
|
A configuração é armazenada em `~/.herdux/config.json`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8J5D"}
|
package/dist/commands/backup.js
CHANGED
|
@@ -3,8 +3,11 @@ import ora from "ora";
|
|
|
3
3
|
import prompts from "prompts";
|
|
4
4
|
import { resolveEngineAndConnection } from "../infra/engines/resolve-connection.js";
|
|
5
5
|
import * as config from "../infra/config/config.service.js";
|
|
6
|
-
import {
|
|
6
|
+
import { resolveCloudCredentials } from "../infra/cloud/cloud-credential.js";
|
|
7
|
+
import { uploadFile } from "../infra/cloud/s3.service.js";
|
|
8
|
+
import { basename, join } from "path";
|
|
7
9
|
import { homedir } from "os";
|
|
10
|
+
import { unlinkSync } from "fs";
|
|
8
11
|
export function registerBackupCommand(program) {
|
|
9
12
|
program
|
|
10
13
|
.command("backup <database>")
|
|
@@ -15,11 +18,16 @@ Examples:
|
|
|
15
18
|
hdx backup mydb --output /tmp/backups
|
|
16
19
|
hdx backup mydb --format plain
|
|
17
20
|
hdx backup mydb --drop --yes # Backup then drop without confirmation
|
|
18
|
-
hdx backup mydb --engine mysql
|
|
21
|
+
hdx backup mydb --engine mysql
|
|
22
|
+
hdx backup mydb --upload backups/
|
|
23
|
+
hdx backup mydb --upload # Upload to bucket root
|
|
24
|
+
hdx backup mydb --upload --no-keep # Upload and delete local file`)
|
|
19
25
|
.option("-o, --output <dir>", "Output directory for the backup (overrides global config)")
|
|
20
26
|
.option("-d, --drop", "Ask to drop the database after a successful backup")
|
|
21
27
|
.option("-y, --yes", "Skip confirmation when dropping (requires --drop)")
|
|
22
28
|
.option("-F, --format <type>", "Backup format format (custom, plain)", "custom")
|
|
29
|
+
.option("-u, --upload [prefix]", "Upload backup to configured S3 bucket after backup")
|
|
30
|
+
.option("--no-keep", "Delete local backup after successful upload (requires --upload)")
|
|
23
31
|
.action(async (database, cmdOpts) => {
|
|
24
32
|
if (/[\s;|&`$<>(){}\\]/.test(database)) {
|
|
25
33
|
console.error(chalk.red(`\n✖ Invalid database name "${database}". Avoid spaces and special characters (; | & \` $ < > ( ) { } \\).\n`));
|
|
@@ -43,6 +51,25 @@ Examples:
|
|
|
43
51
|
const spinner = ora(`Generating backup for "${database}"...`).start();
|
|
44
52
|
const outputPath = await engine.backupDatabase(database, finalOutputDir, opts, cmdOpts.format);
|
|
45
53
|
spinner.succeed(`Backup saved at ${chalk.cyan(outputPath)}\n`);
|
|
54
|
+
if (cmdOpts.upload !== undefined) {
|
|
55
|
+
const cloud = config.getCloudConfig();
|
|
56
|
+
if (!cloud.bucket) {
|
|
57
|
+
console.error(chalk.red("✖ Bucket not configured. Run: hdx cloud config bucket NAME\n"));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const creds = resolveCloudCredentials(cloud);
|
|
61
|
+
const prefix = typeof cmdOpts.upload === "string" ? cmdOpts.upload : "";
|
|
62
|
+
const key = prefix
|
|
63
|
+
? `${prefix.replace(/\/$/, "")}/${basename(outputPath)}`
|
|
64
|
+
: basename(outputPath);
|
|
65
|
+
const uploadSpinner = ora(`Uploading to s3://${cloud.bucket}/${key}...`).start();
|
|
66
|
+
const s3Url = await uploadFile(outputPath, cloud.bucket, key, creds);
|
|
67
|
+
uploadSpinner.succeed(`Uploaded: ${chalk.cyan(s3Url)}\n`);
|
|
68
|
+
if (!cmdOpts.keep) {
|
|
69
|
+
unlinkSync(outputPath);
|
|
70
|
+
console.log(chalk.gray(` Local backup deleted.\n`));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
46
73
|
if (cmdOpts.drop) {
|
|
47
74
|
let shouldDrop = cmdOpts.yes;
|
|
48
75
|
if (!shouldDrop) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,KAAK,MAAM,MAAM,mCAAmC,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/commands/cloud.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyDzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0Y3D"}
|