每天在Google Cloud外部进行MySQL备份

时间:2018-08-14 08:13:09

标签: sql google-cloud-platform cloud

我们只是尝试将Google Cloud SQL 2nd generation进行故障转移,这非常容易并且令人惊讶,看来我们不必再担心数据库了。 但是,为了更安全地保护我们的数据,我们决定最好有一些不在Google内部托管的备份,尽管这不是必需的,但是我们在IBM Cloud中拥有帐户,并且他们获得了IBM Cloud对象存储(如Amazon S3),我们认为可能是备份的好地方。 现在我们计划在IBM数据中心(Linux服务器)的VPS上执行此操作,以root用户身份连接到Google Cloud SQL并执行mysqldump以将所有数据转储到1个或多个文件(可能在tar,gz中),然后使用S3备份脚本上传到IBM存储。

我们将在收到您的答复或弄清楚后发布我们的解决方案和步骤。

2 个答案:

答案 0 :(得分:0)

您可以export your SQL data to a dump file将mysqldump存储在Google Cloud Storage存储桶中,然后可以使用Storage Transfer Service

将该数据传输到Amazon S3存储桶中。

答案 1 :(得分:0)

好的,很高兴我可以在这里做些贡献,如果有人想做与我想做的事情完全一样的事情,请在复制之前点击以下链接,如果您有更好的做方法,欢迎帮助修复它。 检查链接: https://github.com/lumerit/s3-shell-backups https://knowledgelayer.softlayer.com/procedure/connecting-cos-s3-using-s3cmd 我的脚本基于: https://gist.github.com/JProffitt71/9044744 https://andycroll.com/development/backing-up-mysql-databases-remotely-using-cron-and-ssh/

第一个脚本,您可以将其命名为“ deleteold”,并记住要使用chmod 755

#!/bin/bash
# Usage: ./deleteold "dir-of-your-bucketname" "-30 day"
# Usage-sample-2: ./deleteold "dir-of-your-bucketname" "-500 minutes"

# Pls put your bucketname in s3://here

s3cmd ls s3://my-database-backups/$1/ | while read -r line;
  do
createDate=`echo $line|awk {'print $1" "$2'}`
createDate=`date -d"$createDate" +%s`
### 28800 sec is the time difference between our server & IBM COS
createData=`expr $createData + 28800`
olderThan=`date -d"$2" +%s`
if [[ $createDate -lt $olderThan ]]
  then
    fileName=`echo $line|awk {'print $4'}`
    echo $fileName
    if [[ $fileName != "" ]]
      then
        echo $fileName
        s3cmd del "$fileName"
      fi
  fi
 done;

第二个脚本

#!/bin/sh

#### BEGIN CONFIGURATION ####

##Account name SLOSC3xx982-4

# set dump directory variables
SRCDIR='/tmp/s3backups'
DESTDIR='google'
BUCKET='my-database-backups'

# database access details
HOST=‘x0x.x9.x4.98'
PORT='3306'
USER='root'
PASS='5xxxyyzznIoi8XXP'
NOW=`date +%Y-%m-%d_%H%M_`

#### END CONFIGURATION ####

# make the temp directory if it doesn't exist and cd into it
mkdir -p $SRCDIR
cd $SRCDIR

# dump each database to its own sql file and upload it to s3
for DB in $(mysql -h$HOST -P$PORT -u$USER -p$PASS -BNe 'show databases' | grep -Ev 
'mysql|information_schema|performance_schema')
do
mysqldump -h$HOST -P$PORT -u$USER -p$PASS --quote-names --create-options --force --set- 
gtid-purged=OFF $DB > $DB.sql
tar -czf $NOW$DB.tar.gz $DB.sql
/usr/bin/s3cmd put $SRCDIR/$NOW$DB.tar.gz s3://$BUCKET/$DESTDIR/ --reduced-redundancy
files="$files $DB"
done

# remove all files in our source directory
cd
rm -f $SRCDIR/*.sql
rm -f $SRCDIR/*.tar.gz
## remove older files
/root/backups3/deleteold "google" "-3 day"
#/root/backups3/deleteold "google" "-490 minutes"

### Mail me ###
EMAILID=“your-name@gmail.com"

mail -s "Backups Report $NOW" $EMAILID << END
Success backup cloud SQL from $HOST to IBM COS $BUCKET
The following databases were attempted backed up
$files
END

将这两个脚本放在/ root / backups3中后(可以将其放置在任何位置),设置crontab每天执行第二个脚本,以便它将使用mysqldump将所有ur数据库转储到tar.gz文件中然后上传到S3(IBM COS或Aws S3,无论您喜欢什么)。 完成后,您会收到一封电子邮件,并且还会调用脚本1根据要删除的日期或分钟删除旧文件。