首页 > 数据库 >基于mycat实现数据库的读写分离

基于mycat实现数据库的读写分离

时间:2024-07-15 11:26:25浏览次数:19  
标签:配置文件 -- 读写 mycat mysql db01 root 数据库

一、mycat分布式存储服务部署

1. 安装java运行环境(db01)
[root@db01~]# yum install -y java

2. 下载、解压mycat包
# 上传解压mycat程序包
[root@db01 ~]# tar xf Mycat-server-1.6.7.4-release-20200105164103-linux_.tar.gz  -C /usr/local/
[root@db01 ~]# ll /usr/local/mycat
# 配置服务程序环境变量
[root@db01~]# vim /etc/profile
export PATH=/usr/local/mycat/bin:$PATH
[root@db01~]# source /etc/profile

3. 运行启动服务程序并测试连接mycat:
[root@db01~]# mycat start
[root@db01~]# mysql -uroot -p123456 -h 127.0.0.1 -P8066
或者
[root@db01~]# mysql -uroot -p123456 -h 127.0.0.1 -P8066 --default-auth=mysql_native_password
-- 有可能会出现连接不上的情况,因为mycat程序库中,使用的java连接驱动器版本为5.1版本,和数据库8.0可能有兼容问题
[root@db01~]# cp mysql-connector-java-8.0.21/mysql-connector-java-8.0.21.jar /usr/local/mycat/lib/
[root@db01~]# mycat restart
-- 可以进行mycat连接驱动更新操作,可以解决mycat连接问题

二、mycat实现读写分离

1.程序目录配置说明

目录信息解释说明文件信息解释说明
bin程序脚本目录
conf配置文件目录schema.xml管理节点信息配置文件(主配置文件) 节点信息、读写分离、高可用设置、调用分片策略...
rule.xml定义分片规则配置文件(分片策略定义、功能使用方法)
server.xml服务功能本身配置文件(服务有关配置) 用户、网络、权限、策略、资源...
xx.txt分片参数定义文件
log4j2.xml相关日志记录配置
lib驱动程序目录
logs日志文件目录wrapper.log服务运行启动日志文件
mycat.log服务运行情况日志文件

2.schema.xml 配置文件(实现读写分离)

[root@db01 ~]# cd /usr/local/mycat/conf/
[root@db01 conf]# vim schema.xml
# 逻辑库schema部分
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

   <schema name="cqshzl" checkSQLschema="false" sqlMaxLimit="100" dataNode="node_cqshzl"></schema>
   -- schema表示mycat逻辑库
   <schema name="proc_t" checkSQLschema="false" sqlMaxLimit="100" dataNode="node_proc_t"></schema>
   <dataNode name="node_cqshzl" dataHost="host_cqshzl" database="cqshzl" />
    -- database 指向真实的数据库
   <dataNode name="node_proc_t" dataHost="host_cqshzl" database="proc_t" />
   <dataHost name="host_cqshzl" maxCon="4000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
      <heartbeat>select user()</heartbeat>
      <writeHost host="hostM1" url="172.16.130.8:3306" user="jczz" password="12366">
	      <readHost host="hostS1" url="172.16.9.233:3306" user="jczz" password="12366"></readHost>
	      <readHost host="hostS2" url="172.16.10.176:3306" user="jczz" password="12366"></readHost>
	      <readHost host="hostS3" url="172.16.130.11:3306" user="jczz" password="12366"></readHost>
     </writeHost>
   </dataHost> 
</mycat:schema> 

schema区域配置文件说明:

配置参数配置方法解释说明
checkSQLschemacheckSQLschema=true表示检查是否使用数据库.表的方式调取数据信息
checkSQLschema=false表示忽略检查使用数据库.表的方式调取数据信息(默认已经进入到指定库中了)
sqlMaxLimit数值信息表示实现分片功能的行数限制(也可以理解为是分页功能)
dataNode字符信息表示逻辑数据库需要连接访问的后端节点信息

dataNode区域配置文件说明:

配置参数配置方法解释说明
name字符信息表示自定义的后端节点名称(与schema中的dataNode配置要相同)
dataHost字符信息表示自定义的后端主机组或实例组名称
database字符信息表示指定需要访问后端的真实数据库信息

dataHost区域配置文件说明:

