<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>Whimsical Kitteeeeen &#187; バックアップ</title>
	<atom:link href="http://www.witkitty.com/wordpress/tag/%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.witkitty.com/wordpress</link>
	<description>日々繰り返される失敗談と、その失敗を冷ややかな眼差しで見守る気まぐれ猫たちの近況・・・</description>
	<lastBuildDate>Thu, 02 Feb 2012 07:32:57 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.witkitty.com/wordpress/tag/%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97/feed/" />
		<item>
		<title>仮想ゲストOSバックアップ～cron登録～</title>
		<link>http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/</link>
		<comments>http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 16:51:45 +0000</pubDate>
		<dc:creator>hiro</dc:creator>
				<category><![CDATA[VMware ESXi]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[バックアップ]]></category>

		<guid isPermaLink="false">http://www.witkitty.com/wordpress/?p=136</guid>
		<description><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/" title=" 仮想ゲストOSバックアップ～cron登録～"></a>以前「仮想ゲストOSバックアップ～スクリプト編～」で、ゲストOSをバックアップするためのスクリプトを稚拙ながら書きましたが、今回はそのスクリプトをESXiのcronに登録してみます。 やっていることは、 スクリプトをパス &#8230;<p class="read-more"><a href="http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/" title=" 仮想ゲストOSバックアップ～cron登録～"></a><p style="padding-left: 30px;">以前「<a rel="nofollow" href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/">仮想ゲストOSバックアップ～スクリプト編～</a>」で、ゲストOSをバックアップするためのスクリプトを稚拙ながら書きましたが、今回はそのスクリプトをESXiのcronに登録してみます。<br />
やっていることは、</p>
<ul style="padding-left: 30px;">
<li>スクリプトをパスの通ったところにリンクを張る</li>
<li>cron設定ファイルに登録する</li>
</ul>
<p style="padding-left: 30px;">の２点です。どちらもrc.localに書き込むのですが、これは/sbinに実際のスクリプトファイルを置いても、ESXiサーバを再起動すると、デフォルトのファイルに戻されるため、せっかく置いたファイルが消えてしまいます。また、cron設定ファイルも同様に、再起動するとデフォルト設定に戻るので、どちらとも起動時に再配置・再設定するようにするわけです。では、rc.localはというと、</p>
<div style="padding-left: 30px;">
<pre>
#! /bin/ash
export PATH=/sbin:/bin

log() {
echo &quot;$1&quot;
logger init &quot;$1&quot;
}

#execute all service retgistered in /etc/rc.local.d
if [ -d /etc/rc.local.d ]; then
for filename in `find /etc/rc.local.d/`
do
if [ -f $filename ] &amp;&amp; [ -x $filename ]; then
log &quot;running $filename&quot;
$filename
fi
done
fi
### ここまでがデフォルト内容です
### 今回以下に追加しました
### スクリプト実体のシンボリックリンクを/sbinに作ります
ln -s /vmfs/volumes/datastore1/hotbackup.sh /sbin/hotbackup.sh

