关于mysql的mycat中间件安装配置与python使用mycat例子

2023-11-05

关于mysql的mycat中间件安装配置与python使用mycat例子

MyCAT是mysql中间件,Mycat数据库分库分表中间件国内最活跃的、性能最好的开源数据库中间件! 它是一款开源的Mysql企业级集群应用,前身是阿里大名鼎鼎的Cobar,Cobar在开源了一段时间后,不了了之。于是MyCAT扛起了这面大旗,在大数据时代,其重要性愈发彰显。

MyCAT提供了类似Mysql的接口,可以平滑的将单机Mysql迁移到Mysql集群上,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
这篇文章主要是MyCAT的入门部署和python使用。
一,什么是mycat

一个彻底开源的,面向企业应用开发的大数据库集群

支持事务、ACID、可以替代MySQL的加强版数据库

一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群

一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server

结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

一个新颖的数据库中间件产品

以上是官方说明。其实就是数据库的连接池。mysql proxy也是一种连接池,但是效率很低。

二,mycat 安装

1,下载地址mycat

2,安装mycat

# tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

我下载的是Mycat-server-1.5.1-RELEASE-20161130213509-linux.tar.gz

三,进行mycat配置的前提是已经配置好了,MySQL数据库主从架构,如下:

1、前提是已经配置了MySQL的主从关系,如下:

在192.168.1.120上MySQL命令行窗口,查看如下:

mysql> show slave hosts;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID                           |
+-----------+------+------+-----------+--------------------------------------+
|       121 |      | 3306 |       120 | b8f1101c-9131-11e8-a9bd-000c294283ad |
|       122 |      | 3306 |       120 | deb94f66-8cfa-11e8-a1f4-000c29accb8e |
|       130 |      | 3306 |       120 | bab165c8-a093-11e8-93ba-000c29e026cb |
+-----------+------+------+-----------+--------------------------------------+
3 rows in set (0.00 sec)

在192.168.1.130上MySQL命令行窗口,查看如下:
mysql> show slave hosts;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID                           |
+-----------+------+------+-----------+--------------------------------------+
|       120 |      | 3306 |       130 | c6e0ee48-90e9-11e8-8adb-000c29ba5130 |
|       131 |      | 3306 |       130 | ad97775c-a093-11e8-8ba8-000c295e5725 |
+-----------+------+------+-----------+--------------------------------------+
2 rows in set (0.00 sec)

最终架构为(以IP后一段称呼该主机):

120和130是互为主从
120的从节点为121和122
130的从节点是131

四,配置mycat

1,配置server.xml

# vim    /home/hadoop/software/mycat/conf/server.xml //添加以下内容

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
        - you may not use this file except in compliance with the License. - You 
        may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
        - - Unless required by applicable law or agreed to in writing, software - 
        distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
        License for the specific language governing permissions and - limitations 
        under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
        <system>
        <property name="defaultSqlParser">druidparser</property>
      <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
        <!-- <property name="processorBufferChunk">40960</property> -->
        <!-- 
        <property name="processors">1</property> 
        <property name="processorExecutor">32</property> 
         -->
                <!--默认是65535 64K 用于sql解析时最大文本长度 -->
                <!--<property name="maxStringLiteralLength">65535</property>-->
                <!--<property name="sequnceHandlerType">0</property>-->
                <!--<property name="backSocketNoDelay">1</property>-->
                <!--<property name="frontSocketNoDelay">1</property>-->
                <!--<property name="processorExecutor">16</property>-->
                <!-- 
                        <property name="mutiNodeLimitType">1</property> 0:开启小数量级(默认) ;1:开启亿级数据排序
                <property name="mutiNodePatchSize">100</property> 亿级数量排序批量
                        <property name="processors">32</property> <property name="processorExecutor">32</property> 
                        <property name="serverPort">8066</property> <property name="managerPort">9066</property> 
                        <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
                        <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
        </system>
        
        <user name="root">  #//mycat用户名
                <property name="password">root</property>   //mycat密码
                <property name="schemas">mstest</property>   //mycat虚拟数据库名
                <property name="benchmark">10000</property>   //benchmark:限制前端的整体连接数量,如果值是0表示不限制
        </user>

        <user name="user">
                <property name="password">user</property>
                <property name="schemas">mstest</property>
                <property name="readOnly">true</property>  //只读
        </user>
        <!-- 
        <quarantine> 
           <whitehost>
              <host host="127.0.0.1" user="mycat"/>
              <host host="127.0.0.2" user="mycat"/>
           </whitehost>
       <blacklist check="false"></blacklist>
        </quarantine>
        -->

