使用现在最新的代码然后按照docker目录下面的方式打包出来的是否能支持mysql8呢?
原提问者Github用户 navist2020
canal 1.1.6 是支持 mysql 8.0 的,不过 canal 的 release 包好像有 bug,可能还是需要用最新的 snapshot 版
原回答者Github用户 whhe
根据官方文档所述,otter-all 镜像默认使用的是 MySQL 5.6 ,如果您需要使用 MySQL 8,可以通过以下步骤进行更改:
先拉取 otter-all 镜像: docker pull otterworks/otter-all 下载并修改配置文件,在 $OTTER_HOME/server/conf/ 下找到 canal.properties 和 otter.properties 两个文件,修改其中的 MySQL 配置。 a. 修改 canal.properties 中的 Canal 配置:
canal.instance.master.address=127.0.0.1:3306 canal.instance.dbUsername=用户名 canal.instance.dbPassword=密码 canal.instance.defaultDatabaseName=otter 其中 canal.instance.master.address 参数为 MySQL 8 的地址,canal.instance.dbUsername 和 canal.instance.dbPassword 是连接 MySQL8 数据库的用户名和密码。
b. 修改 otter.properties 中的 Pipeline 配置:
otter.pipeline.home=/otter/otter-all-4.2.16/pipelines
otter.batch.size=1000
otter.channel.flow.size=1000
otter.channel.compressThreshold=256
otter.channel.transactionTimeout=30
otter.manager.embed=false
otter.manager.rest=true
otter.manager.rest.ip=0.0.0.0
otter.manager.rest.port=8090
otter.mysql.dumpmodel=ddl otter.mysql.ddl=false MySQL 8.0 的 decimal128 类型需要 otter.mysql.dumpmodel 设置为 ddl。
编写 Dockerfile 自定义构建 你可以使用 ubuntu 镜像来自定义构建,例如:
FROM ubuntu:16.04
RUN echo
"deb http://archive.ubuntu.com/ubuntu/ xenial main restricted\n"
"deb http://archive.ubuntu.com/ubuntu/ xenial-security main restricted\n"
"deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted\n"
"deb http://archive.ubuntu.com/ubuntu/ xenial universe\n"
"deb http://archive.ubuntu.com/ubuntu/ xenial-security universe\n"
"deb http://archive.ubuntu.com/ubuntu/ xenial-updates universe\n"
"deb http://archive.ubuntu.com/ubuntu/ xenial multiverse\n"
"deb http://archive.ubuntu.com/ubuntu/ xenial-security multiverse\n"
"deb http://archive.ubuntu.com/ubuntu/ xenial-updates multiverse\n"\
/etc/apt/sources.list
RUN apt-get update && apt-get install -y
openjdk-8-jre-headless
wget
unzip
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN apt-get update && apt-get install -y locales
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
&& locale-gen zh_CN.UTF-8
&& dpkg-reconfigure locales
&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LANG=zh_CN.UTF-8
LANGUAGE=en_US:en
LC_ALL=zh_CN.UTF-8
RUN mkdir /otter && cd /otter
&& wget https://github.com/alibaba/otter/releases/download/4.2.16/otter-all-4.2.16.tar.gz
&& tar zxvf otter-all-4.2.16.tar.gz
ADD canal.properties $OTTER_HOME/server/conf/canal/ ADD otter.properties $OTTER_HOME/server/conf/ ADD start.sh $OTTER_HOME/bin/
WORKDIR $OTTER_HOME/bin
CMD ["sh", "start.sh"] 这个 Dockerfile 设置了 Ubuntu 16.04 作为操作系统,并下载安装了 JDK 和 wget 等必要工具,同时设置中文环境。然后下载 Otter-all 包,将配置文件和启动脚本添加到镜像中,最后设置工作目录并启动 Otter 服务。
构建新镜像 使用以下命令将 Dockerfile 构建为新的镜像: docker build -t my-otter . 启动新镜像 使用以下命令启动新构建的镜像: docker run -i -t my-otter 在启动后,您应该可以看到启动日志输出,表示 Otter 服务正在运行,并且已经设置了 MySQL 8 数据库。
总之,您可以根据上述步骤自定义构建 Otter-all 镜像,以支持 MySQL 8。我们不能确保自定义构建的 Docker 容器与 Otter-all 兼容,但这些步骤应该会提供一些帮助。
根据我所了解到的情况,Otter 支持 MySQL 8.0。不过,需要注意的是,Otter 官方提供的 otter-all 镜像可能不支持 MySQL 8.0,因此你需要自己构建支持 MySQL 8.0 的镜像。
你可以按照以下步骤构建支持 MySQL 8.0 的 Otter 镜像:
克隆最新的 Otter 代码:
git clone https://github.com/alibaba/otter.git
进入 docker
目录:
cd otter/docker
修改 Dockerfile
文件,在 FROM
行后添加以下内容:
RUN wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm \
&& rpm -ivh mysql80-community-release-el7-3.noarch.rpm \
&& yum install -y mysql-community-client
这将安装 MySQL 8.0 客户端。
构建镜像:
docker build -t my-otter .
这将构建名为 my-otter
的 Otter 镜像。
运行容器:
docker run -d -p 8080:8080 -p 1099:1099 -p 2181:2181 -p 2888:2888 -p 3888:3888 my-otter
这将在后台运行名为 my-otter
的容器,并将端口映射到本地。
请注意,这只是一个简单的示例,你可能需要进行其他修改才能满足你的需求。
如果您使用最新的 Otter 代码并自行构建 Docker 镜像,确保 otter.properties 配置文件中的 MySQL 驱动程序版本已更新为支持 MySQL 8 的版本(例如 com.mysql.cj.jdbc.Driver),则可以支持 MySQL 8 数据库的同步。
具体操作步骤如下:
下载最新的 Otter 代码,进入代码目录。
修改 otter.properties 配置文件,将 MySQL 驱动程序版本修改为支持 MySQL 8 的版本(例如 com.mysql.cj.jdbc.Driver)。
使用 Maven 命令编译代码并打包成 Otter-all.jar 文件。
将 Otter-all.jar 文件和 otter.properties 配置文件放在同一个目录下。
使用 Dockerfile 构建 Docker 镜像,将 Otter-all.jar 文件和 otter.properties 配置文件复制到 Docker 镜像中。
在 Kubernetes 中创建一个 Deployment,使用自定义的 Otter 镜像作为容器的镜像。
在 Deployment 中使用 ConfigMap 或者 Secret 等方式,将 otter.properties 配置文件挂载到容器中。
启动 Deployment,等待容器启动成功之后,使用 otterctl 命令或者 Web 界面配置同步任务,将 MySQL 8 数据库中的数据同步到目标数据库中。
一般情况下,在最新的代码和Docker环境下,可以支持MySQL 8。你需要确保你的代码和Docker配置同时支持MySQL 8,并正确地进行MySQL 8的安装和配置。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。