### cron設定ファイルに書き込み、cronデーモンを再起動します
cat&lt;&lt;_EOT_&gt;&gt;/var/spool/cron/crontabs/root
0 3 * * * /sbin/hotbackup.sh witkitty &gt; /dev/null
_EOT_
kill -sigterm `ps|awk &#039;/[c]rond/ {print $1;}&#039;`
crond
</pre>
</div>
<p style="padding-left: 30px;">cronの再設定にはヒア・ドキュメントを使うと、ファイルに直接書き込むようなイメージで仕込むことが出来るので便利です。再起動をまだしませんよ～という方は、リンク作成とcron設定ファイルを直接編集して、cronデーモンを再起動してください。<br />
さぁ、これでESXiサーバ時間の午前3時にこのサイトのゲストOSのホットバックアップが開始されるはずです。ちなみに当方のESXiの時間は米国中部のままの設定なので、日本からだと-15時間の時差があります。よって、時間だけで言えば、いきなり日本時間の昼の12時に開始されるわけです。</p>
<p style="padding-left: 60px;">
<strong>注記：</strong><span style="color: #888888;">バックアップスクリプトのGIDチェック部分で取得GIDが正常でも直前の実行ステータスが０で帰ってくるため、バックアップ処理が中断される現象が出ました。よってスクリプト側の修正も施されていますので、<a rel="nofollow" href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/">過去記事</a>を参照してくださいな。</span></p>
<p style="padding-left: 30px;">
さて、これで無事上書き自動バックアップが出来るようになりましたとさ。<br />
あとは、リストア用のスクリプトと、バックアップローテーションをどうするかですな・・・ポツポツ合間を見つけて書いてみます。<br />
ではでは。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.witkitty.com/wordpress/2009/07/11/esxi-backup-part3/" />
	</item>
		<item>
		<title>仮想ゲストOSバックアップ～スクリプト編～</title>
		<link>http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/</link>
		<comments>http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 22:23:53 +0000</pubDate>
		<dc:creator>hiro</dc:creator>
				<category><![CDATA[VMware ESXi]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[monosparse]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[vmkfstools]]></category>
		<category><![CDATA[スクリプト]]></category>
		<category><![CDATA[バックアップ]]></category>

		<guid isPermaLink="false">http://www.witkitty.com/wordpress/?p=128</guid>
		<description><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/" title="仮想ゲストOSバックアップ～スクリプト編～"></a>以前、仮想ゲストOSのバックアップについて、簡単に書きましたが、当方の環境もここまでESXi密度が高いと、「もしも・・・」の時に涙ちょちょ切れ～ってことになるので、スナップショットとクローン作成を利用したバックアップ作成 &#8230;<p class="read-more"><a href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/" title="仮想ゲストOSバックアップ～スクリプト編～"></a><p style="padding-left: 30px;">以前、<a rel="nofollow" href="http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/">仮想ゲストOSのバックアップ</a>について、簡単に書きましたが、当方の環境もここまでESXi密度が高いと、「もしも・・・」の時に涙ちょちょ切れ～ってことになるので、スナップショットとクローン作成を利用したバックアップ作成スクリプトを作ってみました。お役に立てれば・・・<br />
当方の環境は、バックアップ用ボリュームがESXi上にnfsマウントされており、以下のスクリプトはそこに作成されるような仕組みになっていますので、環境に合わせて変数内容を変えてください。尚、このスクリプトを作成するにあたり、「<a href="http://akionweb.com/archives/2009/04/esxi.shtml">AKIONWEB</a>」さんのところを参考に作ってみましたが、動作結果については自己責任と言うことで。<br />
では、まず環境条件から・・・といっても上に書いたように、</p>
<div style="padding-left: 30px;">
<ul>
<li> ESXiからバックアップボリュームが見えていること</li>
<li>引数としてはゲスト名だけを使用する</li>
<li>バックアップは上書きでも良しとすること</li>
</ul>
</div>
<p style="padding-left: 30px;">
だけです。<br />
では、続きと簡単な解説は、続きでどうぞ。（かなり長いです・・・が、やっていることは大したことないです）<br />
追記：07/11 追加・修正部分あり
</p>
<p><span id="more-128"></span></p>
<div style="padding-left: 30px;">
<pre>
#!/bin/ash

###	But I'm sorry, follows comments are Japanese-English, you may not understand it.
###	This script does backup without rotate.

###
#	Input
#	$1 : Guest name
#
#	Internal variable
#	$gname	: Guest name
#	$gid	: Guest ID
#	$store	: Gust datastore name
#	$gdir	: Gust datastore directory
#	$bdate	: Backup date
#	$bbase	: Backup base directory(/vmfs/volumes/esx01-backup/)
#	$bdir	: Backup directory
#
#	07/05/2009 by hiro
#	07/07/2009 add and fix by hiro
###

###-----
#	wait current snapshot creation work
#
check_running_task (){
for i in `vim-cmd vimsvc/task_list | grep vim.Task:haTask-$1 | grep $2 | sed -e 's/.*vim.Task://' -e "s/[', ]//g"`; do
if [ "`vim-cmd vimsvc/task_info $i | grep running`" != "" ] ; then
	return 0
fi
done
return 1
}
#
###-----

###=======================
#
#	Start main
#
###=======================

# the backup root directory
bbase="/vmfs/volumes/esx01-backup/"

#bdate=`date +%Y%m%d`
#echo $bdate

# the Guest name and get the Guest ID
# -------------------------------------------------------- 07/07/2009 added by hiro
#   Check parameter
if test -z $1
then
        exit 1
fi
gname=$1
gid=`vim-cmd vmsvc/getallvms | grep $gname | awk '{ print $1 }'`
# -------------------------------------------------------- 07/07/2009 fixed by hiro
#   Changed how to check GID
# if [ $? -eq 0 ]; then
if test -z $gid
then
	echo "Error : Guest - "$gname" did not exist."
	exit 0
