How to create and rotate Automatic Snapshot?

前端 未结 10 2050
梦如初夏
梦如初夏 2020-12-14 08:33

On Compute Engine we can do Snapshots, which are basically backups. Could you try to figure out how we could create a script to do automated snapshots every day and keep lik

10条回答
  •  隐瞒了意图╮
    2020-12-14 09:02

    in my example, I have a maintenance window to create a snapshot for MySQL. it assumes that the service account has permission to execute gcloud snapshots commands. hope it helps:

    #!/bin/bash
    
    days_to_keep=7
    
    disk=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/disks/1/device-name" -H "Metadata-Flavor: Google"`
    zone=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/zone" -H "Metadata-Flavor: Google"`
    project=`curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google"`
    zone=`basename ${zone}`
    storage_location=`echo ${zone}|sed 's/-[a-z]$//'`
    
    
    systemctl stop mysqld
    sleep 5
    # flush file system buffers
    sync
    # create snapshot
    gcloud -q compute disks snapshot ${disk} --project=${project} --snapshot-names=${disk}-$(date +%s) --zone=${zone} --storage-location=${storage_location}
    
    systemctl start mysqld
    
    
    delete_date=$(date -d "-${days_to_keep} days" "+%Y-%m-%d")
    
    # get list of snapshots to delete
    to_del=$(gcloud compute snapshots list  --filter="name ~ ${disk}* AND creationTimestamp<$delete_date" --format "csv[no-heading](name)")
    
    # delete bulk of old snapshots
    if [[ ! -z ${to_del} ]]
    then
        gcloud compute snapshots delete -q ${to_del}
    fi
    

提交回复
热议问题