add backup file and autobackup code, partial update mutations receive on transation page
This commit is contained in:
356
BACKUP_README.md
Normal file
356
BACKUP_README.md
Normal file
@@ -0,0 +1,356 @@
|
||||
# 🗃️ CKB Database Backup & Restore Guide
|
||||
|
||||
Panduan lengkap untuk backup dan restore database Docker CKB menggunakan mysqldump.
|
||||
|
||||
## 📋 Informasi Database
|
||||
|
||||
- **Container Name**: `ckb-mysql-dev`
|
||||
- **Database Name**: `ckb_db`
|
||||
- **Database Type**: MariaDB 10.6
|
||||
- **Port**: 3306
|
||||
- **Username**: `root` / `laravel`
|
||||
- **Password**: `root` / `password`
|
||||
|
||||
## 🛠️ Available Scripts
|
||||
|
||||
### 1. **backup_db.sh** - Simple Backup
|
||||
|
||||
Script backup sederhana dengan kompresi opsional.
|
||||
|
||||
```bash
|
||||
./backup_db.sh
|
||||
```
|
||||
|
||||
**Features:**
|
||||
|
||||
- ✅ Backup database dengan timestamp
|
||||
- ✅ Kompresi opsional (gzip)
|
||||
- ✅ Validasi container status
|
||||
- ✅ Progress indicator
|
||||
|
||||
### 2. **restore_db.sh** - Database Restore
|
||||
|
||||
Script restore dengan interface interaktif.
|
||||
|
||||
```bash
|
||||
./restore_db.sh
|
||||
```
|
||||
|
||||
**Features:**
|
||||
|
||||
- ✅ List backup files yang tersedia
|
||||
- ✅ Support compressed & uncompressed files
|
||||
- ✅ Konfirmasi sebelum restore
|
||||
- ✅ Automatic decompression
|
||||
|
||||
### 3. **backup_advanced.sh** - Advanced Backup
|
||||
|
||||
Script backup lengkap dengan berbagai opsi.
|
||||
|
||||
```bash
|
||||
./backup_advanced.sh
|
||||
```
|
||||
|
||||
**Features:**
|
||||
|
||||
- ✅ Multiple backup types (Full, Structure, Data)
|
||||
- ✅ Automatic cleanup old backups
|
||||
- ✅ Colored output
|
||||
- ✅ Backup statistics
|
||||
- ✅ Compression with ratio info
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Basic Backup
|
||||
|
||||
```bash
|
||||
# Simple backup
|
||||
./backup_db.sh
|
||||
|
||||
# Manual backup command
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot ckb_db > backup.sql
|
||||
```
|
||||
|
||||
### Advanced Backup
|
||||
|
||||
```bash
|
||||
# Interactive advanced backup
|
||||
./backup_advanced.sh
|
||||
|
||||
# Full backup with all options
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot \
|
||||
--single-transaction \
|
||||
--routines \
|
||||
--triggers \
|
||||
--add-drop-table \
|
||||
ckb_db > full_backup.sql
|
||||
```
|
||||
|
||||
### Restore Database
|
||||
|
||||
```bash
|
||||
# Interactive restore
|
||||
./restore_db.sh
|
||||
|
||||
# Manual restore
|
||||
docker exec -i ckb-mysql-dev mysql -u root -proot ckb_db < backup.sql
|
||||
|
||||
# Restore compressed backup
|
||||
gunzip -c backup.sql.gz | docker exec -i ckb-mysql-dev mysql -u root -proot ckb_db
|
||||
```
|
||||
|
||||
## 📂 Backup Types
|
||||
|
||||
### 1. **Full Backup** (Default)
|
||||
|
||||
```bash
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot \
|
||||
--single-transaction \
|
||||
--routines \
|
||||
--triggers \
|
||||
--add-drop-table \
|
||||
ckb_db > full_backup.sql
|
||||
```
|
||||
|
||||
### 2. **Structure Only**
|
||||
|
||||
```bash
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot \
|
||||
--no-data \
|
||||
--routines \
|
||||
--triggers \
|
||||
ckb_db > structure_backup.sql
|
||||
```
|
||||
|
||||
### 3. **Data Only**
|
||||
|
||||
```bash
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot \
|
||||
--no-create-info \
|
||||
--single-transaction \
|
||||
ckb_db > data_backup.sql
|
||||
```
|
||||
|
||||
### 4. **Compressed Backup**
|
||||
|
||||
```bash
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot ckb_db | gzip > backup.sql.gz
|
||||
```
|
||||
|
||||
## ⚙️ Manual Commands
|
||||
|
||||
### Basic Commands
|
||||
|
||||
```bash
|
||||
# Check container status
|
||||
docker ps | grep ckb-mysql-dev
|
||||
|
||||
# Backup with timestamp
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot ckb_db > ckb_backup_$(date +%Y%m%d_%H%M%S).sql
|
||||
|
||||
# Backup all databases
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot --all-databases > all_databases.sql
|
||||
|
||||
# Backup specific tables
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot ckb_db table1 table2 > specific_tables.sql
|
||||
```
|
||||
|
||||
### Advanced Options
|
||||
|
||||
```bash
|
||||
# Backup with extended options
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot \
|
||||
--single-transaction \
|
||||
--routines \
|
||||
--triggers \
|
||||
--events \
|
||||
--add-drop-table \
|
||||
--add-drop-trigger \
|
||||
--hex-blob \
|
||||
--complete-insert \
|
||||
ckb_db > advanced_backup.sql
|
||||
|
||||
# Backup without locking tables (for MyISAM)
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot \
|
||||
--lock-tables=false \
|
||||
ckb_db > no_lock_backup.sql
|
||||
|
||||
# Backup with conditions
|
||||
docker exec ckb-mysql-dev mysqldump -u root -proot \
|
||||
--where="created_at >= '2023-01-01'" \
|
||||
ckb_db table_name > conditional_backup.sql
|
||||
```
|
||||
|
||||
## 🔄 Automated Backups
|
||||
|
||||
### Cron Job Setup
|
||||
|
||||
```bash
|
||||
# Edit crontab
|
||||
crontab -e
|
||||
|
||||
# Daily backup at 2 AM
|
||||
0 2 * * * /path/to/backup_db.sh
|
||||
|
||||
# Weekly full backup on Sunday at 3 AM
|
||||
0 3 * * 0 /path/to/backup_advanced.sh
|
||||
|
||||
# Monthly cleanup (keep last 30 days)
|
||||
0 4 1 * * find /path/to/backups -name "*.sql*" -mtime +30 -delete
|
||||
```
|
||||
|
||||
### Systemd Timer (Alternative to Cron)
|
||||
|
||||
Create `/etc/systemd/system/ckb-backup.service`:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=CKB Database Backup
|
||||
After=docker.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/path/to/backup_db.sh
|
||||
User=root
|
||||
```
|
||||
|
||||
Create `/etc/systemd/system/ckb-backup.timer`:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Run CKB backup daily
|
||||
Requires=ckb-backup.service
|
||||
|
||||
[Timer]
|
||||
OnCalendar=daily
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
```
|
||||
|
||||
Enable timer:
|
||||
|
||||
```bash
|
||||
sudo systemctl enable ckb-backup.timer
|
||||
sudo systemctl start ckb-backup.timer
|
||||
```
|
||||
|
||||
## 📊 Backup Management
|
||||
|
||||
### Check Backup Size
|
||||
|
||||
```bash
|
||||
# Show backup directory size
|
||||
du -sh backups/
|
||||
|
||||
# List all backups with sizes
|
||||
ls -lah backups/
|
||||
|
||||
# Show compression ratio
|
||||
for file in backups/*.sql.gz; do
|
||||
original_size=$(gunzip -l "$file" | tail -1 | awk '{print $2}')
|
||||
compressed_size=$(stat -c%s "$file")
|
||||
ratio=$(echo "scale=1; (1 - $compressed_size/$original_size) * 100" | bc)
|
||||
echo "$(basename "$file"): ${ratio}% compression"
|
||||
done
|
||||
```
|
||||
|
||||
### Cleanup Old Backups
|
||||
|
||||
```bash
|
||||
# Delete backups older than 30 days
|
||||
find backups/ -name "*.sql*" -mtime +30 -delete
|
||||
|
||||
# Keep only last 10 backups
|
||||
ls -1t backups/ckb_backup_*.sql* | tail -n +11 | xargs rm -f
|
||||
|
||||
# Clean by size (keep if total < 1GB)
|
||||
total_size=$(du -s backups/ | cut -f1)
|
||||
if [ $total_size -gt 1048576 ]; then
|
||||
# Delete oldest files until under 1GB
|
||||
echo "Cleaning up old backups..."
|
||||
fi
|
||||
```
|
||||
|
||||
## 🚨 Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
1. **Container not running**
|
||||
|
||||
```bash
|
||||
# Start container
|
||||
docker-compose up -d db
|
||||
|
||||
# Check logs
|
||||
docker logs ckb-mysql-dev
|
||||
```
|
||||
|
||||
2. **Permission denied**
|
||||
|
||||
```bash
|
||||
# Fix script permissions
|
||||
chmod +x *.sh
|
||||
|
||||
# Fix backup directory permissions
|
||||
sudo chown -R $USER:$USER backups/
|
||||
```
|
||||
|
||||
3. **Out of disk space**
|
||||
|
||||
```bash
|
||||
# Check disk usage
|
||||
df -h
|
||||
|
||||
# Clean old backups
|
||||
find backups/ -name "*.sql*" -mtime +7 -delete
|
||||
```
|
||||
|
||||
4. **MySQL connection error**
|
||||
|
||||
```bash
|
||||
# Test connection
|
||||
docker exec ckb-mysql-dev mysql -u root -proot -e "SELECT 1;"
|
||||
|
||||
# Check MySQL status
|
||||
docker exec ckb-mysql-dev mysqladmin -u root -proot status
|
||||
```
|
||||
|
||||
## 🔐 Security Notes
|
||||
|
||||
1. **Never store passwords in plain text** - Consider using MySQL config files
|
||||
2. **Encrypt sensitive backups** - Use GPG for production environments
|
||||
3. **Secure backup storage** - Store backups in secure, offsite locations
|
||||
4. **Regular restore testing** - Test backups regularly to ensure they work
|
||||
|
||||
## 📈 Best Practices
|
||||
|
||||
1. **Regular Backups**: Daily for production, weekly for development
|
||||
2. **Multiple Backup Types**: Keep both full and incremental backups
|
||||
3. **Offsite Storage**: Store backups in different physical/cloud locations
|
||||
4. **Compression**: Use gzip to save storage space
|
||||
5. **Retention Policy**: Define how long to keep backups
|
||||
6. **Monitoring**: Monitor backup success/failure
|
||||
7. **Documentation**: Document backup procedures and recovery steps
|
||||
8. **Testing**: Regularly test restore procedures
|
||||
|
||||
## 📝 File Structure
|
||||
|
||||
```
|
||||
backups/
|
||||
├── ckb_backup_20231225_143022.sql.gz # Full backup (compressed)
|
||||
├── ckb_structure_20231225_143022.sql # Structure only
|
||||
├── ckb_data_20231225_143022.sql.gz # Data only (compressed)
|
||||
└── README.md # This documentation
|
||||
|
||||
Scripts:
|
||||
├── backup_db.sh # Simple backup script
|
||||
├── backup_advanced.sh # Advanced backup with options
|
||||
├── restore_db.sh # Interactive restore script
|
||||
└── BACKUP_README.md # This documentation
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Made with ❤️ for CKB Project**
|
||||
Reference in New Issue
Block a user