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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 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
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
112 1
|
24天前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
204 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
28天前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
46 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
8天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
17 1
|
1月前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
54 3
|
1月前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库如何设置忽略表名大小写?
【10月更文挑战第1天】使用Docker部署的MySQL数据库如何设置忽略表名大小写?
98 1
|
1月前
|
弹性计算 关系型数据库 MySQL
Docker安装MySQL
这篇文章详细介绍了如何使用Docker安装MySQL数据库服务,包括拉取镜像、配置数据卷以及启动容器的步骤。
244 0
Docker安装MySQL
|
22天前
|
消息中间件 NoSQL 关系型数据库
一文彻底搞定Redis与MySQL的数据同步
【10月更文挑战第21天】本文介绍了 Redis 与 MySQL 数据同步的原因及实现方式。同步的主要目的是为了优化性能和保持数据一致性。实现方式包括基于数据库触发器、应用层双写和使用消息队列。每种方式都有其优缺点,需根据具体场景选择合适的方法。此外,文章还强调了数据同步时需要注意的数据一致性、性能优化和异常处理等问题。
228 0
|
1月前
|
关系型数据库 MySQL 数据库
如何使用Docker部署MySQL数据库?
【10月更文挑战第1天】如何使用Docker部署MySQL数据库?
161 0
|
1月前
|
关系型数据库 MySQL 数据库
docker mysql表名和数据库名不区分大小写
docker mysql表名和数据库名不区分大小写
18 0
下一篇
无影云桌面