14Room

みんな泣きながらオトナになったんだ。

ゾンビDBの作り方 at GCP

概要

毎朝、前の日に本番DBから取ったバックアップを元に復活するDBをGCPでも作りました。

やってることは、

  1. mysql止める
  2. 古いvolumeをアンマウント
  3. 古いvolumeをdetach
  4. スナップショットから新しいボリュームを作成
  5. 新しいvolumeをattach
  6. 新しいvolumeをマウント
  7. mysql起動

前提条件

  • 実行サーバ(zombi-db)のAPI accessのcomputeにread/write権限がついてること
  • db-backup-20141205xxxみたいなスナップショットが存在すること

実行シェル

#!/bin/bash
date=`date +%Y%m%d%H`
DESCRIPTION="db-backup-$date"
newdisk="zombi-disk"
olddisk="zombi-disk"

# Stop mysql
sudo /sbin/initctl stop mysql

# Unmount
sleep 60
sudo /bin/umount -l /var/lib/mysql

# Detach old volume
sleep 60
gcloud compute -q --project "naked.co.jp:api-project-1234567890" instances detach-disk "zombi-db" --disk "$olddisk" --zone "asia-east1-a"

# Delete old volume
gcloud compute -q --project "naked.co.jp:api-project-1234567890" disks delete "$olddisk" --zone "asia-east1-a"

# Create new DB volume
sleep 60
gcloud compute -q --project "naked.co.jp:api-project-1234567890" disks create "$newdisk" --size "150" --zone "asia-east1-a" --source-snapshot "$DESCRIPTION" --type "pd-ssd"

# Attach new volume
sleep 60
gcloud compute -q --project "naked.co.jp:api-project-1234567890" instances attach-disk "zombi-db" --disk "$newdisk" --zone "asia-east1-a"

# Remount volume
sudo /bin/mount -a

# Start mysql
sudo /sbin/initctl start mysql

その他

例によって前処理が終わってない場合があったので適当にsleepを入れています。