🚀 本文提供的指令完全可以按顺序逐一执行,已进行了多次测试。因此如果你是直接按照我本文写的指令一条条执行的,而非自定义修改过,执行应当是没有任何问题的。
🚀 本文讲述:使用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.yml
的es_demo_collect.yml
文件的 SQL 语句时需要注意(如果直接按照我写的来是没有问题的):
- 不要加顿号,例如:
select b.`user_id` ... on b.`user_id`=u.`id`
- 上述sql中的顿号必须全部删除,即不能出现顿号。应该改为如下:
select b.user_id ... on b.user_id=u.id
- 外连接时必须将连接条件字段放入查询中,例如 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分词器配置成功。