跳转至

部署和维护 / 备份和迁移

本文主要介绍如何备份和迁移 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/

默认情况下,数据库备份文件每小时整点备份一次,最多保留 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. 迁移数据库

如系统安装后通过了最初的单机验证阶段,需要将数据库切换至外部数据库(如:阿里云 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确认所有容器都已经退出

4.2 移动安装目录

使用cp {安装目录} {新安装目录}命令,将 DataFlux Func 的整个安装目录拷贝至新的位置。

4.3 修改安装目录记录

打开/etc/dataflux-func,将其中记录的安装目录更改为新的安装目录。

4.4 修改 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: pubrepo.jiagouyun.com/dataflux-func/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 在启动容器时进行无意义的镜像检查