実験データはラボの魂とも呼べるもので、それを失った時の損失は計り知れません。なので、必ずバックアップを取っておきましょう。バックアップを取ることができるというのは紙の実験ノートにはないデジタルデータの強みでもあります。
なお、eLabFTWのバックアップ方法は公式マニュアルにも記載されていますので、こちらもご参照ください。
- How to backup (公式マニュアル)
eLabFTWのデータ構造
eLabFTWのデータは以下の2つのディレクトリ(フォルダ)から構成されます。
- データベース:ラボノートのデータ本体
- アップロードファイル:アップロードした画像やファイル
これに加えて、設定ファイル(elabftw.yml もしくは docker-compose.yml)からeLabFTWは構成されています。アップロードファイルや設定ファイルはそのままコピーするだけで新たな環境に引き継ぐことができますが、データベースはMySQLとなっており正しくエクスポート/インポートの作業をする必要があるので注意が必要です。
また、それぞれのディレクトリ(フォルダ)と設定ファイルの格納されている場所はインストール方法によって以下のように異なっています。
Linuxサーバーにインストールした場合
elabctlを用いてインストールした場合(当サイトで説明している方法)のパスは以下のようになります。
- データベース:
/var/elabftw/mysql
- アップロードファイル:
/var/elabftw/web
- 設定ファイル:
/etc/elabftw.yml
なお、このデータベースやアップロードファイルのパスは設定ファイル(/etc/elabftw.yml
)内にて定義されています。
Windowsのローカル環境にインストールした場合
Windowsのローカル環境にインストールするときは「docker-compose.yml」を好きなフォルダに配置し、それに従ってDockerのコンテナとしてeLabFTWがインストールされます。このサイトで説明している通りにインストールすると、このdocker-compose.ymlを配置したフォルダの直下に以下の3つが配置されます。
- データベース:
./mysql
- アップロードファイル:
./web
- 設定ファイル:
./docker-compose.yml
なお、データベースやアップロードファイルの場所はdocker-compose.ymlで定義されていますので、これを独自に書き換えた場合は各自で読み替えください。
eLabFTWのバックアップ
Linuxサーバーにインストールした場合
バックアップを行う
当サイトで説明している方法でelabctlを用いてインストールした場合は、次の通り簡単に実行することができます。SSHやブラウザ上のコンソール(DigitalOceanの場合)からLinuxサーバーに接続し、以下のコマンドを実行してみましょう。
elabctl backup
バックアップデータは /var/backups/elabftw
ディレクトリに以下の2つのファイルとして保存されます。
- データベース:mysql_dump-yyyy-mm-dd.sql.gz
- アップロードファイル・設定ファイル:uploaded_files-yyyy-mm-dd.zip
例えば2020/9/13にバックアップを行った場合は、「mysql_dump-2020-09-13.sql.gz」と「uploaded_files-2020-09-13.zip」になります。
また、設定ファイル(elabftw.yml)もアップロードファイルと一緒にuploaded_files-yyyy-mm-dd.zipに格納されます。
定期的なバックアップのスケジュールを設定する
自動で定期的にバックアップを行う場合はサーバー上のcronで定期的にバックアップするように設定することもできます。コンソール上で以下のコマンドを実行し、crontabをテキストエディタのnanoで開きます。
export EDITOR=nano ; crontab -e
nanoはLinuxの標準的なテキストエディタの一つでvimよりは初心者に使いやすいインターフェースが特徴となっています。基本的にはメモ帳などと同じような感覚で使って問題ありません。ただし、ショートカットキーは異なっており、画面の一番下に出ているものがショートカットキーの一覧となっています。例えば、「^X」となっているのは「Ctrl + x」で終了という意味です。
それでは、crontabの一番最後に以下を付け加えて保存しましょう。
00 04 * * * elabctl backup
入力が終わったら、「Ctrl + x」でnanoを終了します。保存するかどうか聞かれるので、Yesならyを入力します。これで毎日4時に自動的にバックアップを行う設定ができました。
Windowsのローカル環境にインストールした場合
ここでは、C:\elabftw\backups
フォルダにバックアップを作成するものとして説明します。
データベースのバックアップ
PowerShellなどのコンソールで以下を実行します。
# 予めバックアップを保存したい場所に移動しておきます
cd C:\elabftw\backups
# MySQLのバックアップを作成します
# デフォルトのパスワードとしていますがdocker-compose.ymlの内容に合わせて変更してください(password=〇〇の部分をMYSQL_ROOT_PASSWORDの値にする)
docker exec -it mysql bash -c 'mysqldump --user=elabftw --password=secr3t --result-file=dump.sql --no-tablespaces elabftw'
# 作成したバックアップをDockerのコンテナからホストにコピーします
# バックアップを行う日に応じてファイル名を変えてください(mysql_dump-2020-09-13.sqlなど)
docker cp mysql:dump.sql mysql_dump-yyyy-mm-dd.sql
アップロードファイルのバックアップ
アップロードファイルが保存されているフォルダをそのままコピーして保存するだけでバックアップとなります。例えば、eLabFTWをC:\elabftw
にインストールした場合は、C:\elabftw\web
フォルダをそのままC:\elabftw\backups
フォルダ内にコピーして、容量を抑えるためにzip形式で圧縮しておきましょう。
圧縮してできたファイルの名前をuploaded_files-2020-09-13.zipなどのように変更しておきましょう。
バックアップの復元
Linuxサーバーにインストールした場合
アップロードファイル・設定ファイルの復元
アップロードファイルはバックアップしたデータをコピーするだけで復元できます。SSHやブラウザ上のコンソール(DigitalOceanの場合)からLinuxサーバーに接続し、以下のコマンドからuploaded_files-2020-09-13.zipを復元してみましょう。
# バックアップファイルが保存されているディレクトリに移動する。
cd /var/backups/elabftw
# バックアップファイルを解凍する
# ファイル名は適宜変更してください(uploaded_files-2020-09-13.zipなど)
unzip uploaded_files-yyyy-mm-dd.zip
# 解凍されたファイルをそれぞれの場所にコピーする
mv var/elabftw/web/* /var/elabftw/web
mv etc/elabftw.yml /etc/elabftw.yml
# ファイルのパーミッションを変更する
chown -R 100:101 /var/elabftw/web
chmod 600 /etc/elabftw.yml
なお、ルートディレクトリ上で次のように実行するのでも構いません。ルートディレクトリでバックアップを解凍すると、自動的にそれぞれ正しい場所に解凍されます。
# バックアップファイルを解凍する
# ファイル名は適宜変更してください(uploaded_files-2020-09-13.zipなど)
unzip /var/backups/elabftw/uploaded_files-yyyy-mm-dd.zip
# ファイルのパーミッションを変更する
chown -R 100:101 /var/elabftw/web
chmod 600 /etc/elabftw.yml
データベースの復元
続いてバックアップしたデータベースファイルをインポートして復元します。この時にMySQLのデータベースのパスワードが必要になりますので、あらかじめ確認しておきましょう。SSHやブラウザ上のコンソール上から以下のコマンドを実行しましょう。
nano /etc/elabftw.yml
これで設定ファイルをテキストエディタを開き、mysql → environment → MYSQL_ROOT_PASSWORDの部分の値を記録しておきます。テキストエディタnanoはショートカットキーが通常のWindowsとは異なりますので、注意してください。「Alt + 6」がコピーのショートカットですが、ブラウザ上のコンソールからはうまく動作しませんでした(その場合はパスワードの値をメモ帳などに手入力で記録しておいてください)。最後に「Ctrl + x」でnanoを終了させます。
それでは、データベースを復元してみましょう。
# バックアップファイルが保存されているディレクトリに移動する。
cd /var/backups/elabftw
# バックアップファイルを解凍する
# ファイル名は適宜変更してください(mysql_dump-2020-09-13.sql.gzなど)
gunzip mysql_dump-yyyy-mm-dd.sql.gz
# バックアップファイルをmysqlコンテナの内部にコピーする
# ファイル名は適宜変更してください(mysql_dump-2020-09-13.sqlなど)
docker cp mysql_dump-yyyy-mm-dd.sql mysql:/
# Dockerのmysqlコンテナのコンソールを開きます
docker exec -it mysql bash
# MySQLのデータベースにログインします。
# パスワードの入力を求められたら、先ほど取得したものを入力します。
mysql -uroot -p # login to mysql prompt
これでMySQLのコンソールに入れました。以下のコマンドにおいてもmysql_dump-yyyy-mm-dd.sql
のファイル名は適宜変更してください(mysql_dump-2020-09-13.sql
など)
drop database elabftw; # delete the brand new database
create database elabftw; # create a new one
use elabftw; # select it
source mysql_dump-yyyy-mm-dd.sql; # バックアップファイルをインポート
exit;
最後にDockerからも抜けておきましょう。
exit
なお、バックアップ作成時と復元時とでeLabFTWのバージョンが変わっている場合は次のコマンドを実行する必要があります。
docker exec -it elabftw php bin/console db:update
これで、eLabFTWのデータおよびアカウント情報・設定が復元できました。
バックアップの復元が完了したら/var/backups/elabftw
ディレクトリに保存したバックアップファイルは削除してしまっても問題ありません。
Windowsのローカル環境にインストールした場合
アップロードファイルの復元
アップロードファイルはバックアップしたデータをコピーするだけで復元できます。C:\elabftw\web
フォルダを、uploaded_files-yyyy-mm-dd.zipを展開してできたwebフォルダと入れ替えます。
データベースの復元
Dockerにマウント済みのフォルダにバックアップを配置しておく必要があるので、作成したバックアップファイル(ここでは mysql_dump-2020-09-13.sql)をmysqlフォルダにコピーしておきます。
PowerShellなどのコンソールからDockerのコンソールに入ります。
docker exec -it mysql bash
次にDocker上からMySQLのコンソールに入ります。
mysql -uroot -p
MySQLのパスワードを入力してログインしましょう。MySQLのパスワードはdocker-compose.ymlで定義されています(デフォルトはsecr3tですが、変更することが推奨されています)。
drop database elabftw;
create database elabftw;
use elabftw;
source /var/lib/mysql/mysql_dump-2020-09-13.sql; #バックアップファイルをDockerのコンテナ上でのパスで指定します(Windows上でのパスではありません)
exit;
最後にもう一度exitでDockerのコンソールからも抜けておきます。
exit
なお、バックアップ作成時と復元時とでeLabFTWのバージョンが変わっている場合は次のコマンドを実行する必要があります。
docker exec -it elabftw php bin/console db:update
これで、eLabFTWのデータおよびアカウント情報が復元できました。なお、設定ファイルの復元をする場合は、docker-compose.ymlをバックアップしたものに書き換えるだけで構いません。
バックアップの復元が終わったら、mysqlフォルダにコピーしたバックアップファイルバックアップファイル(ここでは mysql_dump-2020-09-13.sql)は削除してしまって構いません。
コメント