コンテンツにスキップ

デプロイとメンテナンス / バックアップと移行

この記事では、DataFlux Func データのバックアップと移行方法について主に説明します。

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

DataFlux Func はデータベースを自動的に定期的に .sql ファイルとしてバックアップし、DataFlux Func データベースのバックアップディレクトリ に保存します。

この機能は mysqldump を使用してデータベースをバックアップします。データベースに接続する MySQL ユーザーには、正常にバックアップするための十分な権限が必要です。具体的には次の権限が含まれます。

  • SELECT
  • RELOAD
  • LOCK TABLES
  • REPLICATION CLIENT
  • SHOW VIEW
  • PROCESS

自動バックアップの内容には次のものが含まれます。

  1. データベースのテーブル構造一式
  2. ログ、操作記録を除くすべてのデータ

デフォルトでは、データベースのバックアップファイルの保存場所は次のとおりです。

環境 場所
コンテナ内 /data/sqldump/
ホスト内 {インストールディレクトリ}/data/sqldump/

デフォルトでは、データベースのバックアップファイルは毎時0分に1回バックアップされ、最大7日間(合計168ファイル)保持されます。ファイル命名規則は次のとおりです。

Text Only
1
dataflux-func-sqldump-YYYYMMDD-hhmmss.sql

2. データベースのエクスポート / インポート

DataFlux Func に組み込まれている定期データベースバックアップに加えて、mysqldump を直接使用してデータをエクスポートおよびインポートすることもできます。

2.1 データのエクスポート

エクスポート操作の参考コマンドは次のとおりです。

Bash
1
docker exec {MySQL コンテナ ID} sh -c 'exec mysqldump --user=root --password="$MYSQL_ROOT_PASSWORD" --hex-blob --default-character-set=utf8mb4 --skip-extended-insert --databases dataflux_func' > {ホスト上のバックアップファイル}

2.2 データのインポート

インポート操作の参考コマンドは次のとおりです。

Bash
1
docker exec -i {MySQL コンテナ ID} sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < {ホスト上のバックアップファイル}

3. データベースの移行

システムインストール後に最初のスタンドアロン検証フェーズを通過している場合は、データベースを外部データベース(例:Alibaba Cloud RDS、Redis)に切り替える必要があります。以下の手順に従って操作してください。

外部データベースを使用する場合、MySQL のバージョンが 5.7 以上、Redis のバージョンが 5.0 以上であることを確認してください。

DataFlux Func はクラスタ構成の Redis をサポートしていません

3.1 環境の確認

外部データベースインスタンスにデータベースを作成し、以下の設定項目が満たされていることを確認してください。

  • innodb-large-prefix=on
  • character-set-server=utf8mb4
  • collation-server=utf8mb4_unicode_ci

3.2 データのインポート

上記の「データベースのバックアップ」に従って、直近の MySQL データベースのバックアップファイルを見つけ、外部データベースにインポートします。

3.3 DataFlux Func 設定の変更

DataFlux Func 設定 user-config.yaml を探し、実際の状況に応じて以下のフィールド項目を追加 / 変更してください。

YAML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# MySQL 接続設定
MYSQL_HOST    : '127.0.0.1'    # MySQL 接続アドレス
MYSQL_PORT    : 3306           # MySQL ポート番号
MYSQL_USER    : root           # MySQL ユーザー名
MYSQL_PASSWORD: ''             # MySQL パスワード
MYSQL_DATABASE: dataflux_func  # MySQL データベース名

# Redis 接続設定
REDIS_HOST    : '127.0.0.1'    # Redis 接続アドレス
REDIS_PORT    : 6379           # Redis ポート番号
REDIS_DATABASE: 5              # Redis データベース番号(推奨:他のアプリケーションとの競合を避けるため、デフォルトのデータベース 0 を使用しないでください)
REDIS_PASSWORD: ''             # Redis パスワード(パスワードがない場合は空のまま)
REDIS_USE_TLS : false          # Redis 接続 TLS サポート(true / false)

3.4 Docker Stack 設定の変更

Docker Stack 設定 docker-stack.yaml を探し、その中の MySQL と Redis に関連する部分を削除します(コメントアウトするだけで構いません)

3.5 DataFlux Func を再起動

デプロイとメンテナンス / アップグレードと再起動 に従って、DataFlux Func 全体を再起動します

4. インストールディレクトリの変更

状況によっては、DataFlux Func をインストールした元のディスク容量が不足し、インストールディレクトリを新しい大容量ディスクに変更する必要がある場合があります。

その場合は、次の操作手順に従ってインストールディレクトリを変更できます。

4.1 DataFlux Func を停止

  1. docker stack rm dataflux-func コマンドを使用して、DataFlux Func を停止します(この手順には時間がかかる場合があります)
  2. docker ps を使用して、すべてのコンテナが終了していることを確認します
  3. cp {インストールディレクトリ} {新しいインストールディレクトリ} コマンドを使用して、DataFlux Func のインストールディレクトリ全体を新しい場所にコピーします。
  4. /etc/dataflux-func を開き、そこに記録されているインストールディレクトリを新しいインストールディレクトリに変更します。
  5. Docker Stack 設定の変更

Docker Stack 設定 docker-stack.yaml を探し、すべての volumes でインストールディレクトリに関連する内容を新しいインストールディレクトリに変更します。例:

Diff
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
 version: '3.1'

 services:
   # その他の内容は省略
   server:
     image: dataflux-func.com/dataflux-func:x.y.z
     labels:
       - server
     volumes:
-      - "/usr/local/dataflux-func/data:/data"
+      - "/my-workspace/dataflux-func/data:/data"
     networks:
       - datafluxfunc
       - default
     ports:
       - "8088:8088"
     command: ./run-server.sh

 # その他の内容は省略
  1. docker stack deploy dataflux-func -c {インストールディレクトリ}/docker-stack.yaml --resolve-image never を使用して、すべてのサービスを再起動します

インストールパッケージ内のイメージファイルは既にローカルにインポートされているため、--resolve-image never パラメータを追加することで、Docker がコンテナ起動時に無意味なイメージチェックを行うのを防ぐことができます