分布式 | DBLE docker 部署遇到的简单问题修复过程
作者:杨涛涛
资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
本文来源:原创投稿
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
首先说明如果完全按照官网文档来操作,肯定是没有问题的,DBLE 官网文档已经写的很详细了。
刚好我环境中有最新的 MySQL docker 镜像(MySQL 8.0.29),我偷懒把 DBLE 后台 MySQL 版本换成 8.0.29 ,子网换成172.20.0.0/16(我本机已有其他 docker 容器占用默认子网运行)。
装完 DBLE 后,出现了两个小问题:
由于 IP 地址和 DOCKER 镜像打包的配置不一样,后续的初始化也就没成功。
在修改完 IP 地址后,一个逻辑库提示管理员没有权限创建。
那接下来我们来修复这两个小问题。
先拉下来 DBLE 最新版本。
root@ytt-large:/home/ytt# docker image ls | grep -E '^action|^mysql'mysql 8.0.29 b2500a44757f 8 days ago 524MBactiontech/dble latest 9988614a8e4b 6 months ago 755MB
创建 docker 网络环境,打通后台 MySQL 和 DBLE 。
root@ytt-large:/home/ytt# docker network create \> -o "com.docker.network.bridge.name"="dble-net" \> --subnet 172.20.0.0/16 dble-net360a9408c35cd8b8d49ad2e58ca447d5518dbea2d954badc0e618ad5d0c072a1
创建两个后端 MySQL 服务,版本为 MySQL 8.0.29 ,映射端口3306 分别为33061、33062。
root@ytt-large:/home/ytt# docker run --name backend-mysql1 \> --ip 172.20.0.2 -e MYSQL_ROOT_PASSWORD=123456 \
> -p 33061:3306 --network=dble-net \
> -d mysql:8.0.29 --server-id=1
54505aeca71ae7c4553a0fa98e705ee302cdfc08c2b472768afc6170dddf6d37root@ytt-large:/home/ytt# docker run --name backend-mysql2 \
> --ip 172.20.0.3 -e MYSQL_ROOT_PASSWORD=123456 \
> -p 33062:3306 --network=dble-net \
> -d mysql:8.0.29 --server-id=2
5f907b977fc242be35dc01840a5393f2ee754572dd1d59e2fb072032df1ed8d0
等 MySQL 初始化大约30秒完成后,启动 DBLE 。
root@ytt-large:/home/ytt# docker run -d -i -t --name dble-server \> --ip 172.20.0.5 -p 8066:8066 -p 9066:9066 \
> --network=dble-net actiontech/dble:latest
df80d0e2451c237afb4792f93e29738579f125288daf0dfee4484ddca8350110
DBLE 正常初始化需要根据配置文件加载分片节点,导入样例库表文件/opt/dble/conf/template_table.sql 。查看 DBLE 启动日志,报错内容为:连接服务端口8066失败,应该是配置文件里 IP 地址没同步改过来。
root@ytt-large:/home/ytt# docker logs dble-serverdble init&start in dockerStarting dble-server...wait-for-it.sh: waiting 15 seconds for 127.0.0.1:8066wait-for-it.sh: 127.0.0.1:8066 is available after 6 secondsinit shardingNode and execute template_table.sqlERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)dble init finish
用docker cp 在宿主环境修改 db.xml 后拷贝到容器或者进入容器环境直接修改 db.xml 里的 url 值为正确的IP地址,之后再退出容器重启 dble-server 。
root@ytt-large:/home/ytt# docker exec -it dble-server /bin/bash[root@df80d0e2451c /]# cat /opt/dble/conf/db.xml | grep 172<dbInstance name="instanceM1" url="172.20.0.2:3306" user="root" password="123456" maxCon="300" minCon="10"<dbInstance name="instanceM2" url="172.20.0.3:3306" user="root" password="123456" maxCon="300" minCon="10"root@ytt-large:/home/ytt# docker restart dble-serverdble-server
再次检查 DBLE 日志。有新的报错内容: 提示服务账户对数据库 testdb2 没权限访问。
[root@df80d0e2451c /]# dble init&start in dockerStarting dble-server...wait-for-it.sh: waiting 15 seconds for 127.0.0.1:8066wait-for-it.sh: 127.0.0.1:8066 is available after 2 secondsinit shardingNode and execute template_table.sqlERROR 1044 (HY000) at line 200 in file: '/opt/dble/conf/template_table.sql': Access denied for user 'root' to database 'testdb2'ERROR 1146 (42S02) at line 202 in file: '/opt/dble/conf/template_table.sql': Table 'testdb.tb_test1' doesn't exist in the config of shardingERROR 1146 (42S02) at line 207 in file: '/opt/dble/conf/template_table.sql': Table 'testdb.tb_test1' doesn't existERROR 1146 (42S02) at line 210 in file: '/opt/dble/conf/template_table.sql': Table 'testdb.tb_test2' doesn't exist in the config of shardingERROR 1146 (42S02) at line 215 in file: '/opt/dble/conf/template_table.sql': Table 'testdb.tb_test2' doesn't existdble init finish
连接 DBLE 检查,发现权限是够的。 那应该是用户配置文件里没把这个逻辑库添加进去。
root@ytt-large:/home/ytt# mysql -uroot -p123456 -P8066 -h 127.0.0.1 -e "show grants for root" -s |grep 'CREATE'
mysql: [Warning] Using a password on the command line interface can be insecure.
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE,... ON *.* TO `root`@`%` WITH GRANT OPTION
类似步骤6,添加逻辑库 testdb2 到 DBLE 配置文件 user.xml ,完了退出容器并重启 dble-server 。
[root@df80d0e2451c ~]# cat /opt/dble/conf/user.xml | grep 'testdb2'<shardingUser name="root" password="123456" schemas="testdb,testdb2" readOnly="false" blacklist="blacklist1" maxCon="20"/>root@ytt-large:/home/ytt# docker restart dble-server
dble-server
再次查看日志内容,已经无报错。
root@ytt-large:/home/ytt# docker logs dble-server | tail -n 6Starting dble-server...Removed stale pid file: /opt/dble/dble.pidwait-for-it.sh: waiting 15 seconds for 127.0.0.1:8066wait-for-it.sh: 127.0.0.1:8066 is available after 2 secondsinit shardingNode and execute template_table.sqldble init finish
连接服务端口,检查下逻辑库: 已经正常创建完毕。
root@ytt-large:/home/ytt# mysql -uroot -p123456 -h127.0.0.1 -P8066 -e "show databases"
mysql: [Warning] Using a password on the command line interface can be insecure.+----------+| DATABASE |+----------+| testdb || testdb2 |+----------+
分布式 | DBLE docker 部署遇到的简单问题修复过程相关推荐
- 使用docker部署nginx搭建简单的idea-2019 jrebel插件激活服务器
使用docker部署nginx搭建简单的idea-2019 jrebel插件激活服务器 前言 之前用的jrebel激活方式一直都是用的 *lanyus* 大神的 [jrebel激活](http://i ...
- 基于docker部署的微服务架构(九): 分布式服务追踪 Spring Cloud Sleuth
为什么80%的码农都做不了架构师?>>> 前言 微服务架构中完成一项功能经常会在多个服务之间远程调用(RPC),形成调用链.每个服务节点可能在不同的机器上甚至是不同的集群上,需 ...
- 采用docker部署3台Redis分布式红锁实例
采用docker部署3台Redis分布式红锁实例 docker run -p 6381:6379 --name redis-master-1 -d redis:5.0.7 docker run -p ...
- Docker部署Fastdfs分布式文件存储系统
Docker部署Fastdfs分布式文件存储系统 Fastdfs分布式文件存储系统 拉取镜像 部署Tracker和Storage 开放端口 SpringBoot代码示例 Fastdfs分布式文件存储系 ...
- 云堡垒机分布式集群部署优缺点简单说明
目前云堡垒机安装部署模式主要分为单机部署.高可用集群部署以及分布式集群部署等.其中分布式集群部署就是将核心功能模块(如门户服务.会话中转服务.数据库服务等),分别部署在多个计算节点上.那采取布式集群部 ...
- docker部署及简单使用
docker部署及简单使用 配置docker源 [root@localhost yum.repos.d]# curl -o docker-ce.repo https://mirrors.tuna.ts ...
- Ubuntu通过docker部署分布式版本控制GitLab(一)
使用Ubuntu通过docker部署分布式版本控制GitLab(一) 虚拟机部分 作者用的虚拟机是VirtualBox,下载ubuntu镜像 设置虚拟机存储,控制器IDE光驱为下载的镜像 设置虚拟机网 ...
- 手牵手教Docker部署Springboot+vue ,全过程十分详细,轻松完成项目部署(简单,高效,通用)
手把手教Docker部署Springboot+vue ,详细全过程,轻松完成项目部署(简单,高效) 上线前准备 腾讯云的服务器,服务器安装好docker 和docker-compose 最好事先了解技 ...
- 史上最简单的docker入门到放弃——(利用docker部署web应用)
目录 @[TOC](目录) 第一章 什么是docker 1.1 docker的发展史 1.2 docker国内应用史 1.3 什么是Docker 第二章 了解docker 2.1 docker思想 2 ...
- Docker部署ElasticSearch7.11.1并挂载+配置X-Pack设置帐号密码+Kibana7.11.1+IK插件
一.ElasticSearch是什么 Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucen ...
最新文章
- oracle顺序读等待,Oracle Study之--Oracle等待事件(4)
- C# DataGridView控件用法
- WebStorm常用设置(转载)
- Docker 网络之进阶篇
- RSA算法原理——(1)目前常见加密算法简介
- 微信小程序实现时间戳转为时间格式
- win7台式电脑怎么连wifi_台式电脑怎么用wifi网络
- springbatch读取文件_通过例子讲解Spring Batch入门,优秀的批处理框架
- 【渝粤教育】国家开放大学2018年秋季 0184-21T行政职业能力 参考试题
- 编制现金流量表3个步骤!
- 《计算机网络教程》(微课版 第五版)第七章 网络安全 课后习题及答案
- 多多自走棋的各个套路简单分析
- h5制作 php 开源,PHP源码:2019最新仿易企秀V15.1完整版开源版源码,修复采集功能、新增同行站模板采集等...
- Python | 用Python画个美队盾牌送给你
- 第1章 开篇-为什么要做CI/CD?
- FuntouchOS跟鸿蒙系统,FuntouchOS10.5安装包
- 记账分享:如何记录收支明细,并分析、打印保存。
- 重磅!VirtualXposed,让你无需Root也能使用Xposed框架!
- Python学习笔记第一天----字符串和列表
- 苹果老板乔布斯在斯坦福大学的演讲
热门文章
- 机器学习中的数学(八):卡方分布(Chi-squared Distribution) t分布(T Distribution)F分布(T Distribution)
- mfc动态改变clip风格_欧式古典家具风格的演变历程
- PaddleWeekly | 这是属于技术宅的七夕特别篇
- vue+element项目,升级element后带tabs模块的页面。导致页面崩溃白屏问题?
- 8.4 不能外包的解谜算法
- vue页面引用百度地图怎么让百度logo不显示
- 从零学IOS开发(一)
- Mac安装port(port:command not found解决办法)
- C语言一维数组、二维数组传参
- Elasticsearch顶尖高手系列:高手进阶篇(二)