SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

NAntによるバックアップの自動化

NAntの強力な自動バックアップツールとしての可能性

  • X ポスト
  • このエントリーをはてなブックマークに追加

バックアップの課題(3):サーバーデータベースのバックアップ

 現在このサーバーがホストしている2つのデータベースサーバーに、バックアップの必要なデータベースが存在します。1つはMySQL 5データベースで、もう1つはMSDEデータベースです。データベースのバックアップを希望するユーザーは、バックアップを圧縮したうえで安全な場所にメールで送信するよう要請しています。最初のステップとして、1つのデータベースをバックアップするNAntスクリプトを作成します。このスクリプトには、MySQLデータベースをバックアップするためのターゲットとMSDEデータベースをバックアップするためのターゲットが必要です。MySQLのバックアップにはmysqldumpユーティリティを使い、バックアップの必要なデータベースに対して次のコマンドを実行します。

mysqldump -u <username> -p<password> <databasename>

 バックアップに特化した読み取り専用のユーザーアカウントを用意することをお勧めします。MSDEデータベースをバックアップするには、osqlユーティリティを使い、次のコマンドでバックアップを実行します。

osql -E -U <username> -P <password> -Q "BACKUP DATABASE
 <databasename> To DISK = <backupfile>;"

 ここでもバックアップに特化した読み取り専用のユーザーアカウントを用意することをお勧めします。

 このスクリプトではメールの送信のためにローカルホストのSMTPサーバーを使用しています。この部分については実際のローカルSMTPサーバーを設定してください。
<?xml version="1.0"?>
<project name="DatabaseBackup">
<!-- parameters
    mysqlPath (optional) Only required for the MySQLBackup target.
    This is the path to the mysqldump executable
    (in the mysql bin directory).
    databaseName The name of the database to backup.
    username The user account to use for the backup.
    password The user's password.
    tempDirectory A temporary directory to store the database backup,
    prior to emailing it.
-->
<target name="BackupMySQL">
    <exec basedir="${mysqlPath}" program="mysqldump"
        commandline="-u ${username} -p${password} ${databaseName}"
        output="${tempDirectory}${databaseName}.sql" />
    <zip zipfile="${databaseName}.zip">
        <fileset basedir="${tempDirectory}">
            <include name="${tempDirectory}${databaseName}.sql" />
        </fileset>
    </zip>
    <mail
        from="backup@anon.com"
        tolist="secure@anon.com"
        subject="${databaseName} database backup"
        mailhost="localhost">
        <files>
            <include name="${tempDirectory}${databaseName}.zip" />
        </files>
        <attachments>
            <include name="${tempDirectory}${databaseName}.zip" />
        </attachments>
    </mail>
    <delete file="${tempDirectory}${databaseName}.zip" />
</target>
<target name="BackupMSSQL">
    <exec program="osql"
          commandline="-E -U ${username} -P ${password} -Q
 "BACKUP DATABASE ${databaseName} To DISK =
 '${tempDirectory}${databaseName}.dat';" />
    <zip zipfile="${tempDirectory}${databaseName}.zip">
        <fileset basedir="${tempDirectory}">
            <include name="${tempDirectory}${databaseName}.dat" />
        </fileset>
    </zip>
    <mail
        from="backup@anon.com"
        tolist="secure@anon.com"
        subject="${databaseName} database backup"
        mailhost="localhost">
        <files>
            <include name="${tempDirectory}${databaseName}.zip" />
        </files>
        <attachments>
            <include name="${tempDirectory}${databaseName}.zip" />
        </attachments>
    </mail>
    <delete file="${tempDirectory}${databaseName}.zip" />
</target>
</project>

 このスクリプトを「DatabaseBackup.build」という名前で保存します。ここでもやはり、データベースのバックアップを制御する別のスクリプトが必要です。このサーバーにはweb1、web2、web3の3つのWebサイトが存在することを思い出してください。それぞれにデータベースが存在します。web1とweb2はぞれぞれweb1とweb2というMySQLデータベースを使用します。web3はweb3というMSDEデータベースを使用します。これらのデータベースの所有者は、データをバックアップして安全な場所へメールで送信することを要請しています。この要件を満たすスクリプトは次のようになります。

<?xml version="1.0"?>
<project name="BackupDatabases" target="Backup">

    <!-- This property can be declared globally,
         because it is the same for all databases. -->
    <property name="tempDirectory" value="C:\backup\" />
    <property name="mysqlPath" value="C:\program files\mysql\bin\" />

<!-- This target exists only to specify which databases are
     to be backed up, and in what order. -->
<target name="Backup" depends="BackupWeb1,BackupWeb2,BackupWeb3" />

<target name="BackupWeb1">
    <property name="databaseName" value="web1" />
    <property name="username" value="web1user" />
    <property name="password" value="P@ssword" />
    <nant buildfile="DatabaseBackup.build" inheritall="true"
          target="BackupMySQL" />
</target>

<target name="BackupWeb2">
    <property name="databaseName" value="web2" />
    <property name="username" value="web2user" />
    <property name="password" value="P@ssword" />
    <nant buildfile="DatabaseBackup.build" inheritall="true"
          target="BackupMySQL" />
</target>

<target name="BackupWeb3">
    <property name="databaseName" value="web3" />
    <property name="username" value="web3user" />
    <property name="password" value="P@ssword" />
    <nant buildfile="DatabaseBackup.build" inheritall="true"
          target="BackupMSSQL" />
</target>

</project>

 このスクリプトを「BackupDatabases.build」という名前で保存します。このスクリプトをテストするには、「DatabaseBackup.build」と同じディレクトリに保存しておく必要があります。コマンドプロンプトを開き、このディレクトリに移動して次のコマンドを実行します。

nant -buildfile:BackupDatabases.build

 このスクリプトを実行すると、先の3つのデータベースの内容がzipアーカイブに追加され、メールでsecure@anon.comに送信されます。

まとめ

 本稿ではIISメタデータ、Webサイトファイル、データベースの3つのケースについてバックアップ用のスクリプトを作成しました。これらのバックアップタスクを統合し、スケジュールに従って実行するように設定する作業が残っています。すべてのビルドタスクを統合する最も簡単な方法は、次のようなバッチファイルを定義することです。

nant -buildfile:BackupIIS.build
nant -buildfile:BackupWebsites.build
nant -buildfile:BackupDatabases.build

 これだけです。このシステムをセットアップしておけば、毎晩自動的にフルバックアップが行われます。サーバーに新規のサイトが追加されたときは、そのサイトをBackupWebsitesとBackupDatabasesの2つのスクリプトに追加するだけです。これらのツールはすべて無料で使え、信頼性もあります。

 NAntの能力は単なるビルドツール以上のものがあります。本稿では強力な自動バックアップツールとしての可能性を示しましたが、他にも多くの可能性が考えられます。自らの手で管理タスクを実行するとき、NAntで自動化できないか自問自答してみるとよいでしょう。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Liam McLennan(Liam McLennan)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/395 2006/08/22 15:48

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング