MyCat实现mysql读写分离

本文详细介绍如何在CentOS7环境下使用MyCat实现MySQL主从数据库的读写分离,包括环境搭建、配置文件解析及实战测试,实现高效数据库管理。

搭建参考资料:https://www.cnblogs.com/ouhouki/p/9628837.html

配置文件详解:http://www.mycat.io/document/mycat-definitive-guide.pdf

环境

Centos7

JDK8

MyCat

mysql

作用

MyCat作为一个数据库中间件,对客户端的请求进行转发到主数据库与从数据库,从而实现读写分离【前提是基于后端MySQL集群的主从同步实现的】

img

安装

分别装三台虚拟机,一台安装jdk和mycat,另外2台实现mysql主从复制(参考之前的文章进行搭建)

master-slave模式

项目          mycat             mysql_master         mysql_slave  

IP         192.168.1.102       192.168.1.25         192.168.1.28

PORT         8066/9066            3306                   3306

myCat配置

server.xml配置
 vim /opt/mycat/conf/server.xml 
<user name="root" defaultAccount="true">
                <property name="password">123456</property>
                <property name="schemas">testdb</property>
				<property name="usingDecrypt">0</property>
                <!-- 表级 DML 权限设置 -->
                <!--            
                <privileges check="false">
                        <schema name="TESTDB" dml="0110" >
                                <table name="tb01" dml="0000"></table>
                                <table name="tb02" dml="1111"></table>
                        </schema>
                </privileges>           
                 -->
        </user>

        <user name="user">
                <property name="usingDecrypt">0</property>
                <property name="password">user</property>
                <property name="schemas">testdb</property>
                <property name="readOnly">true</property>
        </user>

user:操作mycat的用户
name:账号
password:密码
schemas:数据库名
privileges:表级权限设置
readOnly :true 或 false 来限制用户对数据库是否可读写的权限,true为只读,false为读写
usingDecrypt:是否对密码加密默认 0 否 如需要开启配置 1,同时使用加密程序对密码加密,加密命令方法是执行mycat的jar程序

dml权限
说明:insert,update,select,delete为权限顺序,0表示禁止,1则允许。
server.xml配置
vim /opt/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

  <!-- 数据库配置,与server.xml中的数据库对应 -->
  <schema name="testdb" checkSQLschema="true" sqlMaxLimit="100">
    <table name="travel_record" primaryKey="id" autoIncrement="true" dataNode="dn1"/>
  </schema>
  <!-- 分片配置 -->

  <dataNode name="dn1" dataHost="host1" database="testdb"/>
  <!-- 物理数据库配置 -->
  <dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
    <heartbeat>select user();</heartbeat>
    <writeHost host="M1" url="192.168.1.25:3306" user="root" password="root">
       <readHost host="S1" url="192.168.1.28:3306" user="root" password="root"/>
    </writeHost>
  </dataHost>


</mycat:schema>

schema里的name: 对应server.xml的schemas
dataNode里的database:对应数据库名
writeHost:对应mysql_master,主服务器的数据库
readHost:对应mysql_slave,从服务器的数据库

创建数据库表

在mysql_master(192.168.1.25)进行创建,从机会自动同步过去,因为之前已经配置了主从配置。

--创建数据库
create database testdb;
--使用当前库
use testdb;
--创建测试表travel_record
CREATE TABLE IF NOT EXISTS `travel_record`(
   `id` INT(11) NOT NULL AUTO_INCREMENT,
   `org_code` VARCHAR(20) NOT NULL,
   `org_name` VARCHAR(20) DEFAULT NULL,
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
启动mycat
通过bin目录下mycat脚本启动,执行./mycat start
mycat服务器操作数据库(192.168.1.102)
mysql -h 127.0.0.1 -uroot -p123456 -P8066
mycat服务器查看mycat数据库(192.168.1.102)
mysql -h 127.0.0.1 -uroot -p123456 -P9066
使用native连接mycat

账号密码为server.xml里配置的账号密码,不是主从数据库的账号密码

注意:mycat中呈现的是逻辑表,不是存放数据的载体,当插入数据查询数据时,是从主从数据库中请求过来的。
在这里插入图片描述

在这里插入图片描述

测试

总结

在mycat服务器插入数据,查询数据,均会根据配置文件转发到主从数据库中去,实现读写分离,主从数据库如果关机,mycat服务器则失效,native客户端也无法连接到mycat。
mycat数据库中间件系统起到一个代理的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值