</mycat:server>
                      
                      
在这里要注意,默认的虚拟数据名是TESTDB,如果schema.xml里面没有配置TESTDB,那就要把TESTDB改成schema.xml里面有的虚拟数据名。
这里定义的用户名和密码,虚拟数据库名,并不是在mysql中真实存在的。

2,配置schema.xml

# vim    /home/hadoop/software/mycat/conf/schema.xml //添加以下内容

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/" >

     <schema name="mstest" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">  </schema>   //定义虚拟数据库名mytest

        <dataNode name="dn1" dataHost="localhost1" database="test" />  //真实数据库名test

            <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="localhost:3306" user="root" password="xx@123456">    //真实数据库的连接方式
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="192.168.1.121:3306" user="root" password="xx@123456" />   //同上
                        <readHost host="hostS2" url="192.168.1.122:3306" user="root" password="xx@123456" />   //同上
                </writeHost>

                <writeHost host="hostM2" url="192.168.1.130:3306" user="root" password="xx@123456">
                         <!-- can have multi read hosts -->
                        <readHost host="hostM2S1" url="192.168.1.131:3306" user="root" password="xx@123456" />
               </writeHost>   
</mycat:schema>

mycat的配置参数,相当的多。重点说一下 balance="1"与writeType="0"

a. balance 属性负载均衡类型,目前的取值有 4 种:

1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。

2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。

3. balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。

4. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。

b. writeType 属性

负载均衡类型,目前的取值有 3 种:

1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个

writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

2. writeType="1",所有写操作都随机的发送到配置的 writeHost。

3. writeType="2",没实现。

具体参数:http://mycat.io/document/Mycat_V1.6.0.pdf

3,配置主从服务器,就不在这儿说了,博客中有

4,添加真实用户

grant all privileges on test.* to root@"192.168.%" identified by 'xx@123456';
flush privileges


在120,130二台机器上添加用户。

5,测试真实用户连接,确保schema.xml中配置的真实用户,能连上真实的数据库。注意防火墙。

五,启动mycat

1,常用参数
./mycat start 启动
./mycat stop 停止
./mycat console 前台运行
./mycat restart 重启服务
./mycat pause 暂停
./mycat status 查看启动状态

2,启动,并查看mycat

# ./mycat start
Starting Mycat-server...
 
# netstat -tpnl |grep 8066
tcp 0 0 :::8066 :::* LISTEN 31728/java
 
# ./mycat status
Mycat-server is running (31726).
六,测试读写分离

# mysql -u root -p -P 8066 -h 127.0.0.1 //一定要带上127.0.0.1

七,小结

mycat支持 mysql的分表,分片等等,但是不建议使用。mycat支持的集群不多,如果能配合MHA使用就比较牛B了。


八、python通过中间件mycat操作mysql代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb


class MyCatClass(object):
    def __init__(self):
        # 打开数据库连接
        #用户名和密码失败塑造出无法访问
        # self.__conn_db = MySQLdb.connect("192.168.1.120", "work", "xx@123456", charset='utf8', port=3306, db='test')
        # 以下是成功写法
        # 方法一
        # self.__conn_db = MySQLdb.connect(user='root', passwd='root', host='192.168.1.120', port=8066,db='mstest',charset='utf8')
        # 方法二
        # self.__conn_db = MySQLdb.connect(user='user', passwd='user', host='192.168.1.120', port=8066, db='mstest', charset='utf8')
        # 方法三
        config = {
            'host': '192.168.1.120',
            'port': 8066,
            'user': 'root',
            'passwd': 'root',
            'db': 'mstest',
            'charset': 'utf8'
        }
        self.__conn_db = MySQLdb.connect(**config)

        # 使用cursor()方法获取操作游标
        self.__cursor = self.__conn_db.cursor()

    # 使用execute方法执行SQL语句
    def excute_db(self,in_sql="SELECT VERSION()"):
        num=self.__cursor.execute(in_sql)
        if num>0:
            data_list = self.__cursor.fetchall()
        return data_list

    def show_dataset(self):
        sql="select * from stu_info"
        data_list=self.excute_db(in_sql=sql)
        print data_list
        for each in data_list:
            print each
            for e in each:
                print e
    def insert_data(self):
        sql_insert='''insert stu_info(name,age) values('0813',520)'''
        self.__cursor.execute(sql_insert)
        self.__conn_db.autocommit(True)
        # self.__conn_db.commit()

    def __del__(self):
        self.__cursor.close()


if __name__ == '__main__':
    obj_handle_mycat = MyCatClass()
    print obj_handle_mycat.excute_db()
    obj_handle_mycat.show_dataset()
    obj_handle_mycat.insert_data()
    obj_handle_mycat.show_dataset()

 参考:http://www.php.cn/mysql-tutorials-363510.html
            https://www.jianshu.com/p/f15d64fcb2f3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于mysql的mycat中间件安装配置与python使用mycat例子 的相关文章