fi

# take store location of the Guest and set full directory path of the Guest VM files
store=`vim-cmd vmsvc/getallvms | grep $gname | sed -e 's/\[//g' -e 's/\]//g' | awk '{ print $3 }'`
gdir="/vmfs/volumes/"$store"/"$gname"/"

# set backup directory path
bdir=$bbase$gname"/"
if test ! -d $bdir
then
	mkdir $bdir
else
	echo "Already exist backup file."
fi

###-----
#	Start backup
#
#---(Part.1)	copy VM managed information files, you have to copy these informations before make a clone.
#
cp $gdir$gname".vmx" $bdir
cp $gdir$gname".vmxf" $bdir
cp $gdir$gname".vmsd" $bdir
#
#---(Part.2)	take a snapshot
#
vim-cmd vmsvc/snapshot.create $gid $gname
if [ $? -ne 0 ]; then
	echo Snapshot create error.;
	exit;
fi
while check_running_task $gid createSnapshot; do sleep 1; done
#
#---(Part.3)	cloning with monosparse, if you want flat image, remove option.
#
vmkfstools -i $gdir$gname".vmdk" -d monosparse $bdir$gname".vmdk"
if [ $? -ne 0 ]; then
	echo "Error : cloning failed. your backup process did not complete."
	exit 0
fi
#
#---(Part.4)	remove a snapshot
#
vim-cmd vmsvc/snapshot.removeall $gid
#
#	Backup finished

echo "Congratulations!  Guest-"$gname" : backup completely successed."
exit 0
#
###-----
</pre>
</div>
<div style="padding-left: 30px;">
<ol>
<li>まず、23～30行目の関数について<br />
ここは、このスクリプトを何度も叩くと、スナップショット（や解放）がその回数分叩かれることになり、あまりESXiに優しくないので、もし前の処理が残っていたのならば、まだ終わっていない事を関知し、通知する関数です。</li>
<li>41行目の変数について<br />
この変数は、バックアップが保存される親のディレクトリを指します。このディレクトリの後に、ゲスト名がついたディレクトリが実際のバックアップ先（59行目）になります。</li>
<li>47～52行目<br />
ここでは、引数で渡されたゲスト名を保存し、またこのゲスト名を利用してIDリストから該当のID番号を取得しています。コマンド「vim-cmd vmsvc/getallvms」を叩くと、登録されているゲストの一覧が出力されます。以下が実際の出力例。</p>
<pre>
# vim-cmd vmsvc/getallvms
Vmid      Name                       File                          Guest OS          Version   Annotation
528    witkitty     [datastore1] witkitty/witkitty.vmx       otherLinuxGuest         vmx-04
544    VpnSrv       [datastore1] VpnSrv/VpnSrv.vmx           otherLinuxGuest         vmx-04
592    clone        [datastore1] clone/clone.vmx             otherLinuxGuest         vmx-04
</pre>
<p>この中に該当するゲストのIDが先頭にありますので、ゲスト名でgrepし、IDをawkコマンドで引っぱがします。（次の項でに3番目にあるFile項の中のdatastore?も引っぱがすことになります）ここで、該当ゲスト名が無ければエラーでスクリプトが終了します。</li>
<li>55～57行目<br />
ここでは、ゲストファイルの配置情報を取得します。当方のESXiは、ディスクドライブが複数あり、そのうちのいくつかがdatastoreとして登録されています。よって、ゲストによっては同一ESXi上であっても配置されているdatastoreが異なります。1つしかない環境の場合は、後で示すバックアップ元ディレクトリ変数の中で固定していいと思います。</li>
<li>59～65行目<br />
ここで、バックアップ先ロケーションを決定しています。決定されたディレクトリがあるかチェックしていますが、必要無いような気もしますが、後でバックアップの世代管理もやってみようと画策しているので、その時のためのものです。</li>
<li>72～74行目<br />
ここから実際のバックアップ処理（クローン作成）が始まります。まず、ゲストの管理ファイルをコピーします。<a href="http://akionweb.com/archives/2009/04/esxi.shtml">AKIONWEB</a>が仰るには、これを先にしておかないと、後でファイルを編集する必要があるとのことでしたので、そのまま掲載させてもらいました。</li>
<li>78～83行目<br />
ここでスナップショットを取得します。この処理で後述の仮想実体ファイルへのアクセスが可能になります。で、ここで指定のスナップショットが行われたかどうかを冒頭の関数でチェックし、スナップショットが始まったら、実体ファイルの処理に移ります。</li>
<li>87～91行目<br />
ここで、vmkfstoolsコマンドを利用して実体ファイルをクローニングします。当方はmonosparseオプションを利用してバックアップ先のファイルを小さくしていますが、ボリュームサイズが潤沢の方は素のままでもいいのではないかと思います。これはリストアの時に関係していて、小さくした場合、ESXiはその小さいままのファイルを扱うことが出来ず、元の大きなファイルに戻してあげる作業が必要になります。</li>
<li>95行目<br />
さて、そろそろ終わりですね。クローニングが完了したら、スナップショットを解放してあげます。</li>
</ol>
</div>
<p style="padding-left: 30px;">これで、晴れて半自動でのゲストOSのバックアップが可能になりました。あとは、cronに任せることと、バックアップの世代管理機能、リストアスクリプトを組み込めれば安心して眠れます。この辺はまた後で書ければいいかなと・・・（何かいつも最後に自分で宿題作っているような・・・）<br />
試しにこのスクリプトでバックアップし、手動でリストアを行ってみましたが、無事ゲストOSがバックアップ前の状態で稼働しました。（何度も言いますが自己責任で・・・しつこいって）<br />
ではでは。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/" />
	</item>
		<item>
		<title>WordPress &#8211; 本体バックアップ</title>
		<link>http://www.witkitty.com/wordpress/2009/06/29/wordpress-backup/</link>
		<comments>http://www.witkitty.com/wordpress/2009/06/29/wordpress-backup/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 22:54:39 +0000</pubDate>
		<dc:creator>hiro</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[-exec]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[rsaキー]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[{}]]></category>
		<category><![CDATA[バックアップ]]></category>
		<category><![CDATA[パスワード無し]]></category>

		<guid isPermaLink="false">http://www.witkitty.com/wordpress/?p=120</guid>
		<description><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/06/29/wordpress-backup/" title="Wordpress - 本体バックアップ"></a>ブログのお引っ越し記事にも書きましたが、現在このブログのWordpress本体のバックアップは、LAN内にあるサーバにrsncで定期自動バックアップ（同期）しています。その方法を覚え書き程度に記しておきます。 肝は、「定 &#8230;<p class="read-more"><a href="http://www.witkitty.com/wordpress/2009/06/29/wordpress-backup/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/06/29/wordpress-backup/" title="Wordpress - 本体バックアップ"></a><p style="padding-left: 30px;">ブログのお引っ越し記事にも書きましたが、現在このブログのWordpress本体のバックアップは、LAN内にあるサーバにrsncで定期自動バックアップ（同期）しています。その方法を覚え書き程度に記しておきます。<br />
