eLabFTWのデータを移行する

eLabFTWはバックアップ・復元を用いることで、データの移行を行うことができます。例えば、次のような場合には非常に有用です。

  • 最初はお試しでWindowsのローカル環境でeLabFTWの運用を始めて、軌道に乗ったところで途中からクラウドに移行する
  • クラウドでeLabFTWを運用していたが、プロジェクトが終了したのでeLabFTWをローカル環境に移行してアーカイブしておく

このように自分のデータを自分で自由にコントロールすることができて柔軟な運用法が可能であるのが、商用の電子ラボノートとは違うeLabFTWの最大の特徴であると思います。

なお、クラウド上のデータとローカルのデータをやり取りする際には、SSHでの接続が必要になります。詳細は以下の記事をご覧ください。

クラウドで運用しているeLabFTWをローカル環境に移行する

移行元のデータの取得

ここでは、DigitalOceanのクラウド環境で運用しているeLabFTWをWindowsのローカル環境に移行する方法を説明します。まずは、以下のページを参考に、移行元のクラウド環境のバックアップを行います。

次に、クラウド上に保存されたバックアップデータをローカル環境にコピーします。この操作にはSSH接続を確立させたうえでscpコマンドを使いましょう。elabctlコマンドからバックアップを行った場合は、保存されるバックアップデータは以下の二つになるので、

  • /var/backups/elabftw/uploaded_files-yyyy-mm-dd.zip
  • /var/backups/elabftw/mysql_dump-yyyy-mm-dd.sql.gz

これを、Windowsの任意のフォルダにコピーしましょう。

例えば、IPアドレスが000.000.000.000のクラウドサーバーから、Windowsの「C:\eLabFTW」フォルダにバックアップデータをコピーする場合は次のようになります。

# 取得するバックアップのファイル名は適宜変更してください(mysql_dump-2020-09-22.sql.gzなど)
scp root@000.000.000.000:/var/backups/elabftw/mysql_dump-yyyy-mm-dd.sql.gz C:\eLabFTW
# 取得するバックアップのファイル名は適宜変更してください(uploaded_files-2020-09-22.zipなど)
scp root@000.000.000.000:/var/backups/elabftw/uploaded_files-yyyy-mm-dd.zip C:\eLabFTW

移行元のデータを移行先のローカル環境で復元する

移行元のバックアップデータを取得できたら、あとは通常のバックアップの復元方法と同じ手順でバックアップデータを復元することでeLabFTWをローカル環境に移行することができます。

まずは、あらかじめ以下のページを参考にWindowsのローカル環境にeLabFTWをインストールしておきましょう。なお、ここで取得したバックアップデータには移行元のクラウド環境における設定ファイルも含まれていますが、設定ファイルは環境ごとに異なるので引き継げません。

以下の説明では、eLabFTWを「C:\eLabFTW」にインストールしたものとして解説していきます。

アップロードファイルの復元

先ほど取得したC:\eLabFTW\uploaded_files-yyyy-mm-dd.zipにアップロードファイルが含まれています。まずは、このC:\eLabFTW\uploaded_files-yyyy-mm-dd.zipを展開してみましょう。

アップロードファイルはバックアップしたデータをコピーするだけで復元できます。「C:\eLabFTW\uploaded_files-yyyy-mm-dd\var\elabftw\web」フォルダ内のファイルがeLabFTWにアップロードされたファイルなので、これらを「C:\eLabFTW\web」フォルダ内に移動します。なお、「C:\eLabFTW\web」フォルダ内のファイルはあらかじめすべて削除しておいて下さい。

データベースの復元

同様に先ほど取得したC:\eLabFTW\mysql_dump-yyyy-mm-dd.sql.gzがデータベースファイルのバックアップになります。まずはこの.gz形式の圧縮ファイルを7-zipなどのアプリを用いて展開してみましょう。これを展開するとmysql_dump-yyyy-mm-dd.sqlというファイルが生成され、これがデータベースファイルそのものになります。

Dockerにマウント済みのフォルダにバックアップを配置しておく必要があるので、展開したバックアップファイル(mysql_dump-2020-09-22.sqlなど)をmysqlフォルダに移動しておきます。

PowerShellなどのコンソールからDockerのコンソールに入ります。

docker exec -it mysql bash

次にDocker上からMySQLのコンソールに入ります。

mysql -uroot -p

MySQLのパスワードを入力してログインしましょう。MySQLのパスワードはdocker-compose.ymlで定義されています(デフォルトはsecr3tですが、変更することが推奨されています)。

また、復元時のMySQLのパスワードは、復元先のwLabFTWにおけるパスワード(この場合はローカル環境のパスワード)が必要になります。

drop database elabftw;
create database elabftw;
use elabftw;
# バックアップファイルをDockerのコンテナ上でのパスで指定します(Windows上でのパスではありません)
# ファイル名は適宜変更してください(mysql_dump-2020-09-22.sqlなど)
source /var/lib/mysql/mysql_dump-yyyy-mm-dd.sql;
exit;

