景县做个油管的网站怎么做,不花钱的免费永久云服务器平台,找网络公司建网站每年收维护费,国外做黄漫的网站座右铭#xff1a;《坚持有效输出#xff0c;创造价值无限》 最近想了解下canal#xff0c;自行搭建并完成数据同步。经过了几天的踩坑之旅#xff0c;今天终于搭建成功了。 环境#xff1a;canalv1.1.5、MySQL8.0、JDK1.8 安装MySQL
创建存放目录
mkdir /docker-localm… 座右铭《坚持有效输出创造价值无限》 最近想了解下canal自行搭建并完成数据同步。经过了几天的踩坑之旅今天终于搭建成功了。 环境canalv1.1.5、MySQL8.0、JDK1.8 安装MySQL
创建存放目录
mkdir /docker-localmkdir /docker-local/mysql8之前安装过MySQL但是没有配置conf使用canal需要指定一个serveid
docker run --privilegedtrue -it \-p 3306:3306 --name mysql \-e MYSQL_ROOT_PASSWORD123456 \-v /docker-local/mysql8/conf:/etc/mysql/conf.d \-v /docker-local/mysql8/data:/var/lib/mysql \-d mysql:8.0.26编辑my.cnf
cd /docker-local/mysql8/confvim my.cnf[mysqld]
server-id1保存重启mysql
docker restart mysql创建用户
创建用户方便canal使用
CREATE USER canal IDENTIFIED BY canal;GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO canal%;FLUSH PRIVILEGES;注意安装canal还需要开启binlog因为mysql8.0默认是开启的并且是row模式所以我这里没有其他操作。
安装canal
创建存放目录
mkdir docker-local/canalcd /docker-local/canal/拉取镜像
docker pull canal/canal-server:v1.1.5运行
docker run --name canal -d canal/canal-server:v1.1.5复制容器中的配置文件到本地
docker cp canal:/home/admin/canal-server/conf/canal.properties /docker-local/canaldocker cp canal:/home/admin/canal-server/conf/example/instance.properties /docker-local/canal修改instance.properties
vim instance.properties停止
docker stop canal docker rm canal重新运行
docker run --name canal -p 11111:11111 \
-v /docker-local/canal/instance.properties:/home/admin/canal-server/conf/example/instance.properties \
-v /docker-local/canal/canal.properties:/home/admin/canal-server/conf/canal.properties \
-v /docker-local/canal/log/:/home/admin/canal-server/logs/ \
-d canal/canal-server:v1.1.5查看启动日志
cat log/canal/canal.logcat /docker-local/canal/log/example/example.log遇到的问题
connect /192.168.64.139:3306 failure
Caused by: java.io.IOException: connect /192.168.64.139:3306 failure
发现canal连不上mysql
修改firewalld配置文件
vim /etc/firewalld/zones/public.xml增加3306端口
port protocoltcp port3306/重启firewalld
systemctl restart firewalld再次查看日志 部署成功
问题原因
在centos7上部署docker容器其网络模式采用的是bridger模式。
启动docker时docker进程会创建一个名为docker0的虚拟网桥用于宿主机与容器之间的通信。当启动一个docker容器时docker容器将会附加到虚拟网桥上容器内的报文通过docker0向外转发。
如果docker容器访问宿主机那么docker0网桥将报文直接转发到本机报文的源地址是docker0网段的地址。而如果docker容器访问宿主机以外的机器docker的SNAT网桥会将报文的源地址转换为宿主机的地址通过宿主机的网卡向外发送。
当docker容器访问宿主机时如果宿主机服务端口会被防火墙拦截无法连通宿主机出现No route to host的错误。
而访问宿主机所在局域网内的其他机器由于报文的源地址是宿主机ip因此不会被目的机器防火墙拦截所以可以访问。
也可以开放对应的端口
firewall-cmd --zonepublic --add-port3306/tcp --permanent
firewall-cmd --reload卸载canal
docker stop canal docker rm canalrm -rf /docker-local/canal这里我一直认为我本地可以连接到mysql就不用开启端口了。 至此就搭建完成了。