一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的博客-优快云博客_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 查看版本
- jdk版本 1.7以上
- 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
- 34主 88从
- 修改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中:
出现如上效果即为主从复制成功。