データの安全を確保するため、少なくとも毎日データベースのバックアップを取ることを推奨します。データベースに数十万件のチケットがあり、DBのサイズが数百ギガバイトに達している場合、データベース全体のバックアップは困難な作業になる可能性があります。

以下に、バックアップをより効率的に行うための推奨事項を紹介します。

  1. 複数のDBサーバーを用意できる場合は、DBサーバーをMASTER-SLAVE構成にして、DBロックを避けるためにSLAVEサーバーでバックアップを取るようにしてください。2台のサーバーを維持することが難しい場合は、トラフィックが最も少ない時間帯(例:午前2時)にバックアップを実行してください。データベースが数ギガバイトを超えると、バックアップに数分かかることがあり、その間DBがロックされてアプリケーションが使用できなくなります。そうなった場合は、スレーブとして次のサーバーを追加する適切なタイミングです。

  2. LiveAgentのデータベースには添付ファイルも含まれていますが、これらはそれほど頻繁に変更されません。そのため、ファイルコンテンツのテーブル(qu_g_filecontents)については増分変更のみをバックアップします。また、容量をさらに節約するため、qu_g_logsテーブルのバックアップもスキップします。

  3. バックアップファイルをできるだけ小さく保ち、ファイルをできるだけ速く圧縮するために、pbzip2ユーティリティを使用してバックアップを圧縮します。pbzip2の利点は並列圧縮です(すべてのCPUで圧縮が実行されるため、標準的なgzipやzipユーティリティと比べてはるかに高速です)。サーバー(例:Centos/Redhat)にpbzip2をインストールするには、以下のコマンドを使用します:

yum install  pbzip2

以下は、バックアップに使用するスクリプトの簡略化した例です:

#!/bin/bash
dbname='liveagent'

mkdir -p /backup/${dbname}
#DELETE OLD BACKUP FILES
find /backup/${dbname}/db* -type f -mtime +5  -exec rm {} \;

##MAKE BACKUP OF ALL ACTIVE TABLES (skip filecontents)
now=$(date +"%Y_%m_%d")
sqlFile="/backup/${dbname}/db_${dbname}_$now.sql"

if [ -f "$sqlFile.bz2" ]
then
    echo "$sqlFile.bz2 already created, skipping..."
    exit
else
    nice -n 19 /usr/bin/mysqldump --single-transaction --skip-add-drop-table --skip-extended-insert  --ignore-table=${dbname}.qu_g_logs --ignore-table=${dbname}.qu_g_filecontents -u'root' -p'<<PASSWORD>>' -h localhost ${dbname} > "$sqlFile"
    cd /backup/${dbname}; nice -n 19 ionice -c 3 pbzip2 -p10 "$sqlFile" > /dev/null 2>&1
fi

##IF EXISTS filecontents master, make incremental backup and zip it
nowTime=$(date +"%Y-%m-%d %H:%M:%S")
timestampFile="/backup/${dbname}/filecontents_timestamp"

##IF MASTER DOESN'T EXIST, create master file and zip it
fileContentFile="/backup/${dbname}/filecontents_${dbname}_$nowTime.sql"
if [ -f "$timestampFile" ]
then
    oldTime=`cat $timestampFile`
    nice -n 19 /usr/bin/mysqldump --where="created<'$nowTime' AND created>'$oldTime'" --no-create-info --single-transaction --skip-add-drop-table --skip-extended-insert -u'root' -p'<<PASSWORD>>' -h localhost ${dbname} qu_g_filecontents > "$fileContentFile"
else
    nice -n 19 /usr/bin/mysqldump --where="created<'$nowTime'" --single-transaction --skip-add-drop-table --skip-extended-insert -u'root' -p'<<PASSWORD>>' -h localhost ${dbname} qu_g_filecontents > "$fileContentFile"
fi
cd /backup/${dbname}; nice -n 19 ionice -c 3 pbzip2 -p10 "$fileContentFile" > /dev/null 2>&1
echo "$nowTime" > "$timestampFile"