肝は、「定期的に自動バックアップするためには、rsyncでその度入力が必要なパスワードをどうするか」だけです。これには、SSH接続で認証キー（パスフレーズ無）を使います。<br />
では、手順を記します。（下記条件で進めますので、環境に応じて変更してください）<br />
バックアップ元：192.168.1.2 （www.witkitty.com）<br />
バックアップ元ディレクトリ：/home/user/wordpress<br />
バックアップ先：192.168.1.3<br />
バックアップ先ディレクトリ： （事前に作成しておきます）<br />
・/backup/www.witkitty.com/wordpress<br />
・/backup/www.witkitty.com/conf<br />
rootユーザでの使用を前提としていますが、他のユーザの場合は置き換えてください。<br />
sshdが動作していること。<br />
では、手順を示していきます。<br />
<span id="more-120"></span></p>
<div style="padding-left: 30px;">
<ol>
<li>同期先で、rsync動作用設定ファイルを作成します。</li>
<pre>
# vi /etc/rsyncd.conf
[www.witkitty.com]
comment = backup for witkitty.com server
path = /backup/www.witkitty.com
hosts allow = 192.168.1.2
hosts deny = *
list = true
uid = root
gid = root
</pre>
<li>rsyncをデーモンモードで起動します。
<pre>
# rsync --daemon --config /etc/rsyncd.conf
</pre>
<p>バックアップサーバ再起動時に備え、/etc/rc.d/rc.localに書いておいてもいいかも知れません。</li>
<li>rootユーザディレクトリ配下に「.ssh」ディレクトリを作成します。（つまり、/root/.sshになります）</li>
<pre>
# mkdir .ssh
</pre>
<p>ここまでがバックアップ先で行う作業です。<br />
ここからは、バックアップ元で行う作業です。</p>
<li>SSHで認証公開キーを使用するようsshd_configファイルの下記パラメータを編集しsshdサービスを再起動します。<br />
<span style="color: #ff00ff;"><strong>PubkeyAuthentication yes</strong></span><br />
sshdサービスを再起動すると、/rootディレクトリ配下に.sshディレクトリが作成されます。</li>
<li>RSA認証キー（パスフレーズ無）を作成します。以下のコマンドで途中設問がありますが、エンターキーで処理を進めます。コマンド実行後、自動的に［/root/.ssh］に認証キーが作成されます。</li>
<pre>
# ssh-keygen -t rsa -N ""
</pre>
<li>RSA公開キーをバックアップ先に「authorized_keys」というファイル名でscp転送します。（途中の設問には答えます）</li>
<pre>
# scp /root/.ssh/id_rsa.pub 192.168.1.3:/root/.ssh/authorized_keys
</pre>
<li>セキュアログインでパスワード無しでログインできることを確認します。（ログイン後はログアウトしてね）</li>
<pre>
# slogin 192.168.1.3
</pre>
<li>さぁ、いよいよWordpress本体のパスワード入力無しでのバックアップです。Wordpress本体のバックアップと一緒に［/etc］配下にある全ての［*.conf］,［*.cf］ファイルも一緒にバックアップしてみます。
<pre>
# rsync -auvzrlpogt ~user/wordpress 192.168.1.3:/backup/www.witkitty.com/wordpress
・・・略
# find /etc *.conf -exec rsync -auvzrlpogt {} 192.168.1.3:/backup/witkitty.com/conf \;
・・・略
# find /etc *.cf -exec rsync -auvzrlpogt {} 192.168.1.3:/backup/witkitty.com/conf \;
・・・略
</pre>
<p>これ以外に個別のファイルがあるのならば、rsyncの対象にすればいいわけです。<br />
（rsyncのオプションはヘルプ等で確認してくださいな）</li>
</ol>
</div>
<p style="padding-left: 30px;">これで、一通りバックアップしましたので、ゆゆしき事態になっても、最悪サーバ再インストール後最短で環境を整えることが出来ます。<br />
後は、rsyncコマンドを個々にcronに登録してもよし、実行スクリプトを作って、cron.dailyに放り込むもよし、これであなたが眠っている間にバックアップが取られることになります。<br />
ではでは。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.witkitty.com/wordpress/2009/06/29/wordpress-backup/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.witkitty.com/wordpress/2009/06/29/wordpress-backup/" />
	</item>
		<item>
		<title>WordPress &#8211; データベース バックアップ</title>
		<link>http://www.witkitty.com/wordpress/2009/06/26/wordpress-db-backup/</link>
		<comments>http://www.witkitty.com/wordpress/2009/06/26/wordpress-db-backup/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 08:14:13 +0000</pubDate>
		<dc:creator>hiro</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[バックアップ]]></category>
		<category><![CDATA[メール添付]]></category>
		<category><![CDATA[メール送信]]></category>

		<guid isPermaLink="false">http://www.witkitty.com/wordpress/?p=117</guid>
		<description><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/06/26/wordpress-db-backup/" title="Wordpress - データベース バックアップ"></a>このサイトは、当方の自作サーバーで動いているので、レンタルサーバーのような制約が無い。 レンタルサーバを借りたことがないので、どこまでレンタルサーバーでどこまで制約があるか分からないが・・・ 以下は、レンタルサーバーでも &#8230;<p class="read-more"><a href="http://www.witkitty.com/wordpress/2009/06/26/wordpress-db-backup/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/06/26/wordpress-db-backup/" title="Wordpress - データベース バックアップ"></a><p style="padding-left: 30px;">このサイトは、当方の自作サーバーで動いているので、レンタルサーバーのような制約が無い。<br />
