环境准备:
虚拟机192.168.152.130:
zookeeper,搭建dubbo+zookeeper+dubboadmin分布式服务框架(windows平台下)
虚拟机192.168.152.128:
安装好Mycat,具体参考前面文章Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解
本机:
搭建好zookeeper的客户端工具ZooInspector
./zkServer.sh start
vim /usr/local/mycat/conf/myid.properties
loadZk=true
zkURL=192.168.152.130:2181
clusterId=mycat-cluster-1
myid=mycat_fz_01
clusterNodes=mycat_fz_01,mycat_fz_02,mycat_fz_04
#server booster ; booster install on db same server,will reset all minCon to 1
type=server
boosterDataHosts=dn2,dn3
myid.properties配置说明:
loadZk:默认值false。代表mycat集群是否使用ZK,true表示使用
zkURL:zk集群的地址
clusterId:mycat集群名字
myid:当前的mycat服务器名称
clusterNodes:把所有集群中的所有mycat服务器罗列进行以逗号隔开,比如:clusterNodes=mycat_fz_01,mycat_fz_02,mycat_fz_03
/usr/local/mycat/bin/init_zk_data.sh
/usr/local/mycat/bin/mycat start
mysql -uroot -pdigdeep -P8066 -h192.168.152.128
use TESTDB;
show tables;
java -jar zookeeper-dev-ZooInspector.jar
连接远程zookeeper
连接成功以后可以看到mycat的树节点和mycat的安装后的conf目录下的schema.xml和rule.xml文件是对应的
保存修改,查看mycat的schema.xml配置文件,可以看到修改已经同步过来了
重启mycat,可以看到TESTDB里面有新配置的travelrecord2表
/usr/local/mycat/bin/mycat restart
http://dl.mycat.io/mycat-web-1.0/
tar -zxvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz
vim /software/mycat-web/mycat-web/WEB-INF/classes/mycat.properties
#Mon Jan 16 15:37:36 CST 2012
show.period=3000000
zookeeper=192.168.152.130:2181
mycat_warn_mail=[{"cc"\:"[email protected]","index"\:1,"mangerPort"\:"465","smtpHost"\:"smtp.139.com","smtpPassword"\:"123456","smtpProtocol"\:"smtp","smtpUser"\:"[email protected]","to"\:"[email protected]"}]
##sql\u4E0A\u7EBF\u76F8\u5173\u914D\u7F6E
sqlonline.server=192.168.80.128
sqlonline.user=root
sqlonline.passwd=123456
/software/mycat-web/start.sh
访问地址:http://192.168.152.128:8082/mycat/
保存,新增成功
保存新增成功
分别保存,新增成功
以employee表作数据迁移
1)修改employee表的分片规则为一致性hash,vim schema.xml
2)修改分布式全局唯一id方式为本地文件方式,vim server.xml
0
3)关掉ZK配置,vim myid.properties
loadZk=false
zkURL=192.168.152.130:2181
clusterId=mycat-cluster-1
myid=mycat_fz_01
clusterNodes=mycat_fz_01,mycat_fz_02,mycat_fz_04
#server booster ; booster install on db same server,will reset all minCon to 1
type=server
boosterDataHosts=dn2,dn3
4) 重启mycat
../bin/mycat restart
5) 连接mycat,并创建employee表,并插入数据
mysql -uroot -pdigdeep -P8066 -h192.168.152.128
View Code
可以看到插入了25条数据到employee里面
然后在主库(192.168.152.130)的两个分片dn1(db1),dn2(db2)上查看employee的数据
可以看到dn1上有15条数据,dn2上有10条数据
当前employee表的数据分布在dn1,dn2,迁移后要分布在dn1,dn2,dn3
1)生成一个新的schema文件,文件名newSchema.xml,同时修改dataNode="dn1,dn2,dn3"(新的分片定义)
cp schema.xml newSchema.xml
vim newSchema.xml
以前的schema.xml文件:
新的newSchema.xml:
2)生成一个新的rule文件,文件名newRule.xml,同时修改分片数为3(新的分片规则)
cp rule.xml newRule.xml
vim newRule.xml
以前的rule.xml:
新的newRule.xml:
3)修改/usr/local/mycat/conf/migrateTables.properties文件。写明要迁移的schema和表,多张表用逗号隔开
vim migrateTables.properties
#schema1=tb1,tb2,...
#schema2=all(写all或者不写将对此schema下拆分节点变化的拆分表全部进行重新路由)
#...
#sample
#TESTDB=travelrecord,company,goods
TESTDB=employee
4)停止mycat(也可以不停止mycat)
5)执行dataMigrate.sh开始迁移(扩容)。
[root@centos1 bin]# ./dataMigrate.sh
遇到的错误1:
开始执行./dataMigrate.sh 的时候报没有适合的驱动
No suitable driver found for jdbc:mysql://192.168.152.130:3306/db1 java.sql.SQLException: No suitable driver found for jdbc:mysql://192.168.152.130:3306/db1
解决方法1:
下载jar包mysql-connector-java-5.1.6.jar,然后上传到/usr/local/mycat/lib
查看主库(192.168.152.130)三个分片dn1(db1),dn2(db2),dn3(db3)上employee表的数据
可以看到数据迁移成功
6)修改newRule.xml成为rule.xml,修改newSchema.xml为schema.xml。重启mycat
./bin/mycat restart
连接mycat,查看employee表的数据
mysql -uroot -pdigdeep -P8066 -h192.168.152.128