最後にもう一度exitでDockerのコンソールからも抜けておきます。

exit

バックアップ作成時と復元時とでeLabFTWのバージョンが変わっている場合は次のコマンドを実行する必要があります。

docker exec -it elabftw php bin/console db:update

以上で、クラウド環境からWindowsのローカル環境へのeLabFTWの移行が完了しました。

ローカルで運用しているeLabFTWをクラウド環境に移行する

移行元のデータのバックアップ

まずは、ローカル環境のeLabFTWのバックアップを作成します。詳細は以下の記事をご覧ください。

データベースのバックアップ

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-22.sqlなど)
docker cp mysql:dump.sql mysql_dump-yyyy-mm-dd.sql

必要に応じてここでできたバックアップを圧縮してファイルの転送容量を抑えておきましょう。

アップロードファイルのバックアップ

アップロードファイルが保存されているフォルダをそのままコピーして保存するだけでバックアップとなります。例えば、eLabFTWをC:\elabftwにインストールした場合は、C:\elabftw\webフォルダをそのままC:\elabftw\backupsフォルダ内にコピーして、zip形式で圧縮しておきます。ここでは、この圧縮ファイルをuploaded_files-yyyy-mm-dd.zipという形式の名前に変更しておきます(自分で管理できれば好きな名前で構いません)。

(この画像ではbakcupsフォルダではなく、backupフォルダになっています)

移行元のデータを移行先のクラウド環境で復元する

データをクラウド環境にアップロードする

先ほど作成した次の2つのバックアップファイルをクラウド側にコピーします。

  • mysql_dump-yyyy-mm-dd.sql
  • uploaded_files-yyyy-mm-dd.zip

例えば、Windowsの「C:\eLabFTW\backups」フォルダからIPアドレスが000.000.000.000のクラウドサーバーに先ほどのデータをコピーする場合は次のようにします(SSH接続が必要です)。

# アップロードするバックアップのファイル名は適宜変更してください(mysql_dump-2020-09-22.sqlなど)
scp C:\eLabFTW\backups\mysql_dump-yyyy-mm-dd.sql root@000.000.000.000:/var/backups/elabftw
# アップロードするバックアップのファイル名は適宜変更してください(uploaded_files-2020-09-22.zipなど)
scp C:\eLabFTW\backups\uploaded_files-yyyy-mm-dd.zip root@000.000.000.000:/var/backups/elabftw

アップロードファイルの復元

サーバー側にSSHで接続し、アップロードファイルを適切なフォルダに移動させます。なお、/var/elabftw/webにすでに何かファイルがある場合はあらかじめ削除しておくことをお勧めします(クラウドの容量を節約するため)。

# バックアップファイルが保存されているディレクトリに移動する。
cd /var/backups/elabftw

# バックアップファイルを展開する
# ファイル名は適宜変更してください(uploaded_files-2020-09-22.zipなど)
unzip uploaded_files-yyyy-mm-dd.zip


# 解凍されたファイルをそれぞれの場所にコピーする
mv web/* /var/elabftw/web

# ファイルのパーミッションを変更する
chown -R 100:101 /var/elabftw/web

データベースの復元

続いてバックアップしたデータベースファイルをインポートして復元します。この時にMySQLのデータベースのパスワードが必要になりますので、あらかじめ確認しておきましょう。コンソールでSSH接続し、以下のコマンドを実行しましょう。

nano /etc/elabftw.yml

これで設定ファイルをテキストエディタを開き、mysql → environment → MYSQL_ROOT_PASSWORDの部分の値をコピーしておきましょう。ただ、テキストエディタnanoはショートカットキーが通常のWindowsとは異なりますので、注意してください。コピーしたい範囲をマウスカーソルで選択して、「Enter」を押すとコピーされましたが、環境によって動作が違うようです。最後に「Ctrl + x」でnanoを終了させます。

コンソール上での操作が難しい場合は、一度SSH接続からログアウトしてから、以下のコマンドで設定ファイルをWindowsにダウンロードして、Windows上で操作してください。

scp root@000.000.000.000:/etc/elabftw.yml C:\eLabFTW\backups

それでは、データベースを復元してみましょう。

# バックアップファイルが保存されているディレクトリに移動する。
cd /var/backups/elabftw

# バックアップファイルをmysqlコンテナの内部にコピーする
# ファイル名は適宜変更してください(mysql_dump-2020-09-22.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-22.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のデータおよびアカウント情報・設定が復元できました。

まとめ

ここでは、Windowsのローカル環境 ←→ クラウド環境でのデータ移行法を説明しましたが、移行元のeLabFTWのバックアップを取って、そのデータを移行先のeLabFTWに復元することでどのような組み合わせでもデータの移行が可能です。もちろん、(検証はしていませんが)DigitalOceanから別のクラウドサービスに乗り換えるというのも可能だと思います。このように、データを自分ですべて管理できる当たり前の自由がeLabFTWにはあります。

関連記事・スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です