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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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分词器配置成功。



相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1天前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
37 24
|
1月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
2月前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
556 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
1月前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
142 1
|
2月前
|
弹性计算 关系型数据库 MySQL
Docker安装MySQL
这篇文章详细介绍了如何使用Docker安装MySQL数据库服务,包括拉取镜像、配置数据卷以及启动容器的步骤。
392 0
Docker安装MySQL
|
10天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
137 77
|
18天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
11天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
50 3
|
18天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
51 7
|
18天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
29 5