MyCat

一MyCat是什么

Mycat 是数据库中间件。

java->mycat->mysql

数据库中间件

1 Cobar属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数据库的schema,集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职,Cobar停止维护。

2 Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新的功能在其中。青出于蓝而胜于蓝。

3 OneProxy基于MySQL官方的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件。舍弃了一些功能,专注在性能和稳定性上。

4 kingshard由小团队用go语言开发,还需要发展,需要不断完善。

5 Vitess是Youtube生产在使用,架构很复杂。不支持MySQL原生协议,使用需要大量改造成本。

6 Atlas是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。

7 MaxScale是mariadb(MySQL原作者维护的一个版本) 研发的中间件

8 MySQLRoute是MySQL官方Oracle公司发布的中间件

中间件作用

1.读写分离

2、数据分片

垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)

3、多数据源整合

4、原理

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

这种方式把数据库的分布式从代码中解耦出来,用户察觉不出来后台使用Mycat 还是MySQL。

Mycat入门教程_jieniyimiao的博客-CSDN博客_mycat 教程

hostnamectl --static set-hostname 新主机名称

修改主机名 /etc/hosts

192.168.182.34 lhf

安装mycat和主从复制配置

1.到home下面创建一个mycat文件夹

mkdir -p /usr/lhf/mycat

2.进入到mycat文件夹

cd /usr/lhf/mycat

3.使用wget下载mycat安装包

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

4.解压当前的mycat压缩包

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

此时我们的mycat安装成功了

5.配置mycat的环境变量 vi /etc/profile

export MYCAT_HOME=/usr/lhf/mycat/mycat
#修改原来的path  加上
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MYCAT_HOME/bin:$PATH

注意:

mycat 1.6    使用 java-version 查看版本

  1. jdk版本 1.7以上
  2. mysql5

mycat的server.xml里面的配置:

 <user name="root">
                <property name="password">root</property>
                <property name="schemas">TESTDB</property>
 </user>

schema.xml

注意 要给这个文件赋777的权限

chmod u+x file/folder

chmod 777 file/folder

注意的事项 表ttt在数据库test里面一定要存在

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
         <table name="ttt" dataNode="dn1" />
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="test" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.182.34:3306" user="root" password="root">

                </writeHost>
        </dataHost>
</mycat:schema>
  • 启动mycat

在任意位置执行都可以 mycat start

重启mycat:mycat restart

关闭mycat:mycat stop

验证读写分离是否成功的时候

  • 连接mycat

-P 代表的是端口号

-D 代表的是数据库的名字

-h 代表的服务器的ip

-u 代表的是用户的名字

-p 代表的是密码

mysql -uroot -proot -h192.168.221.66 -P8066 -DTESTDB

 

  • 向表ttt里面添加数据

如果数据添加之后在test里面的ttt里面也有就证明配置成功

  • 切换到test 查看对应的数据中表ttt里面有没有id=13的数据有的话就配置成功了

 

出现上面的效果即为配置成功。

主从复制:

保证两台电脑能够相互通信

    • 关闭防火墙
    • ping通

开启mysql服务

systemctl start mysqld

  1. 34主 88从
  2. 修改mysql的配置文件/etc/my.cnf

主服务器

[mysqld]
log-bin=mysql-bin   # 二进制的文件
server-id=34  # 唯一的标识  默认是1

从服务器:

log-bin=mysql-bin   # 二进制的文件
server-id=88  # 唯一的标识  默认是1

重启两台服务器中的mysql

systemctl restart mysqld

连接mysql查看主机(34)的状态

show master status;

配置从机88

在88里面连接mysql设置88的主机是谁 二进制的文件是谁 pos的值是什么 主机mysql的用户名和密码是什么

change master to master_host='192.168.182.34',
master_user='root',master_password='root',
master_log_file='mysql-bin.000002',master_log_pos=154;

master_log_file='mysql-bin 要与主机的保持一致

 

 

启动从机88

start slave;

查看从机状态

show slave status\G;

出现上面的错误是因为两个数据库中的uuid的值是一样的

查看主从的uuid是不是一样(auto.cnf)

show variables like '%server_uuid%'

 查找存放 auto.cnf的位置

 修改uuid

 

 

 

 

出现上图就是连接不是三个主机:

连接不上主机的原因:

  • 防火墙没有关闭
  • 主机的用户名和密码不对
  • 日志文件的名字不对
  • pos的值不对

正确的显示状态如下:

 

验证主从是否成功

在66的数据库中添加一条数据查看88中是否也有这个数据即可

66中:

 

88中:

 

出现如上效果即为主从复制成功。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值