rsyncでバックアップ
昔業務系システムを自分で管理していた時代はtarをcronで定期実行していましたが、コンテンツ系システムだとファイル数が非常に多く、差分バックアップを使わないとディスクスペースや処理時間がかかってしまうのでrsyncを使ってローカルに差分バックアップをとるようにしてみました。
本当はディスクシステムを使ったスナップショットやらちゃんとした市販ソフトの適応を検討するべきなのでしょうが小規模ならばこれでもよいかなと。
とりあえず動いているみたいなので置いておきます。OSはcentos5.5です。
rsyncエラー時の処理はテストしてみていません。
サンプルコード
#!/bin/bash # # rsyncを使った差分バックアップ # $BACKUPDIR配下にbackup0〜backup$BACKUPGENのフォルダ名でバックアップ # backup0が最新バックアップで実行する毎にbackupフォルダをずらす # backup日時はフォルダの日時で判別可能なので特に取らない # rsyncの差分はbackup1とバックアップ対象を比較 # backup0が存在していない場合はフルバックアップ # #--- 設定 --- #バックアップ履歴数 BACKUPGEN=4 #バックアップ対象 BACKUPFROMDIR="/var/www/moodle01" #バックアップ先フォルダ BACKUPDIR="/backup" #前準備 echo "`date` backup start" CNT=$BACKUPGEN while [ $CNT -ge 0 ] do if [ $CNT -eq $BACKUPGEN ] then # 最後の1つを削除 if [ -d $BACKUPDIR/backup$CNT ]; then echo "rm -fr $BACKUPDIR/backup$CNT" rm -fr $BACKUPDIR/backup$CNT fi else MVCNT=`expr $CNT + 1` #バックアップディレクトリをずらす if [ -d $BACKUPDIR/backup$CNT ] then echo "mv $BACKUPDIR/backup$CNT $BACKUPDIR/backup$MVCNT" mv $BACKUPDIR/backup$CNT $BACKUPDIR/backup$MVCNT fi fi CNT=`expr $CNT - 1` done #rsync準備 RSYNCCMD="rsync -av --delete" if [ -d $BACKUPDIR/backup1 ]; then #backup1との差分をbackup0にバックアップ echo "$RSYNCCMD --link-dest=../backup1 $BACKUPFROMDIR $BACKUPDIR/backup0" $RSYNCCMD --link-dest=../backup1 $BACKUPFROMDIR $BACKUPDIR/backup0 else #初回のフルバックアップ echo "$RSYNCCMD $BACKUPFROMDIR $BACKUPDIR/backup0" $RSYNCCMD $BACKUPFROMDIR $BACKUPDIR/backup0 fi code=$? if [ $code -ne 0 ]; then mail -s "BACKUP NG CODE IS $code" root exit 1 fi echo "`date` backup end" exit 0
余談
あと久々にsh弄るとけっこう忘れていてショックが大きかった・・・。久々に下記の本を引っ張り出して書いていました。
もともとWebアプリよりはクラサバ系のアプリをUNIXで組んでいたので、linuxを初めて使ったとき、各種資源がどう扱われるのか知りたくてこの本を買いましたが、今でも十分通用する良書かと思います。
Webだけやるならここまでのことを知らなくともどうにでもなりますが、このあたりをちゃんと知っているエンジニアはトラブルシューティング能力が段違いですね。こういった要素がちゃんと評価される世の中になってほしいです。
Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて
- 作者: ニールマシュー,リチャードストーンズ,Neil Matthew,Richard Stones,葛西重夫
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/08
- メディア: 単行本
- 購入: 4人 クリック: 69回
- この商品を含むブログ (20件) を見る
CentOS5.5にpostgresql8.4構築
moodleとかmaharaを使うのにどうもmySQLよりpostgreSQLの方が推奨されているようなので、CentOS5.5+Apache+PostgreSQL8.4+PHPのLAPP環境を作ってみました。
postgreSQLについてはRedhat7.3のころはかなり使っていたのですが大分変わっているようで以外と苦戦したのでメモを残しておきます。
方針はコンパイルせずにyumで出来るだけ済ませるようにしています。
インストールするpostgreSQL
公式だとpostgreSQLのバージョンが8.1系となっています。Windowsだとバイナリのリリースがすでに終わっているなど今から利用するには若干古いしその後のvacumの改良などを考えると新しいものが入れたいと思い、新しいバージョンを入れました。
yumでインストールするにはpostgresが置いてあるリポジトリを追加する必要があります。
http://yum.pgsqlrpms.org/reporpms/repoview/letter_p.group.html
こちらから該当のディストリビューションとpostgresのバージョンに対応したrpmをダウンロードしてインストールします。
yumコマンドでこちらを利用するように /etc/yum.repos.d/CentOS-Base.repo を編集して[base],[upfates]にexcludeにpostgresを
追加します。
参照:@IT:特定のファイルをyumのアップデート対象から外すには
[base]
priority=1
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
exclude=postgres* php-pgsql*
これで希望するバージョンのpostgreSQLがインストールできるはずです。
あとは通常と同様です。
tcpip接続の有効化
postgresqlの場合、phpからローカル接続する場合もtcp/ipが利用されます。そこでtcp/ip接続を有効化する必要があります。
listen_addressesがコメントアウトされているので外します。外部から接続する場合はIPを設定します。
接続ポートを変える場合はportのコメントアウトを外して変更します。変更してしまうと他の設定個所にもいろいろ影響があるのでそのままにしておいた方がよいかと。
- /var/lib/pgsql/data/postgresql.conf抜粋
listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
port = 5432 # (change requires restart)
設定を反映させるにはpostgresqlをリロードします。
# /sbin/service postgresql reload
SELINUXの設定変更
SELINUXを有効にしているとローカル接続であってもはじかれます。
はじかれているかどうかはログで確認できます。
これを通すようにするにはhttpd_can_network_connect_dbを有効にします。
mySQLとpostgreSQLに有効らしいです。
# /usr/sbin/setsebool -P httpd_can_network_connect_db on
ちなみにmySQLでローカル接続の場合は無効の場合でも繋がりました。
接続ポートを変えた場合は他の処置が必要かと。
参考:SELinuxを使ってみる入門BoF
pg_hda.confによるクライアント認証設定
デフォルトのままだとほとんどの場合、接続できません。認証付でローカルだけ接続できるように設定してみます。
よくtrustにしている例がありますが、こうしてしまうとセキュリティが低すぎるのでmd5による認証ができるようにします。
- /var/lib/pgsql/data/pg_hda.conf抜粋
変更したらpostgresqlをreloadします。
phpPgAdmin
Webによるphp管理ツールとしてphpPgAdminをインストールします。
これが動けばLAPP環境は出来たことになるかと。
インストールはrpmなどを使わず、公式サイトから落としたものを使いました。
設定ファイル
conf/config.inc.phpファイルが必要ですが、初めはありません。conf/config.inc.php-distをコピーして編集します。
とりあえず接続するpostgresqlサーバのホスト名を登録しておきます。($conf['servers'][0]['host'] = 'localhost';)|
- conf/config.inc.php抜粋
// Hostname or IP address for server. Use '' for UNIX domain socket.
// use 'localhost' for TCP/IP connection on this computer
$conf['servers'][0]['host'] = 'localhost';
ログインですが、postgesやrootなどのよく使うユーザ名はphpPgAdminではじくようになっています。conf/config.inc.phpの設定で変更出来ますが、セキュリティ上このままのほうが好ましいでので専用のパスワード付のユーザをpostgresqlに作成しておく必要があります。
実際の運用時はphpPgAdminのページに対してIPアドレス規制やら認証などをつけてセキュリティーを高くする処置が必要です。
間違い等ありましたらご指摘いただけると助かります。
データのコピー
CSVファイルによりコピーします。
コピー元
moodle.orgのサイトだと「現在、データベースのデータを簡単にエクスポートできる方法はありません。 」になってますが、現在はできるようになっています。データベースエントリの追加 - MoodleDocs
コピー先
「インポート」という処理は用意されていません。「エントリを追加する」でデータを登録します。(インポートがあるのでエクスポートがあると思い探してしまいました)
-
- 先ほど「データベース構造そのもののコピー」でコピーしたデータベースを選択します。
- 「エントリを追加する」タグを選択してスクロールします。ページの終わりの方に「ファイルからエントリをアップロードする」リンクがあるのでこれを選択します。
- 画面の下に「ファイルからエントリをアップロードする」欄が追加されます。ここで先ほどエクスポートしたファイルを選択します。
- 「ファイルをアップロードする」ボタンをクリックして処理を実行してください。処理が正常に終わったら一覧でエントリが追加されていることを確認してください。
備考
画像などのフィ−ルドを使った場合はこの方法では無理だと思います。このモジュール、どれくらい活用されているのかな?
データベース構造そのもののコピー
コピー元
-
- コースバックアップを使用します。このとき、バックアップはコピーしたデータベースのみチェックします。あとのユーザ情報等はすべてチェックを外します。
- 作成したバックアップファイルをダウンロードします。
コピー先
-
- コースリストアによりデータベースを配置したいコースに追加します。
- バックアップファイルをコピー先のMoodleにアップロードします。コースはリストアの画面で指定できるのでどこにアップロードしても良いのですが、追加するコースにアップロードしたほうが管理上楽です。
- コースリストアを使用します。バックアップファイルを指定すると処理が進み、ファイルの中身を表示後、どのようにリストアするか問い合わせ画面となります。この画面の「リストア」項目で「現在のコース、データを追加する」を選択します。ここで間違えるとコースがすべて消えてしまうので注意してください。「現在のコース、データを追加する」を選択した場合、項目「カテゴリ」「省略名」「名称」「開講日」は無効項目となります。
- 正常に完了するとコピー先のコースにデータベースが追加されているはずです。位置はコピー元のカテゴリ番号となるので、必要に応じて移動させます。
効果
ESXiの場合、インベントリの構成でCPU温度などのセンサー系が参照できます。ML115G5はさすがにサーバ機だけあってちゃんと情報が表示されています。
こちらで温度やファンスピードを確認してみました。
項目 | 対処前 | 対処後 | |||
CPU温度 | 45度〜41度 | 35度〜38度 | |||
フロント温度 | 32〜34度 | 32〜34度 | |||
CPUファン | 2000rpm | 2000rpm | |||
ケースファン | 3500〜4000rpm | 1600rpm |
CPUファンとケースファンのコネクタを逆さまにしているので実際にはケースファンが2000rpm,CPUファンが1600rpmで動作しています。
ケースを開けたままなので条件はことなりますが、ちゃんと冷えた上でファンのスピードが抑えられているので静音にはなりました。
CPUファンはPWMを捨てて2000rpmのものを取り付けてコネクタは元に戻した方が安定しそうなので、変更予定です。
クーラーを刀に変えてケースがちゃんとしまる方にした方が良いとは思いますが、とりあえずこのまま使っていく予定です。
- 出版社/メーカー: サイズ
- 発売日: 2009/04/22
- メディア: 付属品
- 購入: 1人 クリック: 56回
- この商品を含むブログ (2件) を見る
アイネックス LGA用バックプレート リテールクーラー用 BS-775
- 出版社/メーカー: AINEX
- 発売日: 2006/04/12
- メディア: Personal Computers
- 購入: 2人 クリック: 31回
- この商品を含むブログ (4件) を見る
失敗
失敗その1
クーラーが大きすぎて、ケースが閉まらなくなってしまいました。ごく数ミリ飛び出てしまいました。刀3だと大丈夫みたいですね。仕方がないので開けたまま使うことにします。
失敗その2
CPUファンのスピードが足りず、起動できない。
ML1115G5の場合、サーバ機ということもありファンの回転数がシビアで回転数が低いと起動できません。今回CPUファンにPWM対応で1700rpmまで回るものを用意したのですが、どうも最低でも2000rpmはないと駄目っぽく起動できなくなりました。
暫定手段としてケースファンとCPUファンのコネクタを逆にしてみました。こうすることで初期起動時の回転数テストには引っかからないようになりました。