TeamSpeak 3 サーバをバックアップする


TeamSpeak 3 サーバをバックアップする

Discordに喰われつつあるTeamSpeak 3のバックアップに関する記事です。
自分がよく手順を忘れるので備忘録がてら投稿します。

注意点

  • 本記事はLinux版のTeamSpeak 3 サーバを対象としています。
  • 本記事におけるバックアップ方法は所謂フルバックアップです。

バックアップ対象となるファイル

  • logs/*
  • files/*
  • licensekey.dat
  • query_ip_whitelist.txt
  • query_ip_blacklist.txt
  • ts3server.sqlitedb

運用方法によっては不要なものもあるので各自取捨選択してください。
TSDNSを使用している方は設定ファイルも対象に含めておきましょう。

バックアップ手順

下記条件を前提に記述します。

  • TeamSpeak 3 サーバは/opt/teamspeak3-server/に設置。
  • バックアップファイルの名称はts3server_backup.tar.bz2とする。
  1. TeamSpeak 3 サーバを停止する。

    # cd /opt/
    # ./teamspeak3-server/ts3server_startscript.sh stop
    
  2. バックアップ対象となるファイルの圧縮およびアーカイブ化する。

    # tar -jcvf ts3server_backup.tar.bz2 \
    teamspeak3-server/logs/ \
    teamspeak3-server/files/ \
    teamspeak3-server/licensekey.dat \
    teamspeak3-server/query_ip_whitelist.txt \
    teamspeak3-server/query_ip_blacklist.txt \
    teamspeak3-server/ts3server.sqlitedb
    

おしまい。

毎回コピペするの面倒なんだけど

上記バックアップ手順を少しいじってスクリプト化。
ts3server.sqlitedbの更新タイムスタンプをバックアップファイルの名称にします。

マサカリ大歓迎です。

ts3server_backupscript.sh
#!/bin/bash

# アーカイブ保存先ディレクトリを入力
DST_DIR=""
# TeamSpeak 3 サーバ格納ディレクトリを入力
SERVER_PATH=""
# アーカイブ対象のファイルおよびディレクトリをスペース区切りで入力
target=("files/" "logs/" "query_ip_blacklist.txt" "query_ip_whitelist.txt" "ts3server.sqlitedb")


# アーカイブ保存先ディレクトリの存在確認
if [ ! -d "$DST_DIR" ]; then
    echo "Directory not found. ($DST_DIR)"
    exit 1
fi

# TeamSpeak 3 サーバ格納ディレクトリの存在確認
if [ ! -d "$SERVER_PATH" ]; then
    echo "Directory not found. ($SERVER_PATH)"
    exit 1
fi

# pidファイルの存在確認 (ファイルが存在する場合は処理を行わない)
if [ -e "${SERVER_PATH%/}/ts3server.pid" ]; then
    echo "TeamSpeak 3 server is running, Please stop server first."
    exit 1
fi

# ts3server.sqlitedbの更新タイムスタンプを取得 (アーカイブファイル名に使用)
db_file="${SERVER_PATH%/}/ts3server.sqlitedb"
file_name=$(stat -c "%Y" "$db_file")  > /dev/null

if [ $? != 0 ]; then
    echo "Cannot get timestamp. ($db_file)"
    exit 1
fi

# アーカイブファイルの存在確認 (ファイルが存在する場合は処理を行わない)
dst_file="${DST_DIR%/}/$file_name.tar.bz2"
if [ -e "$dst_file" ]; then
    echo "Backup file already exists. ($dst_file)"
    exit 1
fi

# ライセンスキーが存在する場合はアーカイブ対象に追加
if [ -e "${SERVER_PATH%/}/licensekey.dat" ]; then
    target+=("licensekey.dat")
fi

# アーカイブファイルの作成
for ((i = 0; i < ${#target[@]}; i++)); do
    target[i]=$(basename "$SERVER_PATH")/${target[i]}
done

tar -jcf "$dst_file" -C "$(dirname $SERVER_PATH)" "${target[@]}" > /dev/null

if [ $? != 0 ]; then
    echo "Cannot create backup file."
    rm -f "$dst_file"
    exit 1
else
    echo "Backup completed. ($dst_file)"
fi

exit 0

さいごに

TeamSpeak 5っていつリリースするんですか?

参考資料