119 lines
4.1 KiB
YAML
119 lines
4.1 KiB
YAML
apiVersion: batch/v1
|
|
kind: Job
|
|
metadata:
|
|
name: mysql-backup-manual
|
|
namespace: infra
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: mysql-backup
|
|
image: harbor.omniverseai.net:8080/library/ubuntu:22.04
|
|
command: ["/bin/bash", "-c"]
|
|
args:
|
|
- |
|
|
set -eo pipefail
|
|
|
|
echo "========================================="
|
|
echo "MySQL Backup Script (Internal)"
|
|
echo "========================================="
|
|
echo "Started at: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo ""
|
|
|
|
# Install required tools
|
|
echo "[1/6] Installing required tools..."
|
|
apt-get update
|
|
apt-get install -y curl gzip mysql-client
|
|
echo " ✓ Required tools installed"
|
|
echo ""
|
|
|
|
# Install MinIO client
|
|
echo "[2/6] Installing MinIO client..."
|
|
curl -sSL https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc
|
|
chmod +x /usr/local/bin/mc
|
|
echo " ✓ MinIO client installed"
|
|
echo ""
|
|
|
|
# Environment variables
|
|
BACKUP_DATE=$(date +%Y-%m-%d-%H%M%S)
|
|
BACKUP_FILE="mysql-backup-${BACKUP_DATE}.sql.gz"
|
|
S3_PATH="s3://${MINIO_BUCKET}/mysql/${BACKUP_FILE}"
|
|
|
|
echo "Configuration:"
|
|
echo " MySQL Host: ${MYSQL_HOST}:${MYSQL_PORT}"
|
|
echo " MinIO Endpoint: ${MINIO_ENDPOINT}"
|
|
echo " Backup File: ${BACKUP_FILE}"
|
|
echo " S3 Path: ${S3_PATH}"
|
|
echo ""
|
|
|
|
# Configure MinIO Client
|
|
echo "[3/6] Configuring MinIO client..."
|
|
mc alias set minio "${MINIO_ENDPOINT}" "${MINIO_ACCESS_KEY}" "${MINIO_SECRET_KEY}"
|
|
echo " ✓ MinIO configured"
|
|
|
|
# Test MySQL connection
|
|
echo ""
|
|
echo "[4/6] Testing MySQL connection..."
|
|
if mysql -h "${MYSQL_HOST}" -P "${MYSQL_PORT}" -u root -p"${MYSQL_ROOT_PASSWORD}" -e "SELECT 1" &>/dev/null; then
|
|
echo " ✓ MySQL connection successful"
|
|
else
|
|
echo " ✗ MySQL connection failed"
|
|
exit 1
|
|
fi
|
|
|
|
# Execute backup
|
|
echo ""
|
|
echo "[5/6] Creating MySQL backup..."
|
|
echo " Dumping all databases..."
|
|
|
|
# Use mysqldump to backup all databases
|
|
mysqldump -h "${MYSQL_HOST}" -P "${MYSQL_PORT}" -u root -p"${MYSQL_ROOT_PASSWORD}" --all-databases 2>/dev/null | gzip > "/tmp/${BACKUP_FILE}"
|
|
|
|
BACKUP_SIZE=$(du -h "/tmp/${BACKUP_FILE}" | cut -f1)
|
|
echo " ✓ Backup created: ${BACKUP_SIZE}"
|
|
|
|
# Upload to MinIO
|
|
echo ""
|
|
echo "[6/6] Uploading backup to MinIO..."
|
|
mc cp "/tmp/${BACKUP_FILE}" "${S3_PATH}"
|
|
|
|
# Verify upload
|
|
if mc stat "${S3_PATH}" &>/dev/null; then
|
|
echo " ✓ Upload successful"
|
|
else
|
|
echo " ✗ Upload failed"
|
|
exit 1
|
|
fi
|
|
|
|
# Clean up local file
|
|
rm -f "/tmp/${BACKUP_FILE}"
|
|
echo " ✓ Local file cleaned"
|
|
|
|
# List recent backups
|
|
echo ""
|
|
echo "Recent backups:"
|
|
mc ls "minio/${MINIO_BUCKET}/mysql/" | tail -n 5
|
|
|
|
# Complete
|
|
echo ""
|
|
echo "========================================="
|
|
echo "✅ Backup completed successfully"
|
|
echo "Finished at: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
echo "========================================="
|
|
|
|
env:
|
|
- name: MYSQL_HOST
|
|
value: "mysql-infra.infra.svc.cluster.local"
|
|
- name: MYSQL_PORT
|
|
value: "3306"
|
|
- name: MYSQL_ROOT_PASSWORD
|
|
value: "mysql-root-password-123"
|
|
- name: MINIO_ENDPOINT
|
|
value: "http://minio.infra.svc.cluster.local:9000"
|
|
- name: MINIO_ACCESS_KEY
|
|
value: "backup-user"
|
|
- name: MINIO_SECRET_KEY
|
|
value: "backup-secret-key-123"
|
|
- name: MINIO_BUCKET
|
|
value: "backups"
|
|
restartPolicy: OnFailure |