MySQL Clusterでバックアップを取得する

MySQL Clusterは、メモリテーブルであっても、かなりディスク容量を消費する。

(6.2までは、ざっくりと「メモリテーブル見積」*10。メモリを32GB積んで、30GBほどをMySQL Clusterに割り当てたら、ざっくり300GBほどのHDDがあると良い。)

というわけで、MySQL Clusterのバックアップは「取りっぱなし」では、HDD容量を圧迫するので、MySQL Clusterのメンテナンス用スクリプトを作ってみた。

#!/bin/sh

bkupdir=`find /export/home/mysql-cluster/BACKUP/ -name "BACKUP*" |wc -l`

echo "The number of backup dir under BACKUP is:" $bkupdir

if [ $bkupdir -gt 0 ];
then

cp -pr /export/home/mysql-cluster/BACKUP/* /xxxxx/mysql-cluster-backup/
rm -r /export/home/mysql-cluster/BACKUP/*
find /xxxxx/mysql-cluster-backup/ -mtime +0 -name "BACKUP*" -exec rm -r {} \;

else
echo "The BACKUP-X directory is none."
fi

想定シナリオは以下の通り。

・1日に1回(MySQL Clusterの)バックアップを取得する

・バックアップファイルは、/export/home/mysql-cluster/BACKUP/以下に1世代、/xxxxx/mysql-cluster-backup以下に1世代、の合計2世代保持

・各Data Nodeで実行する


Data Nodeは通常冗長化構成をとるので、「冗長化されているData Nodeが全てダウン」かつ「LCPでフラッシュしているイメージが使用不可でクラッシュリカバリできない」場合に、初めてバックアップファイルが必要となる。

なので、とりあえずは2世代で。

ちなみに、Management Nodeを2重化しておけば、バックアップ取得は、以下で可能。

ndb_mgm -e -c "xxxxx;yyyyy" "start backup"

xxxxxのManagement Nodeがダウンしているときは、yyyyyのManagement Nodeを経由して、バックアップコマンドがData Nodeへ発行される。