随机推荐

  • 百融云预计2022年净利润同比翻倍 金融AI平台头部效应尽显

    2月15日 百融云创 06608 HK 发布2022年正面盈利预告 预期于截至2022年12月31日止年度录得非国际财务报告准则溢利 净利润 约2 86亿元人民币至2 93亿元人民币 较去年同期增长约103 至108 公告显示 公司主业营收
  • 房价预测(基于决策树算法)

    预测波士顿房价 第一步 导入数据 在这个项目中 将使用波士顿房屋信息数据来训练和测试一个模型 并对模型的性能和预测能力进行评估 我们希望可以通过该模型实现对房屋的价值预估 提高房地产经纪人的工作效率 此项目的数据集来自kaggle原始数据
  • Pyhton考单词程序_考单词工具

    说明 首先我们需要一个单词表的文本文档像这样 只要单词中没有空格就行 然后运行程序 选择单词表文件 开始考单词 正确会提示Right 错误提示Wrong 一秒钟后清屏 代码 main py from module opfile import
  • [1049]since it exceeds Excel‘s limit of 65,530 URLS per worksheet

    文章目录 since it exceeds Excel s limit of 65 530 URLS per worksheet pandas 写入excel 转换Url链接的两种方法 since it exceeds Excel s li
  • el-table 动态表格 + 动态合并多列单元格方法

    动态合并单元格 之前有篇文章写了 el table 通过 span method 方法实现合并单元格的方法 但是当时只写了合并第一列的 就有小伙伴询问 如果多列合并怎么办 刚好最近有个项目遇到了动态表格并且要合并多列单元格 在详细的记录一下
  • Ubuntu17.04禁用访客模式/忽略终端大小写

    在ubuntu17 04中禁用访客模式 只需一条命令就可以了 sudo sh c printf SeatDefaults nallow guest false n gt etc lightdm lightdm conf d 50 no gu
  • python matplotlib 画图参数简要说明

    文章目录 import matplotlib pyplot as plt 用来正常显示中文 否则中文是一堆方框 plt rcParams font sans serif SimHei 用来正常显示负号 plt rcParams axes u
  • 设计循环队列

    前言 队列中有一种特殊的存在 环形队列 其有一定的价值与意义 这篇文章主要由一道与其相关的例题来引出相关的知识内容 注 下述解题过程是用C语言实现 目录 一 题目简述 二 环形队列的简单介绍 三 环形队列的实现 1 数组实现 1 过程分析
  • java动态扩展_java栈内存动态扩展要怎么理解?要如何实现?

    小伙伴们知道如何在java栈中内存动态扩展吗 这是虚拟机中的一个概念 下面让我们一起来看看该如何实现吧 一 内存概念 在java中 我们一般会简单把java内存区域划为两种 堆内存与栈内存 其实这种划分是比较粗粒度的 其中栈内存就是指的是虚
  • 浅析C语言结构体及位段

    数据经常以组的形式存在 例如 学校需要了解每位学生的姓名 学号和成绩等 如果这些值储存在一起 访问起来会更加简单 但如果类型不同 就无法存储于同一个数组中 所以在C语言中可以使用结构把不同类型的值存储在一起 先来看看百度百科对结构体的定义
  • 数组小和问题

    描述 在一个数组中 每一个数左边比当前数小的数累加起来 叫做这个数组的小和 求一个数组的小和 例子 1 3 4 2 5 1左边比1小的数 没有 3左边比3小的数 1 4左边比4小的数 1 3 2左边比2小的数 1 5左边比5小的数 1 3
  • 【云原生之Docker实战】使用Docker部署Ferry开源工单系统

    云原生之Docker实战 使用Docker部署Ferry开源工单系统 一 Ferry介绍 1 Ferry简介 2 Ferry特点 3 Ferry系统功能 二 检查本地系统环境 1 检查docker版本 2 检查docker状态 3 检查do
  • thymeleaf 常量_thymeleaf全局常量定义

    微服务现在最流行的莫过于springboot 官方推荐两种模板语言 freemarker和thymeleaf 本文只介绍thymeleaf中如何定义全局常量 百度一搜thymeleaf的全局常量定义 都是让把常量写在 message 文件中
  • std::ifstream vShaderfile & vShaderfile.ifstream.exceptions(std::ifstream::badbit)

    一 利用 fstream ifstream类打开文件 string stringstream类读入流 写入string类 二 try catch 检测异常 1 Retrieve the vertex fragment source code
  • 与Power PMAC通讯

    与PMAC通讯 Power PMAC通讯 通用Internet协议套件概述 Power PMAC 网络协议套件的使用 启动Power PMAC SSH Telnet通讯 IDE通信与Power PMAC FTP访问Power PMAC 修改
  • 代码加密和反编译

    代码加密和反编译 概述 通过 NET编译的项目得到的dll文件 由于要翻译为虚拟机可以执行的中间语言IL 这种语言规则性比较强 很容易通过各种反编译软件翻译成源码 所以当部署到实际项目中就需要进行一些加密 公司的项目是 NET CORE框架
  • 谈谈自己对链表的理解

    先说一个大概念 物理结构区分数据结构 分为顺序存储 链式存储 逻辑上区分就是集合 线性 树形 图形 1 什么是链表 它是有数据域和和指针域组成 那么什么是数据域 就是存储数据的区域 那么什么是指针域 指针域其实就是指针 用来标记此数据的相邻
  • SaaSBase:最受欢迎的协同办公软件有哪些(上篇)

    在海量的协同办公软件中 企业该如何选择呢 不用担心 SaaSBase saasbase cn 来帮您 根据 SaaSBase saasbase cn 的数据统计 有较多的协同办公软件受到企业的欢迎 故小编将它们拆分为两篇为您揭晓 先看今天第
  • HTTPS 客户端与服务端的交互过程

    一 客户端向服务端发起 HTTPS 请求 请求中包含了请求头 请求主体等信息 1 这一步就是 tcp 的三次握手 二 服务端接收到请求后 发送数字证书给客户端 以便客户端验证服务端身份 1 这一步是 SSL TLS 协议的握手过程 其目的是
  • 关于mysql的mycat中间件安装配置与python使用mycat例子

    关于mysql的mycat中间件安装配置与python使用mycat例子 MyCAT是mysql中间件 Mycat数据库分库分表中间件国内最活跃的 性能最好的开源数据库中间件 它是一款开源的Mysql企业级集群应用 前身是阿里大名鼎鼎的Co