1. mycat是怎样实现分库分表的?
mycat里面通过定义路由规则来实现分片表(路由规则里面会定义分片字段,以及分片算法)。分片算法有多种,你所说的hash是其中一种,还有取模、按范围分片等等。在mycat里面,会对所有传递的sql语句做路由处理(路由处理的依据就是表是否分片,如果分片,那么需要依据分片字段和对应的分片算法来判断sql应该传递到哪一个、或者哪几个、又或者全部节点去执行)2. mycat适用于哪些场景?相对于海量存储的Nosql的适用场景又如何?
数据量大到单机hold不住,而又不希望调整架构切换为NoSQL数据库,这个场景下可以考虑适用mycat。当然,使用前也应该做规划,哪些表需要分片等等。另外mycat对跨库join的支持不是很好,在使用mycat的时候要注意规避这种场景。
安装 java-1.8.0-openjdk-devel 下载解压Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-mac.tar.gz //这里可以下载
[root@mhaserver30 ~]# vim /usr/local/mycat/conf/schema.xml
dataNode="dn1">
switchType="1" slaveThreshold="100">
password="123123">
password="123123" />
password="123123" />
-------
[root@mhaserver30 ~]# vim /usr/local/mycat/conf/server.xml
~
-------
[root@mhaserver30 ~]# /usr/local/mycat/bin/mycat --help
Usage: /usr/local/mycat/bin/mycat { console | start | stop | restart | status | dump }
[root@mhaserver30 ~]# /usr/local/mycat/bin/mycat start
[root@mhaserver30 ~]# ss -anplut | grep :
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.1:323 *:* users:(("chronyd",pid=482,fd=1))
tcp LISTEN 0 1 127.0.0.1:32000 *:* users:(("java",pid=1698,fd=4))
tcp LISTEN 0 128 *:10022 *:* users:(("sshd",pid=647,fd=3))
tcp LISTEN 0 50 :::32924 :::* users:(("java",pid=1698,fd=58))
tcp LISTEN 0 50 :::1984 :::* users:(("java",pid=1698,fd=55))
tcp LISTEN 0 100 :::8066 :::* users:(("java",pid=1698,fd=78))
tcp LISTEN 0 50 :::43074 :::* users:(("java",pid=1698,fd=54))
tcp LISTEN 0 100 :::9066 :::* users:(("java",pid=1698,fd=74))
-----在另一台机上测试
mhaserver30 :192.168.1.30
pc1:192.168.1.254
[root@pc1 ~]# mysql -h192.168.1.30 -P8066 -uroot -p123456 -e 'use mydb;insert into bb values(32);'
[root@room9pc01 ~]# mysql -h192.168.1.30 -P8066 -uroot -p123456 -e 'use mydb;show tables;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------+
| Tables_in_mydb |
+----------------+
| aaaa |
| bb |
| myscript |
| myusers |
+----------------+
-----完成 ,要测试,可以在/etc/my.cnf上开启log日志,然后分别写和读看在哪台机上运行了。