版本更新#

v1.4.2 由于引入模块启用/停用、数据源添加/删除,不支持以往的更新包更新方式。
请通过 数据备份 -> 卸载旧版本 -> 安装新版本 -> 恢复数据 来更新到最新版本。

一、更新到最新版 v1.4.2#

我们提供两种方式备份数据,为了确保数据安全,请同时使用下面两种方式备份数据。

1. 数据备份(数据文件备份)#

  • 停用当前备份恢复程序
# 检索 agent 的程序 pid,停止它
pid=`ps -ef|grep ./agent |grep -v grep|awk '{print $2}'`
kill $pid
  • 下载最新版的数据备份工具 备份工具

  • 解压下载的文件,将其中 agent 文件复制到 /opt/updateagent

提示

如果版本 >= 1.4.1,则将 agent 复制到 {安装路径}/updateagent/

  • 进入 agent 所在目录,启动 agent
#请在agent所在目录启动,不要在外层目录启动
nohup ./agent &
  • CloudQuery 系统设置-通用设置 中选择开始备份数据。
  • 将备份数据复制到 CloudQuery 安装目录之外,稍后我们会使用它恢复数据。
提示

如果版本 < 1.4.1,则备份文件在 /opt/cloudquery/backup
如果版本 >= 1.4.1,则备份文件在 {安装路径}/backup

2. 数据备份(数据容器备份)#

cloudquery-fortress 和 cloudquery-postgreSQL 两个容器保存着用户数据。只要备份这两个容器,数据就不会丢失。

  • commit 包含数据的容器:
docker commit -m "fortress_bk" cloudquery-fortress cloudquery.tencentcloudcr.com/cloudquery/community_fortress:back_up
docker commit -m "postgresql_bk" cloudquery-postgreSQL cloudquery.tencentcloudcr.com/cloudquery/community_postgres:back_up
  • 导出刚才 commit 的镜像:
docker save -o postgresql_bk.tar cloudquery.tencentcloudcr.com/cloudquery/community_postgres:back_up
docker save -o fortress_bk.tar cloudquery.tencentcloudcr.com/cloudquery/community_fortress:back_up
  • 将导出的两个文件 postgresql_bk.tar 和 fortress_bk.tar 放在 CloudQuery 安装目录以外。

3. 卸载旧版本#

  • 请确保卸载前你已经备份好数据
  • 使用下面命令删除 CloudQuery 相关文件:
#删除容器
docker ps -a | grep cloudquery | awk '{print $1}' | xargs -t -I{} docker rm -f {}
#删除镜像
docker images | grep cloudquery | awk '{print $3}' | xargs -t -I{} docker rmi -f {}
#删除docker cloudquey网络
docker network rm resource_cloudquerynet
#删除安装目录
sudo rm -rf /opt/cloudquery
#删除备份程序目录
sudo rm -rf /opt/updateagent
#删除service
rm -f /usr/lib/systemd/system/cloudquery.service
rm -rf ~/.cloudquery
rm -rf /root/.cloudquery
rm -f /usr/lib/systemd/system/cloudquery_agent.service
提示

如果版本 >= 1.4.1,则还需要删除如下文件:

rm -rf {CloudQuery安装目录}

4. 安装新版本#

  • 下载最新版本 v1.4.2

  • 解压后执行安装包中的 install 程序,并根据提示安装。

提示

安装包解压路径和安装路径不能相同,默认安装路径为/opt/cloudquery。 推荐解压安装包到/tmp 目录下,安装完即可删除。

5. 恢复数据#

  • 将第一步中的备份文件 userData.tar.gz 放到 {CloudQuery 安装路径}/backup/ 文件夹中(没有 backup 文件夹则创建)。
提示

不是第二步中的容器 fortress_bk.tar 和 postgresql_bk.tar 备份文件

  • 在 CloudQuery 页面上 系统设置-通用设置-选择恢复副本 进行数据恢复。

6. 完成#

  • 查看服务是否正常
  • 查看数据是否恢复

二、安装新版本遇数据恢复异常#

如果您恢复数据后发现数据异常或丢失,请使用刚才的容器备份文件 fortress_bk.tar 和 postgresql_bk.tar 进行恢复。

  • 删除当前新版本的数据容器和镜像:
docker rm -f cloudquery-fortress
docker rm -f cloudquery-postgreSQL
docker rmi cloudquery.tencentcloudcr.com/cloudquery/community_fortress:v1.3.0.2020121877
docker rmi cloudquery.tencentcloudcr.com/cloudquery/community_postgres:v1.4.0.20210701100
  • 导入刚才的备份容器文件:
docker load < postgresql_bk.tar
docker load < fortress_bk.tar
#下面的命令中请替换导入的id,id会在上面两条命令执行后得到,或者通过docker images 查看id
docker tag [替换成导入的fortress镜像ID] cloudquery.tencentcloudcr.com/cloudquery/community_fortress:v1.3.0.2020121877
docker tag [替换成导入的postgre镜像ID] cloudquery.tencentcloudcr.com/cloudquery/community_postgres:v1.4.0.20210701100
  • 重启 CloudQuery ,重启后将会使用备份的数据容器,数据将会和之前完全一致。
# 进入安装目录
./cloudquery-stop.sh
./cloudquery-start.sh
note

如果旧版本 < 1.4.0,则需要在 cloudquery-postgreSQL 容器中执行:

create table cq_task_info
(
id bigserial not null
constraint cq_task_info_pk
primary key,
task_id varchar(128) not null,
status integer default 0 not null,
command varchar(2048),
user_id varchar(64),
create_at timestamp(0) with time zone,
update_at timestamp(0) with time zone,
tool_id varchar(64),
file_path jsonb,
worker varchar(1024)
);
alter table cq_task_info
owner to postgres;
create table cq_task_log
(
id bigserial not null
constraint cq_task_log_pk
primary key,
logs jsonb,
task_id varchar(128) not null,
create_at timestamp(0) with time zone,
update_at timestamp(0) with time zone
);
alter table cq_task_log
owner to postgres;

如果版本 < 1.3.5 ,需要在 cloudquery-postgreSQL 容器中执行:

CREATE SEQUENCE extrat_audit_record_id
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 2147483647
CACHE 1;
ALTER SEQUENCE extrat_audit_record_id
OWNER TO postgres;
ALTER TABLE extrat_audit_record ADD id bigint;
ALTER TABLE extrat_audit_record ALTER COLUMN id SET DEFAULT nextval('extrat_audit_record_id');
CREATE UNIQUE INDEX extrat_audit_record_id_index ON extrat_audit_record (id);
ALTER TABLE extrat_audit_record ALTER column execute_sql Type varchar USING (execute_sql::varchar);
ALTER TABLE extrat_audit_record ADD db_name varchar(255);
ALTER TABLE extrat_audit_record ADD connection_name varchar(255);
ALTER TABLE extrat_audit_record ADD affect_rows bigint;