配置参数配置方法解释说明
name字符信息表示自定义的后端主机组或实例组名称(与dataNode中的dataHost配置要相同)
maxCon数值信息表示服务承载的最大并发连接数(单节点 写-500~100 读-1000~10000)
minCon数值信息表示服务预先准备的连接池数量,当服务启动之后,在后端节点上自动开启的连接线程 当释放连接资源的最低值,预先准备好连接资源可以减少CPU计算压力 在数据库主节点上,可以使用show processlist命令查询到,已经准备好的sleep连接信息(通常20~50)
balance指定数值表示指定读操作的负载均衡类型,目前的应用取值有三种: 当数值为0,不开启读写分离机制,所有读操作都发送到当前可用的writeHost上; 当数值为1,全部的readHost与standby writeHost参与select语句的负载均衡 简述:当双主双从模式(M1-S1,M2-S2,M1与M2互为主备),M2 S1 S2都参与select语句的负载 当数值为2,所有读操作都随机的在writeHost、readHost上分发
writeType布尔信息表示指定写操作的负载均衡类型,目前的应用取值有两种: 当数值为0时,所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost 重新启动后已切换后的为主,切换信息记录在配置文件中(dnindex.properties) 当数值为1时,所有写操作都随机的发送到配置writeHost节点上(不推荐使用)
switchType数值信息表示主节点故障切换的方式设定 当数值为-1时,表示不自动切换; 当数值为1时,表示默认值设置,会实现自动切换; 当数值为2时,基于mysql主从同步的状态决定是否切换,心跳语句为show slave status,进行datahost切换
tempReadHostAvailable布尔信息当数值设置为1时,表示1主1从时(1个writehost,1个readhost时) 可以开启此参数,表示写节点故障时,对应读节点依然可以正常工作; 当数值设置为0时,如果2主2从时(2个writehost,2个readhost时) 可以关闭此参数,表示写节点故障时,对应读节点随之停止正常工作;

3.server.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
        <property name="useHandshakeV10">1</property>
        <property name="useOffHeapForMerge">0</property>
    </system>
   <!-- 指定mycat要连接的用户名和密码,以及需要展示的数据库,展示的数据库需要与schema配置文件中schema对齐 -->
    <user name="jczz" defaultAccount="true">
        <property name="password">12366</property>
        <!--<property name="schemas">TESTDB</property>-->
        <property name="schemas">cqshzl,proc_t</property>
        <property name="defaultSchema">cqshzl</property>
    </user>
</mycat:server>

3.mycat实现读写分离

1.配置文件修改
[root@db01 conf]# vim schema.xml

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

   <schema name="cqshzl" checkSQLschema="false" sqlMaxLimit="100" dataNode="node_cqshzl"></schema>
   -- schema表示mycat逻辑库
   <schema name="proc_t" checkSQLschema="false" sqlMaxLimit="100" dataNode="node_proc_t"></schema>
   <dataNode name="node_cqshzl" dataHost="host_cqshzl" database="cqshzl" />
    -- database 指向真实的数据库
   <dataNode name="node_proc_t" dataHost="host_cqshzl" database="proc_t" />
   <dataHost name="host_cqshzl" maxCon="4000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
      <heartbeat>select user()</heartbeat>
      <writeHost host="hostM1" url="172.16.130.8:3306" user="jczz" password="12366">
	      <readHost host="hostS1" url="172.16.9.233:3306" user="jczz" password="12366"></readHost>
	      <readHost host="hostS2" url="172.16.10.176:3306" user="jczz" password="12366"></readHost>
	      <readHost host="hostS3" url="172.16.130.11:3306" user="jczz" password="12366"></readHost>
     </writeHost>
   </dataHost> 
</mycat:schema> 


2. 在db01-3307主节点进行操作
[root@db01 ~]# mysql -S /data/3307/mysql.sock -e "source /root/world.sql"
# 重新加载修改后配置文件或重启mycat
[root@master conf]# mysql -uroot -p123456 -h 10.0.0.51 -P9066
mysql> reload @@config_all;
[root@db01 ~]# mycat restart

3. 读写分离测试操作
[root@db01~]# mysql -uroot -p123456 -h 10.0.0.51 -P8066
mysql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
|           9 |
+-------------+
1 row in set (0.05 sec)
-- 测试读效果

mysql> begin;select @@server_id;commit;
+-------------+
| @@server_id |
+-------------+
|           7 |
+-------------+
1 row in set (0.00 sec)
-- 测试写效果

三、mycat运行维护

