背景

cobar 是一个数据库中间件。

虽然已经不再维护好多年,但是做为一个学习的模型还是不错的。

在了解完 cobar 的基本原理后,再去学其它的中间件就很容易了。

我自己不是 DBA,因此下文中的语言或者内容很可能有错,欢迎指正。

第一个程序

效果

系统对外提供数据库 dbtest,包含 tb1 和 tb2 两张表。

其与物理数据库的对应关系为:

tb1: 映射到物理数据库 dbtest1 的 tb1 上

tb2: 一部分数据映射到物理数据库 dbtest2 的 tb2 上,另一部分数据映射到物理数据库 dbtest3 的 tb2 上

即不但实现了最基础的代理功能,还实现了分库分表的功能。

准备环境

数据库环境

搭建 MySQL 数据库,过程略。

在数据库上,创建 schema:dbtest1、dbtest2、dbtest3,table:tb1、tb2

# 创建dbtest1

DROP DATABASE IF EXISTS dbtest1;

CREATE DATABASE dbtest1;

USE dbtest1;

# 在dbtest1上创建tb1

CREATE TABLE tb1 (

id int NOT NULL,

gmt datetime

);

# 创建dbtest2

DROP DATABASE IF EXISTS dbtest2;

CREATE DATABASE dbtest2;

USE dbtest2;

# 在dbtest2上创建tb2

CREATE TABLE tb2 (

id int NOT NULL,

val varchar(256)

);

# 创建dbtest3

DROP DATABASE IF EXISTS dbtest3;

CREATE DATABASE dbtest3;

USE dbtest3;

# 在dbtest3上创建tb2

CREATE TABLE tb2 (

id int NOT NULL,

val varchar(256)

);

部署 cobar

wget https://github.com/alibaba/cobar/releases/download/v1.2.7/cobar-server-1.2.7.tar.gz

tar xvf cobar-server-1.2.7.tar.gz

cd cobar-server-1.2.7

目录树如下:

cobar-server-1.2.7

├── bin

│   ├── restart.sh

│   ├── shutdown.sh

│   ├── startup.bat

│   └── startup.sh

├── conf

│   ├── log4j.xml

│   ├── rule.xml

│   ├── schema.xml

│   └── server.xml

└── lib

├── cobar-server-1.2.7.jar

└── log4j-1.2.17.jar

配置 schema.xml

定义了 schema, 数据节点,数据源相关配置。

确认一下其中的"注意"部分即可。

dsTest[0]

dsTest[1]

dsTest[2]

192.168.0.1:3306/dbtest1

192.168.0.1:3306/dbtest2

192.168.0.1:3306/dbtest3

test

STRICT_TRANS_TABLES

配置 rule.xml

配置路由相关信息

路由规则定义,定义什么表,什么字段,采用什么路由算法

路由函数定义

id

2

512

配置 server.xml

定义 Cobar 用户名,密码

启动 cobar

建立目录 logs

启动 cobar

$ bin/startup.sh

日志见 logs 目录下

logs/

├── alarm.log

├── console.log

├── heartbeat.log

└── stdout.log

使用 cobar

连接 MySQL

命令行方式

$ mysql -h192.168.0.1 -utest -ptest -P8066 -Ddbtest

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

JDBC 方式

#JDBC(建议5.1以上的mysqldriver版本)

Class.forName("com.mysql.jdbc.Driver");

Connection conn=DriverManager.getConnection("jdbc:mysql://192.168.0.1:8066/dbtest","test", "test");

查看数据库

mysql> show databases;

+----------+

| DATABASE |

+----------+

| dbtest |

+----------+

1 row in set (0.00 sec)

查看数据表

mysql> show tables;

+------------------+

| Tables_in_dbtest |

+------------------+

| tb1 |

| tb2 |

+------------------+

2 rows in set (0.00 sec)

查看表结构

mysql> desc tb1;

+-------+----------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+----------+------+-----+---------+-------+

| id | int(11) | NO | | NULL | |

| gmt | datetime | YES | | NULL | |

+-------+----------+------+-----+---------+-------+

2 rows in set (0.00 sec)

mysql> desc tb2;

+-------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| id | int(11) | NO | | NULL | |

| val | varchar(256) | YES | | NULL | |

+-------+--------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

插入数据

# 向表 tb1插入一条数据

mysql>insert into tb1(id,gmt) values (1,now());

# 向表 tb2插入一条数据

mysql>insert into tb2(id,val) values (1,"part1");

# 向表 tb2同时插入多条数据

mysql>insert into tb2(id,val) values (2,"part1"),(513,"part2");

查询数据

mysql> select * from tb1;

+----+---------------------+

| id | gmt |

+----+---------------------+

| 1 | 2018-06-10 18:16:47 |

+----+---------------------+

1 row in set (0.01 sec)

mysql> select * from tb2;

+-----+-------+

| id | val |

+-----+-------+

| 1 | part1 |

| 2 | part1 |

| 513 | part2 |

+-----+-------+

3 rows in set (0.00 sec)

查看物理表中数据

mysql> select * from dbtest1.tb1;

+----+---------------------+

| id | gmt |

+----+---------------------+

| 1 | 2018-06-10 18:16:47 |

+----+---------------------+

1 row in set (0.00 sec)

确认逻辑表 tb1 映射到了物理表 dbtest1.tb1 中