レンタルサーバを借りたことがないので、どこまでレンタルサーバーでどこまで制約があるか分からないが・・・<br />
以下は、レンタルサーバーでも出来るかもしれないが、基本的に自鯖の方用ということで。<br />
また、<a href="http://www.ilfilosofo.com/blog/wp-db-backup/">WordPress Database Backupプラグイン</a>を入れている方も不要と思われるんですが、データベースが大きくなると、ブラウザでの処理中にタイムアウトが発生する可能性があります。（タイムアウトするほどポストしていないので何とも言えませんが・・・）</p>
<p style="padding-left: 30px;">日々のデータベースバックアップをどうするかというと、<span style="color: #888888;"><strong>mysqldump</strong></span>コマンドを使ってごっそり引っこ抜いてしまうという手法を使います。このコマンドで得られたダンプファイルというのは単なるテキストファイルなんですが、このフォーマットはリストアするときにMySQLが分かるような書式になっています。ということなので、このテキストファイルを圧縮し、メールで送れれば、ほぼ<a href="http://www.ilfilosofo.com/blog/wp-db-backup/">WordPress Database Backupプラグイン</a>と同じことをブラウザのタイムアウトを気にせずバックアップを取ることが可能でやんす。<br />
（当方はこのダンプファイルがテキストファイルであるということで、ブログの引っ越しにこの性質を利用して手間を掛けずに数時間で引っ越しを終わらせました。このことは後で記事にでもしてみます）</p>
<p style="padding-left: 30px;">さて、では順を追って簡単に説明します。</p>
<p style="padding-left: 30px;">まずは、mysqldumpコマンド例は以下の通りです。</p>
<div style="padding-left: 30px;">
<pre>
# mysqldump [DB name] --host=[hostname] -u [DB user name] --password=[DB password] > [backup file name]
</pre>
</div>
<p style="padding-left: 30px;">で、このままだと手動でコマンドを叩くしかないので、cronに任せたくなりますが、そこをちょっと我慢してメールの送信まで一気に処理しちゃうスクリプトを書いちゃいましょ。</p>
<p style="padding-left: 30px;">基本的にダンプファイルを作るまではシェルスクリプト（bash）で、メール送信だけPerlスクリプトで書きました。Perl部分は［<a href="http://www.bird-soft.net/mt/2009/06/gmailperl.html">Bird-Soft</a>］さんのコードを丸写しなので合体させました・・・orz</p>
<p style="padding-left: 30px;">とりあえず、スクリプト全体のコードはこれ。（エラー処理は端折ってます）</p>
<p><span id="more-117"></span></p>
<div style="padding-left: 30px;">
<pre>
#!/bin/bash

dumpdir='/tmp/'
dumpdate=`date +%Y%m%d`
dumpfilename=senjyuwpdb-$dumpdate.dump
#データベース名
dbname='dbname'
#ホスト名（ほとんどの場合localhost）
dbhost='localhost'
#データベースのユーザ名
dbuser='dbuser'
#データベースユーザのパスワード
dbpasswd='dbpassword'
#圧縮ファイルの拡張子
compress_ext='.tar.gz'
#送信先アドレス
mailtoaddr='hogehoge@foo.com'

#### dump wordpress database
mysqldump $dbname --host=$host -u $dbuser --password=$dbpasswd > $dumpdir$dumpfilename

#### compress to tar.gz
pushd .
cd $dumpdir
tar zcvf $dumpfilename$compress_ext $dumpfilename
popd
#### send a mail with dump file
perl pmail.pl $dumpdir$dumpfilename$compress_ext $mailtoaddr

#
#### End of script
</pre>
</div>
<p style="padding-left: 30px;">それでもって、メール送信側Perlスクリプト（pmail.pl）がこれ。だが何度も言いますが、［<a href="http://www.bird-soft.net/mt/2009/06/gmailperl.html">Bird-Soft</a>］さんの所のコードを丸写し・・・です。（ありがとうございます、Bird-Softさん）</p>
<div style="padding-left: 30px;">
<pre>

#!/usr/bin/perl
#
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添付ファイル付メール送信スクリプト
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; メール送信については、LANからWANへ出来ているものとする
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 尚、このスクリプトは、LAN内からのSMTP接続のみ想定している
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ので、外のメールサーバを使う場合はNET::SMTP::SSL認証を
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 必要とする場合がある

use Jcode;
use Net::SMTP;
use MIME::Entity;
use Net::SMTP::SSL;

#### 送信サーバ設定
#メールサーバ名
my $smtp_server = &#039;mail.foo.com&#039;;
#SMTPポート
my $smtp_port = &#039;25&#039;;

