バックアップとか

投稿日:

ココに書いとくことで、なによりもまずワタシの備忘録になることが激しく判明した(^^;ので、他の人にはあまり意味ないと思うけど投入。

まず、Linux機のバックアップ用シェルスクリプト、backup.sh。

一応/backupとしてマウントしてる別ドライブに毎日バックアップを取るようにはしてたんすけども、MySQLのデータが段々重要性を増し、1日ごとの差分があったほうが好ましくなってきたんで、yyyymmdd形式のフォルダを作成しそこにバックアップするように変更しました。

#! /bin/bash

rsync -r -o -g -t --delete /home/* /backup/home/
rsync -r -o -g -t --delete /var/www/* /backup/www/
rsync -r -o -g -t --delete /root/* /backup/root/


DIR=/backup/mysql/$(date +%Y%m%d)

mkdir $DIR
mysqlhotcopy -u root -p ********** database $DIR
mysqlhotcopy -u root -p ********** mt $DIR

mysqldump --user=root --password=********** database > $DIR/database.sql
mysqldump --user=root --password=********** mt > $DIR/mt.sql
mysqldump --user=root --password=********** mysql > $DIR/mysql.sql

データベース以外のファイルはrsyncで同期させ、MySQLデータベースは、まずmysqlhotcopyでデータファイルそのものをコピーした後、mysqldumpでsqlファイルとしても書き出す2段構えの体制を取ってます。

ついでに、Windows機のファイル一覧を、Linux機上で走ってるMySQLに流し込む手順。

ぴよぴよ実験室さんで配布されているLSC.EXEを使用し、セミコロン区切りで二重引用符が付かないリストを作成するよう、LSCBAT.BATを以下のように改造して使用します。

SET EXT="*.*"
SET LINE="%%s;%%s;%%s;%%s\n"
SET DATE="%%04d-%%02d-%%02d"
SET SIZE=BYTE
SET TSIZE=MB
SET SUBDIR=ON
SET HIDDEN=OFF
SET ERRSKIP=ON
SET ERRDISP=ON

SET DIR="i:"
LSC.exe %DIR% %EXT% %LINE% %DATE% %SIZE% %TSIZE% %SUBDIR% %HIDDEN% %ERRSKIP% %ERRDISP% > serverlist.txt

SET DIR="j:"
LSC.exe %DIR% %EXT% %LINE% %DATE% %SIZE% %TSIZE% %SUBDIR% %HIDDEN% %ERRSKIP% %ERRDISP% >> serverlist.txt

sed -e s/[a-z]\:// -e s/\\/\//g serverlist.txt -e s/Byte// >serverlist.csv

結果>
i:\path\morepath;filename;12345678 Byte;2003-09-03
  ↓
/path/morepath;filename;12345678 ;2003-09-03

sedでs/[a-z]\://としてドライブレターを削除してるのは、このドライブってRaidenFTPdで仮想フォルダ(VFS)としてマウントしてる→FTPサーバ上での見え方に合わせるため。\を/に置換してるのは、半ば趣味(笑)

余談ですが、同じぴよぴよさんで配布されている「テキスト→HTML変換ツール」も、非常に便利に使わせて頂いております。

Movable Typeはタグを許容するため特殊文字のサニタイズを行なってくれない(<blockquote>タグの中身に致っては改行の面倒も見てくれない:^^;)→D&Dでさくっと変換してくれるこのツールだと手間が掛かりません。

「&<>"」のサニタイズについては、LuckyStarという常駐ツールで、直接クリップボードの中身を変換してそのまま貼れると教えてもらいました。確かに非常に手軽で便利です。ワタシ的には<br>タグを足してくれるtxt2htmlの方が便利な事のほうが多いみたいですけど。

データベースに流し込むデータの作成が出来たら、phpMyAdmin上から

030904a.gif

のように作成したテーブルに「テーブルにテキストファイルを追加」として、作成したfilelist.csvを流し込むだけ。

Windowsで作成したSJISファイル→Linux上で動いているEUCデータベースに流し込むので、こんな感じで流し込みます。

まぁいちいちこんなコトするのも面倒くさいんで、最終的には同じ動作をするPHPスクリプトを書く事になるでしょう。ついでに

$pathphrase = explode("/",$path);

ってな感じでパス名を/毎に分解し、取った配列を同じデーターベースに突っ込む処理を追加するかもしれません。これやっとけばフォルダごとの集計がし易いから。