mysql> select * from dbtest2.tb2;

+----+-------+

| id | val |

+----+-------+

| 1 | part1 |

| 2 | part1 |

+----+-------+

2 rows in set (0.00 sec)

mysql> select * from dbtest3.tb2;

+-----+-------+

| id | val |

+-----+-------+

| 513 | part2 |

+-----+-------+

1 row in set (0.00 sec)

确认逻辑表 tb1 映射到了物理表 dbtest2.tb2 和 dbtest3.tb2 中

CobarManager

前面提到了管理端口为 9066。这个管理端口有什么用处呢?

CobarManager 通过连接 9066,可以查看 Cobar 的状态。

CobarManager 示例

下载安装 Tomcat

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.8/bin/apache-tomcat-9.0.8.tar.gz

tar xvf apache-tomcat-9.0.8.tar.gz

cd apache-tomcat-9.0.8

sh bin/startup.sh

安装

cd webapps

wget https://github.com/alibaba/cobar/releases/download/v1.2.7/cobar-manager-1.0.5.war

修改配置

修改 WEB-INF/classes/log4j.xml 中的日志输出路径,日志级别调整为 INFO 及以上

查看 WEB-INF/classes/ 下的各 XML 配置文件,不是必须更改

修改 WEB-INF/xmlpath.properties 文件,将 xmlpath 指向上面的各 XML 配置文件的路径,如 /home/admin/xml/

使用

重启 Tomcat

打开浏览器: http://127.0.0.1:8080/cobar-manager-1.0.5/

初始用户名和密码为 root/123456,在 WEB-INF/classes/user.xml 中指定的。

可以在页面上修改。

参考

mysql +cobar_MySQL 中间件 cobar 初体验相关推荐

  1. Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

    Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...

  2. Mysql数据库(一)——mysql数据库初体验

    Mysql数据库(一)--mysql数据库初体验 一.数据库的概念 1.数据库的组成 ①.表 ②.数据库 2.数据库类型 ①.关系型数据库 ②.非关系型数据库(NoSQL (Not Only SQL) ...

  3. yii schema.mysql.sql_YII学习,初体验 ,对YII的一些理解.

    先说点没用的: 不会选择,选择后不坚持,不断的选择.这是人生中的一个死循环,前两一直迷茫.觉得自己前进方向很不明朗.想去学的东西有很多.想学好YII,想学PYTHON 想学学hadoop什么的,又想研 ...

  4. MySQL数据库初体验

    文章目录 一.MySQL数据库初体验 1.数据库的基本概念 2.数据库系统发展史 2.1文件管理系统的缺点 2.2数据库系统发展阶段 3.数据库原理 3.1数据的时代 3.2数据的分类 3.3DBMS ...

  5. MySQL 02 初体验

    MySQL 02 初体验 文章目录 MySQL 02 初体验 一.学习目标 二.MySQL简介 三.MySQL服务启动与关闭 四.MySQL登录 五.MySQL配置文件 六.MySQL安装目录 七.M ...

  6. Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验

    Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...

  7. 两个ORM的pk初体验:Peewee VS SQLAlchemy

    之前从MySQL数据库捞数据都是使用的Peewee的ORM进行的获取,同时对于获取的结果,使用其强大的insert_many方法也能快速的导入大批量的数据. 现在实习的过程中,要上线一个服务,服务中要 ...

  8. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  9. 从入门到入土:python爬虫|scrapy初体验|安装教程|爬取豆瓣电影短评相关信息(昵称,内容,时间和评分)

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  10. Docker深入浅出系列 | 容器初体验

    Docker深入浅出系列 | 容器初体验 教程目标 Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干 ...

最新文章

  1. page_index--template.html(0)源码
  2. 用java调用oracle存储过程总结二
  3. python教程:封装、多态、反射
  4. 测试学python路线_小蜗分享:Python测试开发全套学习路线
  5. 查看Linux服务器raid信息笔记整理!
  6. 管理培训决定企业生死的5个层面
  7. 简单易学又有效的颈椎病自我康复操
  8. 《分解因数》:质因数分解
  9. 7-95 深入虎穴 (树的深搜)
  10. 解决OBS录屏模糊问题
  11. 空间辐射环境 - 银河宇宙线
  12. C语言自定义函数的声明
  13. 开源精选:AntdFront —— React 纯 Hook 多标签微前端管理系统解决方案
  14. centos7 npm bulid编译报错解决
  15. lg5手机怎样root,lgg5手机参数
  16. Java设计模式之二工厂设计模式
  17. 权健涉嫌传销犯罪被立案侦查,周洋父亲:很快会提起诉讼
  18. c语言松树图形,松树的基本画法
  19. Redis加固方案之一
  20. ixchariot安装、测试IPV6

热门文章

  1. 支持python的云虚拟主机_云虚拟主机运行python(能运行python的主机)
  2. 利用go破解带密码的rar压缩文件
  3. 一篇文章带你读懂水晶易表的简介及其安装初识
  4. Win7系统怎么截图快捷键
  5. 《代码大全2》第6章 可以工作的类
  6. mysql静默安装_Windows环境Mysql静默安装
  7. 计算机,通信,自动化等方向期刊排名
  8. 介绍Google Code Playground
  9. 使用npm和命令行强制删除文件
  10. Lenovo ThinkPad SL400安装克隆版的XP