共计 3737 个字符,预计需要花费 10 分钟才能阅读完成。
一,什么是 mycat
一个彻底开源的,面向企业应用开发的大数据库集群
反对事务、ACID、能够代替 MySQL 的加强版数据库
一个能够视为 MySQL 集群的企业级数据库,用来代替低廉的 Oracle 集群
一个交融内存缓存技术、NoSQL 技术、HDFS 大数据的新型 SQL Server
联合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新鲜的数据库中间件产品
以上是官网阐明。其实就是数据库的连接池。mysql proxy 也是一种连接池,然而效率很低。
二,mycat 装置
1,下载地址 mycat
http://dl.mycat.io/
2,装置 mycat
# tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
三,配置 mycat
1,配置 server.xml
# vim /usr/local/mycat/conf/server.xml // 增加以下内容
<user name= “user” > //mycat 用户名
<property name= “password” >user< /property > //mycat 明码
<property name= “schemas” >mytest< /property > //mycat 虚构数据库名
<property name= “readOnly” > true < /property > // 只读
< /user >
<user name= “tankzhang” >
<property name= “password” >admin< /property >
<property name= “schemas” >mytest< /property >
< /user >
在这里要留神,默认的虚构数据名是 TESTDB,如果 schema.xml 外面没有配置 testdb,那就要把 testdb 改成 schema.xml 外面有的虚构数据名。这里定义的用户名和明码,虚构数据库名,并不是在 mysql 中实在存在的。
2,配置 schema.xml
# cat schema.xml
<?xml version= “1.0” ?>
<!DOCTYPE mycat:schema SYSTEM “schema.dtd” >
<mycat:schema xmlns:mycat= “http://io.mycat/” >
<schema name= “mytest” checkSQLschema= “false” sqlMaxLimit= “100” dataNode= “my1” /> // 定义虚构数据库名 mytest
<dataNode name= “my1” dataHost= “test1” database= “test” /> // 实在数据库名 test
<dataHost name= “test1” maxCon= “1000” minCon= “10” balance= “1” writeType= “0” dbType= “mysql” dbDriver= “native” >
<heartbeat> select user()< /heartbeat >
<writeHost host= “hostM1” url= “192.168.5.213:3306” user= “tank” password= “123456” > // 实在数据库的连贯形式
<readHost host= “hostS1” url= “192.168.5.214:3306” user= “tank” password= “123456” /> // 同上
< /writeHost >
< /dataHost >
< /mycat :schema>
mycat 的配置参数,相当的多。重点说一下 balance=”1″ 与 writeType=”0″
a. balance 属性负载平衡类型,目前的取值有 4 种:
- balance=”0″, 不开启读写拆散机制,所有读操作都发送到以后可用的 writeHost 上。
- balance=”1″,全副的 readHost 与 stand by writeHost 参加 select 语句的负载平衡,简略的说,当双主双从模式 (M1 ->S1,M2->S2,并且 M1 与 M2 互为主备),失常状况下,M2,S1,S2 都参加 select 语句的负载平衡。
- balance=”2″,所有读操作都随机的在 writeHost、readhost 上散发。
- balance=”3″,所有读申请随机的散发到 wiriterHost 对应的 readhost 执行,writerHost 不累赘读压力,留神 balance=3 只在 1.4 及其当前版本有,1.3 没有。
b. writeType 属性
负载平衡类型,目前的取值有 3 种:
- writeType=”0″, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
- writeType=”1″,所有写操作都随机的发送到配置的 writeHost。
- writeType=”2″,没实现。
具体参数:http://mycat.io/document/Myca…
3,配置主从服务器,就不在这儿说了,博客中有
4,增加实在用户
grant all privileges on test .* to tank@ “192.168.%” identified by ‘123456’ ;
flush privileges
在 213,214 二台机器上增加用户。
5,测试实在用户连贯,确保 schema.xml 中配置的实在用户,能连上实在的数据库。留神防火墙。
四,启动 mycat
1,罕用参数
./mycat start 启动
./mycat stop 进行
./mycat console 前台运行
./mycat restart 重启服务
./mycat pause 暂停
./mycat status 查看启动状态
2,启动,并查看 mycat
# ./mycat start
Starting Mycat-server…
# netstat -tpnl |grep 8066
tcp 0 0 :::8066 :::* LISTEN 31728 /java
# ./mycat status
Mycat-server is running (31726).
五,测试读写拆散
# mysql -u tankzhang -p -P 8066 -h 127.0.0.1 // 肯定要带上 127.0.0.1
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB)
Copyright (c) 2000, 2016, Oracle and /or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and /or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> show databases; | |
---|---|
DATABASE | |
mytest | // 虚构数据库 |
1 row in set (0.00 sec)
mysql> use mytest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> CREATE TABLE IF NOT EXISTS user
(
-> id
int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘ID’ ,
-> name
varchar(20) NOT NULL DEFAULT ” COMMENT ‘ 姓名 ’ ,
-> create_time
int(10) NOT NULL DEFAULT ‘0’ COMMENT ‘ 创立工夫 ’ ,
-> PRIMARY KEY ( id
)
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Query OK, 0 rows affected (0.08 sec)
Database changed
mysql> show tables; |
---|
Tables_in_test |
user |
1 row in set (0.01 sec)
mysql> INSERT INTO user
( id
,name
)VALUES (‘1’ , ‘tank’);
Query OK, 1 row affected (0.00 sec)
mysql> select * from user; // 批改从数据库的 user 表中的 name, 会发现读是从从数据库读取的 | ||
---|---|---|
id | name | create_time |
1 | tankzhang | 0 |
1 row in set (0.01 sec)
六,小结
mycat 反对 mysql 的分表,分片等等,然而不倡议应用。mycat 反对的集群不多,如果能配合 mha 应用就比拟牛 B 了。
关键词:java 培训