diff --git a/templates/cronjob.yaml b/templates/cronjob.yaml index 4a3f5a2..ccfdbec 100644 --- a/templates/cronjob.yaml +++ b/templates/cronjob.yaml @@ -49,10 +49,11 @@ spec: runAsNonRoot: true runAsUser: 999 env: + # MySQL接続情報は phpmyadmin.hosts[0] から取得 - name: MYSQL_HOST - value: {{ .Values.backup.mysql.host | quote }} + value: {{ (index .Values.phpmyadmin.hosts 0).host | quote }} - name: MYSQL_PORT - value: {{ .Values.backup.mysql.port | quote }} + value: {{ (index .Values.phpmyadmin.hosts 0).port | quote }} - name: MYSQL_USER valueFrom: secretKeyRef: @@ -63,8 +64,9 @@ spec: secretKeyRef: name: {{ .Values.backup.mysql.existingSecret | default (printf "%s-backup" (include "phpmyadmin-nginx.fullname" .)) }} key: {{ .Values.backup.mysql.passwordKey | default "mysql-password" }} - - name: BACKUP_TIMESTAMP - value: $(date +%Y%m%d_%H%M%S) + # readOnlyRootFilesystem: true のためmysqlコマンドの履歴ファイルを無効化 + - name: MYSQL_HISTFILE + value: /dev/null {{- if .Values.backup.databases }} - name: DATABASES value: {{ join " " .Values.backup.databases | quote }} @@ -84,24 +86,25 @@ spec: - -c - | set -euo pipefail - + BACKUP_DIR="{{ .Values.backup.destinationPath }}" TIMESTAMP=$(date +%Y%m%d_%H%M%S) DATE_DIR=$(date +%Y%m%d) - + echo "=== MySQL Backup Started at $(date) ===" + echo "Host: ${MYSQL_HOST}:${MYSQL_PORT}" echo "Backup destination: ${BACKUP_DIR}/${DATE_DIR}" - + # Create backup directory mkdir -p "${BACKUP_DIR}/${DATE_DIR}" - - # Function to backup a database + + # Function to backup a single database backup_database() { local db=$1 local backup_file="${BACKUP_DIR}/${DATE_DIR}/${db}_${TIMESTAMP}.sql" - + echo "Backing up database: ${db}" - + mysqldump \ -h "${MYSQL_HOST}" \ -P "${MYSQL_PORT}" \ @@ -114,14 +117,13 @@ spec: --triggers \ --events \ "${db}" > "${backup_file}" - + {{- if .Values.backup.compression.enabled }} echo "Compressing backup: ${db}" gzip -{{ .Values.backup.compression.level }} "${backup_file}" backup_file="${backup_file}.gz" {{- end }} - - # Verify backup file + if [ -f "${backup_file}" ]; then size=$(du -h "${backup_file}" | cut -f1) echo "✓ Backup completed: ${backup_file} (${size})" @@ -130,41 +132,41 @@ spec: return 1 fi } - - # Backup specified databases or all databases + {{- if .Values.backup.databases }} + # Backup specified databases for db in ${DATABASES}; do backup_database "${db}" || echo "Warning: Failed to backup ${db}" done {{- else }} # Get all databases except system databases - DATABASES=$(mysql \ + DB_LIST=$(mysql \ -h "${MYSQL_HOST}" \ -P "${MYSQL_PORT}" \ -u "${MYSQL_USER}" \ -p"${MYSQL_PASSWORD}" \ -N -B -e "SHOW DATABASES" | \ grep -Ev '^(information_schema|performance_schema|mysql|sys)$') - - for db in ${DATABASES}; do + + for db in ${DB_LIST}; do backup_database "${db}" || echo "Warning: Failed to backup ${db}" done {{- end }} - + {{- if .Values.backup.retention.enabled }} # Cleanup old backups - echo "Cleaning up backups older than {{ .Values.backup.retention.days }} days" - find "${BACKUP_DIR}" -type f -name "*.sql*" -mtime +{{ .Values.backup.retention.days }} -delete - find "${BACKUP_DIR}" -type d -empty -delete + echo "Cleaning up backups older than {{ .Values.backup.retention.days }} days..." + find "${BACKUP_DIR}" -type f -name "*.sql" -mtime +{{ .Values.backup.retention.days }} -delete + find "${BACKUP_DIR}" -type f -name "*.sql.gz" -mtime +{{ .Values.backup.retention.days }} -delete + find "${BACKUP_DIR}" -mindepth 1 -type d -empty -delete {{- end }} - + # Summary echo "=== Backup Summary ===" echo "Total backup size:" - du -sh "${BACKUP_DIR}/${DATE_DIR}" + du -sh "${BACKUP_DIR}/${DATE_DIR}" 2>/dev/null || echo "(no files)" echo "Backup files:" - ls -lh "${BACKUP_DIR}/${DATE_DIR}" - + ls -lh "${BACKUP_DIR}/${DATE_DIR}" 2>/dev/null || echo "(none)" echo "=== MySQL Backup Completed at $(date) ===" resources: {{- toYaml .Values.backup.resources | nindent 14 }} @@ -179,9 +181,7 @@ spec: nfs: server: {{ .Values.backup.nfs.server }} path: {{ .Values.backup.nfs.path }} - {{- if .Values.backup.nfs.readOnly }} - readOnly: false - {{- end }} + readOnly: {{ .Values.backup.nfs.readOnly }} {{- else }} persistentVolumeClaim: claimName: {{ .Values.backup.existingClaim | default (printf "%s-backup" (include "phpmyadmin-nginx.fullname" .)) }} @@ -200,4 +200,4 @@ spec: tolerations: {{- toYaml . | nindent 12 }} {{- end }} -{{- end }} \ No newline at end of file +{{- end }}