Files
ljwx-k8s/mysql-backup-job.yaml
2026-02-20 22:50:45 +08:00

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