docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中(一)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDSClaw,2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中


🚀 本文提供的指令完全可以按顺序逐一执行,已进行了多次测试。因此如果你是直接按照我本文写的指令一条条执行的,而非自定义修改过,执行应当是没有任何问题的。


🚀 本文讲述:使用docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中。

❗️ ❗️❗️ 注意事项(如果你在运行命令时遇到问题一定看下这里):

  • 容器启动顺序:mysql、es、canal、adapter
  • 按照本文的命令启动容器正常情况下是没有问题的,如果遇到启动不了的情况,可以通过 sudo docker logs 容器名 查看日志信息,我遇到的一个启动不了的情况是日志报错为内存不足,这与你自身的服务器有关,因此在实操时我使用了两台虚拟机进行操作。如果你的服务器或本地虚拟机内存大小在2.5G以上应该使用一台就够了。
  • 很多容器中都只有 vi 命令,而没有 vim 命令,关于 vim 命令的下载我试过很多次都没有成功,并且有些容器的 vi 命令版本比较老导致使用起来一件很折磨人的事情,和vim有所不同。因此在本文中的容器内的配置文件的修改,我的建议是复制一份配置文件到你的windows电脑进行修改,然后删除原配置文件新建一份同名文件,把你修改后的文件内容拷贝上去即可。
  • 你在自定义编写es_demo_collect.ymles_demo_collect.yml文件的 SQL 语句时需要注意(如果直接按照我写的来是没有问题的):
  1. 不要加顿号,例如:
select b.`user_id`
...
on b.`user_id`=u.`id`
  1. 上述sql中的顿号必须全部删除,即不能出现顿号。应该改为如下:
select b.user_id
...
on b.user_id=u.id
  1. 外连接时必须将连接条件字段放入查询中,例如 on b.user_id = u.id ,这里以 b.user_id/u.id 作为了连接条件,,则在 select 中必须查询 b.user_id 或 u.id 。
  • 你需要让这些防火墙端口处于开放状态:3306,9200,9300,11111,8081

1.docker安装

1.1 基于ubuntu

# 1.更新软件包索引
sudo apt update
# 2.安装必要的依赖软件,来添加一个新的 HTTPS 软件源,遇到 y/N 输入y
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# 3.使用下面的 curl 导入源仓库的 GPG key
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 4.将 Docker APT 软件源添加到你的系统
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 5.更新软件包索引
sudo apt update
# 6.安装 Docker 最新版本,遇到 Y/n 输入y
sudo apt install docker-ce docker-ce-cli containerd.io
# 7.安装完成,查看docker版本
sudo docker --version
# 8.设置docker自启动
sudo systemctl enable docker

1.2 基于centos7

# 1.安装 docker
yum install docker
# 2.检验安装是否成功
docker --version
# 3.启动
systemctl start docker
# 4.设置为自启动
systemctl enable docker
# 5.换镜像源
sudo vim /etc/docker/daemon.json
#内容如下:
{
 "registry-mirrors": ["https://m9r2r2uj.mirror.aliyuncs.com"]
}
# 6.重启
sudo service docker restart
# 7.列出镜像
docker images
# 8.查看运行进程
docker ps

2.数据卷统一管理

# 1.根目录下创建waveedu文件夹
sudo mkdir /wave
# 2.移动到wave文件夹
cd /wave

3.安装mysql

# 1.拉取镜像
sudo docker pull mysql:5.7.36
# 2.创建容器,密码设置为123456,启动mysql
sudo docker run --name mysql5736 \
-v /wave/mysql/log:/var/log/mysql \
-v /wave/mysql/data:/var/lib/mysql \
-v /wave/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 \
-d mysql:5.7.36
# 3.查看容器状态,可以看到一个容器名称为mysql5736的容器在运行
sudo docker ps
# 4./wave/mysql/conf 目录(数据卷目录)中新建 my.cnf 文件,并在其中写入如下内容
sudo vim /wave/mysql/conf/my.cnf
# 表示客户端的默认字符集为utf8。
[client]
default_character_set=utf8
# 表示MySQL命令行客户端的默认字符集为utf8。
[mysql]
default_character_set=utf8
# 表示MySQL服务器的默认字符集为utf8,并且 character_set_server 设置MySQL服务器默认使用utf8字符集。
[mysqld]
character_set_server=utf8
[mysqld]
#binlog setting
# 开启logbin
log-bin=mysql-bin
# binlog日志格式
binlog-format=ROW
# mysql主从备份serverId,canal中不能与此相同
server-id=1
# 5.重启容器
sudo docker restart mysql5736
# 6.进入容器终端
sudo docker exec -it mysql5736 /bin/bash
# 7.登录mysql
mysql -uroot -p123456
# 8.查看字符编码是否为utf8
show variables like 'character%';
# 显示信息如下说明配置ok
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
# 9.展示binlog日志文件
show master status; 

# 10.重启日志
reset master;
# 11.查看binlog文件格式
show variables like 'binlog_format';

如果显示信息和上面一致,说明MySQL安装与配置成功,退出容器终端。

# 12.退出mysql
exit
# 13.退出容器终端
exit

4.安装elasticsearch

