这里写目录标题
Mycat入门概述
学习视频https://www.bilibili.com/video/BV1WJ411x7bD?t=613&p=22
1.1是什么
Mycat 是数据库中间件。
1、数据库中间件
中间件:是一类连接软件组件和应用的计算机软件,以便于软件各部件之间的沟通。
例子:Tomcat,web中间件。
数据库中间件:连接java应用程序和数据库
2、为什么要用Mycat?
① Java与数据库紧耦合。
② 高访问量高并发对数据库的压力。
③ 读写请求数据不一致
3、数据库中间件对比
① Cobar属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数据库的schema, 集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职,Cobar停止维护。
② Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新 的功能在其中。青出于蓝而胜于蓝。
③ OneProxy基于MySQL官方的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件。舍 弃了一些功能,专注在性能和稳定性上。
④ kingshard由小团队用go语言开发,还需要发展,需要不断完善。
⑤ Vitess是Youtube生产在使用,架构很复杂。不支持MySQL原生协议,使用需要大量改造成本。
⑥ Atlas是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。
⑦ MaxScale是mariadb(MySQL原作者维护的一个版本) 研发的中间件
⑧ MySQLRoute是MySQL官方Oracle公司发布的中间件
3、Mycat的官网 http://www.mycat.io/
1.2 干什么
1、读写分离
2、数据分片
垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)
3、多数据源整合
1.3 原理
Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL
语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户
这种方式把数据库的分布式从代码中解耦出来,程序员察觉不出来后台使用 Mycat 还是
MySQL。
安装环境
1、jdk:要求jdk必须是1.7及以上版本
2、Mysql:推荐mysql是5.5以上版本
3、Mycat:
Mycat的官方网站:
http://www.mycat.org.cn/
下载地址:
https://github.com/MyCATApache/Mycat-download
4、查看jdk版本
java -version
5、在线安装mysql:(master,slave1都要下载)
如果mysql的版本不是想要的版本。需要把mysql卸载。
yum remove mysql mysql-server mysql-libs mysql-common
rm -rf /var/lib/mysql
rm /etc/my.cnf
下载安装
Wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm //安装
yum install mysql-community-server
需要给root用户设置密码。
/usr/bin/mysqladmin -u root password 'new-password' // 为123456账号设置密码
启动mysql
systemctl start mysqld
查看版本
mysqladmin --version
登录mysql,接着输入密码
mysql -uroot -p123456
远程连接授权。
登录后执行命令
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
注意:‘myuser’、‘mypassword’ 需要替换成实际的用户名和密码。
注意:若是LINUX版本的MYSQL,则需要设置为Mysql大小写不敏感,否则可能会发生表找不到的问题。 在MySQL的配置文件中/etc/my.cnf [mysqld] 中增加一行 lower_case_table_names=1
vi /etc/my.cnf
lower_case_table_names=1
2.1 安装(在master安装)
1、下载 http://www.mycat.org.cn/
cd /usr/app
wget http://dl.mycat.org.cn/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
2、解压
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr
3、三个配置文件
①schema.xml:定义逻辑库,表、分片节点等内容
②rule.xml:定义分片规则
③server.xml:定义用户以及系统相关变量,如端口等
2.2 启动
1、修改配置文件
1)修改配置文件server.xml
cd /usr/mycat/conf
vi server.xml
2)修改配置文件 schema.xml
vi schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" 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" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.100.101:3306" user="root" password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.100.102:3306" user="root" password="123456" />
</writeHost> </dataHost>
</mycat:schema>
- 配置rule.xml
此配置文件可以不用修改,使用默认即可。
2、验证数据库访问情况
Mycat 作为数据库中间件要和数据库部署在不同机器上,所以要验证远程访问情况
master,slave1开启数据库
systemctl start mysqld
mysql -uroot -p123456 -h 192.168.100.101 -P 3306
mysql -uroot -p123456 -h 192.168.100.102 -P 3306
3、启动mycat
①控制台启动 :去 mycat/bin 目录下执行 ./mycat console
②后台启动 :去 mycat/bin 目录下 ./mycat start
cd /usr/mycat/bin
./mycat start
方便查看日志是否启动成功,用console好,成功后不能退出,退出就关闭mycat
cd /usr/mycat/bin
./mycat console
查看mycat进程
ps -ef | grep mycat
mycat 支持的命令{ console | start | stop | restart | status | dump }
Mycat的默认端口号为:8066
4、关闭
cd /usr/mycat/bin
./mycat stop
2.3 登录
1、登录后台管理窗口
此登录方式用于管理维护 Mycat
mysql -umycat -p123456 -P 9066 -h 192.168.100.101
show databses;
show @@help;
2、登录数据窗口
此登录方式用于通过 Mycat 查询数据,我们选择这种方式访问 Mycat, -umycat,是因为在rule改了,没改默认是root
mysql -umycat -p123456 -P 8066 -h 192.168.140.128