版本升级(Docker)
本文主要介绍如何在 Linux/MacOS 操作系统下更新 CloudCanal Docker 版。
如果您从未安装过 CloudCanal Docker 版,请参考 CloudCanal 全新安装(Docker Linux/MacOS)。
升级步骤
下载安装包
登录 官方网站,点击 下载私有部署版 按钮。
解压缩新安装包
在相同目录下解压覆盖原来的文件。
7z x cloudcanal.7z -o./cloudcanal_home
进入安装脚本目录
进入 Docker 安装脚本目录。
cd cloudcanal_home/install_on_docker
升级容器
停止正在运行的容器。
## CentOS / Rhel / Ubuntu / MacOS
./stop.sh
## Windows
stop.bat更新到新版本并自动运行。
## CentOS / Rhel / Ubuntu / MacOS
./upgrade.sh
## Windows
upgrade.bat
确认已升级
执行以下命令查看 CloudCanal 相关容器已升级到新版本。
docker ps | grep cloudcanal
常见问题
数据是否要备份?
若有以下情况,建议备份:
- 对控制台 (Console) 或者任务运行机器 (Sidecar) 做过一些特殊配置(统一告警配置、通信超时参数等)。
- 有重要的任务运行日志需要保留。
如何进行备份?
执行 scripts 目录下脚本 备份配置 和 任务运行日志。
备份存放在 …/scripts/console_backup 和 …/scripts/sidecar_task_backup 两个目录中。
容器重要配置和日志路径:
### console config and logs
/home/clougence/cloudcanal/console/conf
/home/clougence/logs
### sidecar config and logs
/home/clougence/cloudcanal/sidecar/conf
/home/clougence/logs
CloudCanal 元数据库结构不一致怎么办?
解压目录下 ddl_history.sql 文件,检查 当前版本 和 升级版本 是否存在 系统元数据 变更。
如有变更,在 Docker 宿主机上使用命令或客户端登录元数据库 (cloudcanal_console),执行相关 SQL 进行变更。
mysql -uclougence -h127.0.0.1 -P25000 -p123456
例如:当前版本为 1.0.3。在新包 ddl_history.sql 中看到 1.0.4 版本及往后的变更如下图。按序执行这些变更到元数据库即可。
特殊版本怎么处理?
2.2.6.12 之后新增自定义告警接口,在控制台 (Console) 容器的
/home/clougence/cloudcanal/console/conf/business-output.properties
中新增配置。console.config.alert.custom.alerturl=
2.3.0.11(及之前)升级到 2.3.1.0(及之后),需要先执行
uninstall.sh
,再执行install.sh
。./uninstall.sh
./install.sh2.3.1.0(及之前)升级到该版本之后的版本,需要备份再恢复元数据库。
// enter old mysql container and backup and download
docker exec -it cloudcanal-mysql /bin/bash
mysqldump -uclougence -p123456 --single-transaction -R -E --databases cloudcanal_console >/tmp/cloudcanal_console.sql
// enter new mysql container and copy backup to container
docker cp ./cloudcanal_console.sql cloudcanal-mysql:/tmp
docker exec -it cloudcanal-mysql /bin/bash
// login meta database
mysql -uclougence -p123456
// recover from backup
mysql> drop database cloudcanal_console;
Query OK, 59 rows affected (0.17 sec)
mysql> source /tmp/cloudcanal_console.sql;