#SMTP::SSLが必要な場合
#認証ユーザメールアドレスとパスワード
#my $smtp_acc = &#039;user@foo.com&#039;;
#my $smtp_pwd = &#039;password&#039;;
####

#### 日時取得
( $sec, $min, $hour, $date, $month, $year, $youbi ) = localtime;

$year += 1900;
$month++;

@jweek = ( &quot;日&quot;, &quot;月&quot;, &quot;火&quot;, &quot;水&quot;, &quot;木&quot;, &quot;金&quot;, &quot;土&quot; );
$j_youbi = $jweek[ $youbi ];

$hour = sprintf &quot;%02d&quot;, $hour;
$min = sprintf &quot;%02d&quot;, $min;
$sec = sprintf &quot;%02d&quot;, $sec;

$event_time=&quot;$year/$month/$date（$j_youbi）$hour:$min:$sec&quot;;
print &quot;イベント発生：$event_time\n&quot;;
#### 日時取得ここまで

$event_name=$ARGV[0];&nbsp;&nbsp; #添付ファイル名
$event_mailto=$ARGV[1]; #送信アドレス

#### 添付ファイル名
my $file_path_mail=$event_name; #引数より
my $timestamp_string=$event_time;

#BCCが必要な場合
my $mail_bcc = $event_mailto;
#fromアドレス（ここがメールサーバドメインと違った場合は転送と見なされはじかれる場合があります）
my $mail_from = &#039;senduser@foo.com&#039;;

#### 件名
my $mail_subject = &#039;WordPressデータベースダンプ&#039;;

#本文
my $mail_body = &lt;&lt;&quot;_MAILBODY_&quot;;

時刻：$timestamp_string
に取得されたデータベースダンプです
_MAILBODY_

#文字コード変換
$mail_subject = jcode($mail_subject)-&gt;jis;
$mail_subject = jcode($mail_subject)-&gt;mime_encode;
$mail_to = jcode($mail_to)-&gt;jis;
$mail_to = jcode($mail_to)-&gt;mime_encode;
#$mail_bcc = jcode($mail_bcc)-&gt;jis;
#$mail_bcc = jcode($mail_bcc)-&gt;mime_encode;
$mail_from = jcode($mail_from)-&gt;jis;
$mail_from = jcode($mail_from)-&gt;mime_encode;
$mail_body = jcode($mail_body)-&gt;jis;

my $err;
my $oSmtp;
my $oMime;

#ここから送信処理
#SSL認証用
#$oSmtp = Net::SMTP::SSL-&gt;new($smtp_server,Port =&gt; $smtp_port, Debug =&gt; 1);
#SMTP認証用
$oSmtp = Net::SMTP-&gt;new($smtp_server);

#SSL認証が必要な場合のエラー処理
#if($oSmtp-&gt;auth($smtp_acc,$smtp_pwd)){
#サーバ内の特定ユーザからの送信なのでエラー処理は端折ってます
$oSmtp-&gt;mail($mail_from);
$oSmtp-&gt;to($mail_to);
#&nbsp;&nbsp; &nbsp;$oSmtp-&gt;bcc($mail_bcc);
$oSmtp-&gt;data();
$oMime = MIME::Entity-&gt;build(
From =&gt; $mail_from,
To =&gt; $mail_to,
#&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Bcc =&gt; $mail_bcc,
Subject =&gt; $mail_subject,
Data =&gt; $mail_body
);
$oMime-&gt;attach(
Path =&gt; $file_path_mail,
Type =&gt; &quot;application/octet-stream&quot;,
Encoding =&gt; &quot;Base64&quot;
);
$oSmtp-&gt;datasend($oMime-&gt;stringify);
$oSmtp-&gt;dataend();
$oSmtp-&gt;quit;

print &quot;ok mail to $mail_to\n&quot;;
#}else{
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $err = &#039;SMTP Server Authentication Error!!&#039;;
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;NG \n&quot;;
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;error : $err \n&quot;;
#}

