百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Mycat入门

moboyou 2025-03-26 11:43 8 浏览


一、Linux系统下搭建Mycat


注:如果没有服务器可以选择虚拟机进行操作


1、首先准备好服务器或者虚拟机


2、安装和配置MySQL数据库


2.1、删除原来的数据库



//查询已安装的mariadb
[root@wcy ~]# rpm -qa|grep mariadb                  
mariadb-libs-5.5.56-2.el7.x86_64 //文件名
//卸载mariadb,文件名为上述命令查询出来的文件
[root@wcy ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64


2.2、下载与安装MySQL


a、安装MySQL官方的yum repository



[root@wcy ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm



b、下载rpm包



[root@wcy ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm



c、安装MySQL服务

如果是centos8

首先执行:



yum module disable mysql



[root@wcy ~]# yum -y install mysql-community-server



d、启动MySQL服务



[root@wcy ~]# systemctl start  mysqld.service


查看启动状态



[root@localhost ~]# systemctl status mysqld.service


安装完成!


2.3、配置MySQL

a、mysql的几个相关命令



重启:systemctl restart mysqld.service
关闭:systemctl stop mysqld.service


配置开机启动



[root@wcy ~]# systemctl enable mysqld
[root@wcy ~]# systemctl daemon-reload


b、配置文件默认路径



配置文件:/etc/my.cnf
日志文件:/var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid


c、修改root密码



 grep 'temporary password' /var/log/mysqld.log



首次通过初始密码登录后,使用以下命令修改密码

mysql -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY'你的root密码';


d、重新载入



mysql> flush privileges;



e、远程访问



GRANT ALL ON *.* TO'root'@'%' IDENTIFIED BY '你的密码'; //只有执行了


注意:如果是阿里云用户注意开放3306或相关端口

f、mysql安装之后默认的字符集是latin,我们修改为UTF-8。可以使用status命令查看。



mysql> status;




输入命令:vim /etc/my.cnf



在最下方追加



[client]
default-character-set =  utf8
[mysqld]
character-set-server=utf8
lower_case_table_names = 1
[mysql]
default-character-set=utf8



重启MySQL



systemctl restart mysqld.service



3、安装jdk1.8


3.1、安装方式一


安装命令:



yum install -y java-1.8.0-openjdk.x86_64



查询jdk版本


命令:



java -version



3.2、安装方式二


a、下载环境,JDK安装包

https://www.oracle.com/java/technologies/javase-jdk16-downloads.html


https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html


推荐安装11


https://www.oracle.com/java/technologies/javase-jdk11-downloads.html


这里我下载的是Linux x64 Compressed Archive,可以根据自己的环境自行下载


b、在/usr/local/下创建java目录



[root@mycat2 local]# mkdir java
[root@mycat2 local]# chmod 777 java


c、使用ftp链接服务器并把下载的安装包上传至java目录


d、进入到java目录,解压上传文件






tar -zxvf +需要解压的包名
[root@mycat2 java]# tar -zxvf jdk-16.0.2_linux-x64_bin.tar.gz


e、编辑配置文件,配置环境变量,vim /etc/profile进入编辑状态,在打开的文件最后面加上如下代码:



JAVA_HOME=/usr/local/java/jdk-16.0.2
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH



f、重新加载配置文件,输入:



source /etc/profile



g、最后一步,查看安装情况

输入:



java -version




输入:



javac



4、mycat下载地址


http://dl.mycat.org.cn/1.6-RELEASE/

http://www.mycat.org.cn/

http://dl.mycat.org.cn/1.6.6/


4.1、服务器下载wget



wget http://dl.mycat.org.cn/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz



4.2、解压


tar -zxvf  Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz


4.3、启动



[root@mycat2 mycat]# ./mycat/bin/mycat




[root@mycat2 mycat]# ./mycat/bin/mycat
Usage: ./mycat/bin/mycat { console | start | stop | restart | status | dump }
#控制台|启动|停止|重启|状态|转储
#执行命令的方式
./mycat/bin/mycat +操作
#控制台:
./mycat/bin/mycat console 
#启动:
./mycat/bin/mycat start
#停止:
./mycat/bin/mycat stop 
#重启:
./mycat/bin/mycat restart 
#状态:
./mycat/bin/mycat status 
#转储:
./mycat/bin/mycat dump




4.4、测试



[root@mycat2 mycat]# ./mycat/bin/mycat console



二、Mycat核心概念详解


1、数据库中间件可以被当作一个或多个数据库集群构成的逻辑库。


数据库中间件可以以多租户的形式为一个或多个应用提供服务,每个应用访问的可能是一个独立或者共享的物理库,如图:



2、逻辑表


既然有逻辑库,就会有逻辑表。在分布式数据库中,对于应用来说,读写数据的表就是逻辑表。逻辑表可以分布在一个或多个分片库中,也可以不分片。


2.1、分片表


分片表是将指数据量很大的表切分到多个数据库实例中,所有分片组合起来构成了一张完整的表。例如在Mycat上配置t_node的分片表,数据按照规则被切分到dn1、dn2两个节点。


2.2、非分片表


并非所有的表在数据量很大时都需要进行分片,某些表可以不用分片。非分片表是相对于分片表而言的不需要进行数据切分的表。如下配置中的t_node只存在于节点dn1上。


2.3、ER表


关系型数据库是基于实体关系模型(Entity Relationship Model)的,Mycat中的ER表便来源于此。基于此思想,Mycat提出了基于E-R关系的数据分片策略,子表的记录与其所关联的父表的记录存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据关联查询不会跨库操作。

表分组(Table Group)是解决跨分片数据关联查询的一种很好的思路,也是数据切分的一条重要规则。


2.4、全局表


在一个真实的业务场景中往往存在大量类似的字典表,这些字典表中的数据变动不频繁,而且数据规模不大,很少有超过数十万条的记录。


当业务表因为规模进行分片后,业务表与这些附属的字典表之间的关联查询就成了比较棘手的问题,所以在Mycat中通过数据冗余来解决这类表的关联查询,即所有分片都复制了一份数据,我们把这些冗余数据的表定义为全局表。


数据冗余是解决跨分片数据关联查询的一种很好的思路,也是数据切分规划的另一条重要规则。


3、Mycat原理介绍


Mycat 原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对SQL语句做了一些特定的分析,例如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL语句发往后端的真实数据库,并将返回的结果做适当处理,最终再返回给用户,如图:



如图,Orders表被分为三个分片节点dn1、dn2、dn3,它们分布在两台MySQL Server(dataHost)上,即datanode=database@datahost,因此你可以用1~N台服务器来分片,分片规则(sharding rule)为典型的字符串枚举分片规则,一个规则的定义是分片字段(sharding column)+分片函数(rule function)。这里的分片字段为prov,分片函数则为字符串枚举方式。

相关推荐

Python网络爬虫之分析网页

一、分析并提取网页内容的有三种方式o正则表达式(速度最快,但适应变化略差)oBeautifulsoup库(速度是正则表达式的约几分之一)oselenium或pyppeteer的中的浏览器对象的查找元素...

Python进阶-day9:正则表达式

目标学习Python的re模块基础用法。掌握正则表达式的匹配(match,search,findall)、替换(sub)和分割(split)操作。练习:编写代码从一段文本中提取所有邮箱地址。学习内...

Python模块datetime、calendar、logging、argparse、re用法

datetime模块:提供日期和时间相关的功能。importdatetime#获取当前日期和时间current_time=datetime.datetime.now()#格式化日期...

一文讲清怎么利用Python实现Linux系统日志检索分析管理系统

摘要:在现代IT运营与开发中,日志分析早已成为不可或缺的核心环节。无论是排查系统故障、进行安全审计,还是优化服务性能,日志文件始终是最真实、最权威的信息来源。Linux系统作为主流的服务器操作系统,其...

Python基础编程——标准库之shelve模块

在实际开发中,要将数据进行持久化,通常的做法是,将数据保存到文件或者数据库中。Python有多种方法将数据保存到文件中,本节将会介绍使用Python的标准库shelve来将数据保存到文件中。shelv...

使用 Python 开发一个 Python 解释器

原文地址:https://python.plainenglish.io/introduction-to-creating-interpreter-using-python-c2a9a6820aa0原文...

强烈推荐!Python 这个宝藏库 re 正则匹配

Python的re模块(RegularExpression正则表达式)提供各种正则表达式的匹配操作。在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具,下面总结了re模块的常用方...

python入门到脱坑正则表达式—re.match()函数

re.match()是Python正则表达式模块re中的一个重要方法,用于从字符串的起始位置匹配一个模式。下面我将详细介绍它的用法和特点。基本语法re.match(pattern,stri...

Python中使用re模块实现正则表达式的替换字符串操作

#编程语言#我是"学海无涯自学不惜!",关注我,一同学习简单易懂的Python编程。0基础学python(83)Python中,导入re模块后还可以进行字符串的替换操作,就是sub()...

深入理解re模块:Python中的正则表达式神器解析

在Python中,"re"是一个强大的模块,用于处理正则表达式(regularexpressions)。正则表达式是一种强大的文本模式匹配工具,用于在字符串中查找、替换或提取特定模式...

python入门到脱坑正则表达式—re.search()函数

re.search()是Python正则表达式模块re中的核心函数之一,用于在字符串中搜索匹配指定模式的第一个位置。与re.match()不同,它不限制匹配必须从字符串开头开始。基本语法...

python入门到脱坑正则表达式—re.sub()函数

re.sub()是Python正则表达式模块re中用于字符串替换的核心函数,它可以在字符串中搜索匹配正则表达式的部分,并将其替换为指定的内容。基本语法re.sub(pattern,repl...

python之re模块

re模块一.re模块的介绍1.什么是正则表达式"定义:正则表达式是一种对字符和特殊字符操作的一种逻辑公式,从特定的字符中,用正则表达字符来过滤的逻辑。(也是一种文本模式;)2、正则表达式可以...

Python中re模块详解

在《用最简单的方式教会你使用Python正则》一文中,我们介绍了正则表达式该如何书写,还通过简单的示例介绍了Python中如何通过re模块使用正则功能。今天本文将通过以下内容详细介绍r...

微信积分商城货到付款系统|裂变营销+物流闭环

微信积分商城货到付款系统核心卖点速览零成本运营:免授权+完全开源PHP源码,9MB轻量部署,Mysql数据库高效支撑。灵活支付组合:独创“积分+货到付款+运费”混合支付,用户兑换无忧,商家资金零风险...