# 1.拉取镜像
sudo docker pull elasticsearch:7.16.2
# 2.创建容器并启动
sudo docker run --name='es7162' \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-d elasticsearch:7.16.2
# 3.在运行的es7162容器中打开一个新的终端会话
sudo docker exec -ites es7162 /bin/bash
# 4.删除原配置文件
rm -rf config/elasticsearch.yml
# 5.新建配置文件
vi config/elasticsearch.yml
# 配置文件内容为如下
cluster.name: fox-es
network.host: 0.0.0.0
node.name: node-1
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
# 6.退出容器会话
exit
# 7.重启es
sudo docker restart es7162

浏览器测试:http://【服务器地址】:9200

注意防火墙需要开放端口

5.es安装ik中文分词器

5.1 在线安装

# 1.在运行的es7362容器中打开一个新的终端会话
sudo docker exec -ites es7162 /bin/bash
# 2.在线下载(服务器网速不好下载会比较缓慢或下载失败,则建议使用离线安装的方式)
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.2/elasticsearch-analysis-ik-7.16.2.zip
# 3.退出容器会话
exit
# 4.重启es
sudo docker restart es7162
# 5.查看日志是否加载ik分词器成功
sudo docker logs es7162

5.2 离线安装

首先打开这个链接:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.16.2,把分词器插件下载下来

# 1.把下载的 zip 上传至linux服务器的 wave 文件夹下
# 2.把插件复制到容器内
sudo docker cp elasticsearch-analysis-ik-7.16.2.zip es7162:/usr/share/elasticsearch/plugins
# 3.进入容器
sudo docker exec -it es7162 /bin/bash
# 4.切换目录
cd /usr/share/elasticsearch/plugins/
# 5.创建ik目录
mkdir ik
# 6.解压zip文件
unzip elasticsearch-analysis-ik-7.16.2.zip -d ik
# 7.移除zip文件
rm -rf elasticsearch-analysis-ik-7.16.2.zip
# 8.退出容器会话
exit
# 9.重启es
sudo docker restart es7162

使用 Apipost7 测试路径:【POST方式】 http://【linux服务器IP】:9200/_analyze

// 传参如下
{
    "analyzer": "ik_smart",
    "text": "java名字由来"
}

出现如上信息说明ik分词器配置成功。



相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
6月前
|
Ubuntu 关系型数据库 MySQL
MySQL源码编译安装
本文详细介绍了MySQL 8.0及8.4版本的源码编译安装全过程,涵盖用户创建、依赖安装、cmake配置、编译优化等步骤,并提供支持多Linux发行版的一键安装脚本,适用于定制化数据库部署需求。
1697 4
MySQL源码编译安装
|
6月前
|
Ubuntu 关系型数据库 MySQL
MySQL二进制包安装
本文详细介绍了在多种Linux系统上通过二进制包安装MySQL 8.0和8.4版本的完整过程,涵盖用户创建、glibc版本匹配、程序解压、环境变量配置、初始化数据库及服务启动等步骤,并提供支持多发行版的一键安装脚本,助力高效部署MySQL环境。
938 4
MySQL二进制包安装
|
6月前
|
安全 关系型数据库 MySQL
MySQL包安装 -- SUSE系列(离线RPM包安装MySQL)
本文详细介绍在openSUSE系统上通过离线RPM包安装MySQL 8.0和8.4版本的完整步骤,包括下载地址、RPM包解压、GPG密钥导入、使用rpm或zypper命令安装及服务启动验证,涵盖初始密码获取与安全修改方法,适用于无网络环境下的MySQL部署。
706 3
MySQL包安装 -- SUSE系列(离线RPM包安装MySQL)
|
6月前
|
关系型数据库 MySQL Linux
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
本文介绍了在openSUSE系统上通过SUSE资源库安装MySQL 8.0和8.4版本的完整步骤,包括配置国内镜像源、安装MySQL服务、启动并验证运行状态,以及修改初始密码等操作,适用于希望在SUSE系列系统中快速部署MySQL的用户。
672 3
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
746 6
|
7月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
1759 16
|
6月前
|
运维 Ubuntu 关系型数据库
MySQL包安装 -- Debian系列(Apt资源库安装MySQL)
本文介绍了在Debian系列系统(如Ubuntu、Debian 11/12)中通过APT仓库安装MySQL 8.0和8.4版本的完整步骤,涵盖添加官方源、配置国内镜像、安装服务及初始化设置,并验证运行状态,适用于各类Linux运维场景。
1964 0
MySQL包安装 -- Debian系列(Apt资源库安装MySQL)
|
6月前
|
Oracle 关系型数据库 MySQL
MySQL包安装 -- RHEL系列(离线RPM包安装MySQL)
本文详细介绍在Rocky、CentOS、AlmaLinux、openEuler等主流Linux系统上,通过离线RPM包安装MySQL 8.0和8.4版本的完整步骤,涵盖下载、依赖处理、rpm/yum安装、服务启动、密码设置等关键环节,适用于多种企业级环境部署需求。
1878 0
MySQL包安装 -- RHEL系列(离线RPM包安装MySQL)
|
6月前
|
存储 关系型数据库 MySQL
MySQL介绍和MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)
MySQL是一款开源关系型数据库,高性能、易用、跨平台,支持多种存储引擎,广泛应用于Web开发、企业级应用等领域。本教程介绍其特点、架构及在主流Linux系统中的安装配置方法。
1162 0
MySQL介绍和MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)