#!/bin/sh
#
# wakame-ebs-mysql-master-make-snapshot.sh
#
# description: gihyo.jp記事用Wakameスクリプト
# author: masahito@axsh.net
# see also: http://wakame.axsh.jp/
#

## 共通設定
pwd=$(cd $(dirname $0) && pwd)
[ -f ${pwd}/_wakame-common.sh ] && . ${pwd}/_wakame-common.sh

# 取り付済みのvolume-idを取得
ebs_master_volume=$(ec2-describe-volumes | grep ${ec2_instance_id} | grep ${ebs_master_dev} | grep attached | awk '{print $2}')
[ -z "${ebs_master_volume}" ] && { echo not mounted: ${ebs_master_dev}; exit 1; }
echo volume-id:${ebs_master_volume}
echo

# MySQL Masterへの接続確認
echo "SHOW MASTER STATUS" | mysql_command >/dev/null || {exit 1;}

# スナップショット生成時はデータが更新されない様にテーブルをロック
echo "... flush tables with read lock;";
echo "FLUSH TABLES WITH READ LOCK;" | mysql_command

# MySQL Masterのポジション情報を取得
echo "... show master status;";
mysqld_master_status=$(echo "SHOW MASTER STATUS;" | mysql_command)
set ${mysqld_master_status}
mysqld_master_binlog_file=$1
mysqld_master_binlog_pos=$2

# MySQL Slave用にmaster.infoを生成
# ※master.infoは「14行」あるので、途中の空行にも意味があります
echo "... make master.info"
cat <<EOS > ${mysqld_master_dir}/master.info
14
${mysqld_master_binlog_file}
${mysqld_master_binlog_pos}
${mysqld_master_info_host}
${mysqld_master_info_user}
${mysqld_master_info_pass}
${mysqld_master_info_port}
60
0





EOS

# master.infoファイルのオーナーをmysqlユーザーへ変更
chmod 0644        ${mysqld_master_dir}/master.info
chown mysql:mysql ${mysqld_master_dir}/master.info

# MySQL Master用datadirのAmazon EBS Snapshotを生成
echo "$ ec2-create-snapshot ${ebs_master_volume}"
ebs_master_snapshot_id=$(ec2-create-snapshot ${ebs_master_volume} | awk '{print $2}')
[ -z "${ebs_master_snapshot_id}" ] && { exit 1; }

# Amazon EBS Snapshot生成が終了するまで数秒間sleepする
for i in 1 2 3 4 5 6 7 8 9 10; do
  echo -n ". "
  ec2-describe-snapshots | grep ${ebs_master_snapshot_id} | grep completed -q && break
  sleep 1
done
echo

# Amazon EBS Snapshot生成後、テーブルロックを解除
echo "... unlock tables;";
echo "UNLOCK TABLES;" | mysql_command

# MySQL Slaveのdatadir用にsnapshot-idを出力
echo ">>> snapshot_id = ${ebs_master_snapshot_id}"

exit 0