print &quot;end... \n&quot;;
exit;
</pre>
</div>
<p style="padding-left: 30px;">論より証拠？で、Perlのコードは別として、シェルスクリプトの方は汚い・拙い書き方ですが、たいしたことしてません。後はこのスクリプトをcron.dailyなんかに放り込めば、日々のバックアップ処理が自動的に行われますです。と、ここで思い出した、<strong>最後にバックアップファイル消してねぇ～</strong>、各自適当に願いします・・・ぉぃ</p>
<p style="padding-left: 30px;">当方の環境は、サーバ内もしくはLAN内から特定のユーザにメールが送られると自動的に外部のアドレスに転送される設定になっているので、今回苦労しなかったが、DDNS等でメールサーバを運用している方は注意が必要かと。</p>
<p style="padding-left: 30px;">ではでは</p>
]]></content:encoded>
			<wfw:commentRss>http://www.witkitty.com/wordpress/2009/06/26/wordpress-db-backup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.witkitty.com/wordpress/2009/06/26/wordpress-db-backup/" />
	</item>
		<item>
		<title>仮想ゲストOSのバックアップ</title>
		<link>http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/</link>
		<comments>http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 04:52:51 +0000</pubDate>
		<dc:creator>hiro</dc:creator>
				<category><![CDATA[VMware ESXi]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[バックアップ]]></category>

		<guid isPermaLink="false">http://witkitty.com/wordpress/?p=79</guid>
		<description><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/" title="仮想ゲストOSのバックアップ"></a>このサイトが動いているサーバはVMware ESXi上のLinux OSで動いている。 仕事柄、ある製品のサポートもしているのだが、再現確認が必要な場合、今までは実機を使用して動作確認・解析を行っていた。この場合、複数の &#8230;<p class="read-more"><a href="http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/" title="仮想ゲストOSのバックアップ"></a><p style="padding-left: 30px;">このサイトが動いているサーバは<a href="http://www.vmware.com/jp/products/esxi/">VMware ESXi</a>上のLinux OSで動いている。<br />
仕事柄、ある製品のサポートもしているのだが、再現確認が必要な場合、今までは実機を使用して動作確認・解析を行っていた。この場合、複数のお客さんの疑似環境を作る必要に迫られたときが大変。当然スケジュールを組んで進めていくのだが、OSが異なったりすると毎回実機にOSをインストールする羽目に。一部、クライアントで動くVMwareも使用していたのだが、何せサーバ関連のサポートなので、必ず複数台必要となり、クライアントを圧迫。そんな矢先、これが出てきたので飛びついた。しかも、ESXiは無償！なのでSOHOな当方には助かる。（当然企業ユースには高機能版が販売されています）<br />
前置きが長くなったが、ESXiを使っていて一番困るのが、「ゲストOSのバックアップ」である。ゲストOSを止めてバックアップ（コールドバックアップ）するのであれば、別段問題は無いのだが、サーバ絡みなので動作中でもバックアップを取る必要がある。しかし、VMware Consolidated Backup（VCB）は有償・・・。ならば、コマンドで何とかしてしまえと言うことで、以下に手順を。</p>
<div style="padding-left: 30px;">
<ul>
<li>ゲストOSのIDを取得
<pre>~ # vim-cmd vmsvc/getallvms</pre>
</li>
<li>バックアップしたいゲストOSのスナップショットを採取
<pre>~ # vim-cmd vmsvc/snapshot.create [ゲストOSのID] [スナップショット名]</pre>
<p>このスナップショットを取ることにより、本来読み込みまでロックされている.vmdkファイルのコピーが可能になります。</li>
<li>ファイルのコピー<br />
コピー方法は、環境によりけりなので、いくつか例を。</p>
<li>ESXiサーバに外部ディスクを直接アタッチしている場合は、そのマウントしているボリュームにコピーすればOK。ちなみに当方は、別のLinuxサーバボリュームをネットワークマウントしているので、そこにコピーしています。</li>
<li>外部のWindowsやNASに転送する場合は、<a href="http://www.tab2.jp/~winscp/">WinSCP（日本語版）</a>なんかを使ってネットワークコピーすればOK。</li>
<li>コピーが終わったら、スナップショットを解放。
<pre>~ # vim-cmd vmsvc/snapshot.removeall [ゲストOSのID]</pre>
</li>
</ul>
</div>
<p style="padding-left: 30px;">もし、元が壊れてこのバックアップから起動したい場合は、ゲストOS名-xxxxx.vmdkの「-xxxxx」を取り除いて起動してあげれば立ち上がります。</p>
<p style="padding-left: 30px;">まぁ、あくまで私の環境での覚え書き程度ですので、先人の方々のサイトを見た方がためになると思い・・・(ry</p>
]]></content:encoded>
			<wfw:commentRss>http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.witkitty.com/wordpress/2009/06/16/computer-esxi-backup/" />
	</item>
	</channel>
</rss>