[root@db01 ~]# mysql -uroot -p123456 -h 10.0.0.51 -P9066
mysql> show @@help;
-- 获取查看帮助信息
mysql> show @@server;
-- 查看mycat服务状态情况
mysql> show @@datanode;
-- 查看分片信息情况
mysql> show @@datasource;
-- 查看数据源信息
mysql> reload @@config;
-- 重新加载配置信息-schema.xml
mysql> reload @@config_all;
-- 重新加载配置信息-所有配置重新加载

标签:配置文件,--,读写,mycat,mysql,db01,root,数据库
From: https://blog.csdn.net/qq_37182070/article/details/140431639

相关文章

  • java连接Oracle数据库
    第一步引用ojdbc.jar 详见https://www.cnblogs.com/hailexuexi/p/15062168.html注:项目代码换路径后要重新引用 注:编译项目时也要把ojdbc6.jar打到包里 完整的java代码OracleUtil.javapackagecom.JavaRabbitMQToDataBase.dbOracle;importjava.sql.Connectio......
  • 深度解析:分库分表策略在数据库性能优化中的核心作用
        目录分库分表的核心原理分库(Sharding)分表(Partitioning)综合运用与挑战在探讨分库分表的深度理解之前,先回顾一下为什么数据库系统会面临性能瓶颈。随着互联网业务的飞速发展,数据量呈指数级增长,同时高并发的访问需求对数据库的读写性能提出了更高要求。传统的......
  • java 连接 oracle数据库时报错 Oracle JDBC驱动未找到! No suitable driver found for
    在用IDEA编写java连接Oracle时,报错:OracleJDBC驱动未找到!可这部分之前测试是好用。想来想去。哦,我把这个项目代码换过路径,问题就出在这。需要重新引用下  ojdbc6.jar架包 下面是java连接oracle的部分代码ClassNotFoundException可以捕获OracleJDBC驱动未找到的异......
  • Windows版PostgreSQL数据库下载及安装教程(关系型数据库管理系统)
    前言PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS)。PostgreSQL最初设想于1986年,当时被叫做BerkleyPostgresProject。该项目一直到1994年都处于演进和修改中,直到开发人员AndrewYu和JollyChen在Postgres中添加了一个SQL(StructuredQuery......
  • 【Redis】主从配置和读写分离实现
    主从配置Master配置修改IP:192.168.0.100,端口:6378bind0.0.0.0port6378requirepass123456#关闭持久化appendonlynosave""#允许远程连接protected-modenoSlaveA配置修改IP:192.168.0.100,端口:6377bind0.0.0.0port6377requirepass123456#主密码masteraut......
  • HSQL 数据库介绍(2)--使用
    本文主要介绍HSQLDB的基本使用,文中所使用到的软件版本:Java11.0.22、HSQLDB2.7.2。1、进程内模式直接使用JDBC连接数据库即可,如果数据库不存在会自动创建。1.1、file数据库@TestpublicvoidinProcessFile()throwsSQLException{StringdbName="test";/......
  • sqlalchemy pandas转化字典转为orm写入到sqlite数据库报错类型错误的解决办法
    使用pandas读取csv数据,然后将其转化为字典,再写入到数据库的时候,数据库总是报错类型错误,于是转为orm之前,统一转化一下类型fromsqlalchemyimportDECIMAL,Index,String,Date,Integer,Text,CHAR,SmallInteger,Float,Time,case,and_,extract,TypeDecoratorfrom......
  • 在deepin linux系统中安装sqlynx数据库管理工具
    一、官网下载:https://www.sqlynx.com/#/home/probation/SQLynx二、解压后在终端输入命令1.进入目录输入命令./maicong-sqlynx.sh2.修改权限chmod+xjdk1.8.0_351//bin/java3.安装./maicong-sqlynx.sh4.启动sudoshmaicong-sqlynx.shstart5.查询端口号taillog/......
  • 运维系列:拒绝用户‘root‘@‘172.17.0.1‘访问在本地Docker容器中运行的mysql数据库
    拒绝用户'root'@'172.17.0.1‘访问在本地Docker容器中运行的mysql数据库拒绝用户'root'@'172.17.0.1‘访问在本地Docker容器中运行的mysql数据库问题:答案:拒绝用户’root’@'172.17.0.1‘访问在本地Docker容器中运行的mysql数据库问题:我正在尝试连接到在本地Dock......
  • 12、Oracle中的其它数据库对象
    最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。视频链接:【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用如果有侵权,请联系删除,谢谢。学习目标:创建、维护和使用序列创建和维护索引创建同义词1、......