mycat小白分片初体验

来源:互联网 发布:算法 知乎 编辑:程序博客网 时间:2024/06/14 09:34

本文主要内容为部署MySQL,Mycat,完成Travelrecord表的创建、查询、路由分析。

其实是学习mycat入门的第一个作业,写这个作业的时候,查阅了很多篇文档,才完成,所以想写一篇适合小白使用的傻瓜文档,大神们请出门左转。

楼主还是6年前用过mysql,基本忘光了,mycat也是初次使用,写的比较细。

1.安装mysql

1.1安装MySQL

下载mysql-5.6.37-winx64.zip(https://dev.mysql.com/downloads/mysql/5.5.html#downloads

),直接解压,复制到某个目录,比如C:\mysql-5.6.37-winx64

1)my.ini配置

将解压目录下默认文件my-default.ini拷贝一份,改名 my.ini
   
复制下面的配置信息到 my.ini保存
    #
如果没有my-default.ini,可自己新建my.ini或者从其他地方中获取
#########################################################

    [client]
    port=3306
    default-character-set=utf8
    [mysqld]
    port=3306
    character_set_server=utf8
    basedir= C:\mysql-5.6.37-winx64
    #
解压目录
    datadir=
C:\mysql-5.6.37-winx64\data
    #
解压目录下data目录
   sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    [WinMySQLAdmin]
    C:\mysql-5.6.37-winx64\bin\mysqld.exe
#########################################################

2)增加环境变量

新建MYSQL_HOME,值为C:\mysql-5.6.37-winx64

PATH中增加%MYSQL_HOME%\bin

3)mysql注册为windows系统服

从控制台进入到MySQL解压目录下的 bin目录下,

比如  cd C:\mysql-5.6.37-winx64

输入服务安装命令:
    
mysqld installMySQL --defaults-file=" C:\mysql-5.6.37-winx64\my.ini"

#移除服务命令为:mysqld remove

1.2启动MySQL服务, 设置root用户密码;创建test/test用户

net start mysql

设置root用户密码

 mysql –uroot


    mysql>show databases;

    mysql>use mysql;
    mysql>UPDATE user SETpassword=PASSWORD("123456") WHERE user='root';
    mysql>FLUSH PRIVILEGES;
    mysql>QUIT

查看当前用户

SELECT User, Host, Password FROM mysql.user;

新增test用户(后面的测试要用到这个用户)

insert intomysql.user(Host,User,Password) values("localhost","test",password("test"));

我的机器这一句报错,提示插入失败,按提示写了下面的命令

insert intomysql.user(Host,User,Password,ssl_cipher, x509_issuer,X509_subject)values("localhost","test",password("test"),""," "," ");

还有一些权限默认为 N了,记得到mysql   的user表里面,把test这一行的一些属性设为Y.

都设置成功后,退出来,再用test用户进来看看

mysql -utest -p


2安装Mycat

2.1本机预装JDK1.7或者以上

我的机器上1.7 1.8都有,怎么装JDK,配环境变量,就不赘述了。

2.2下载Mycatfor  widows ,我下载的是1.6

网址:http://dl.mycat.io




解压之后复制mycat目录到某个盘根目录,比如C盘。

cd c:\mycat\bin

mycatstart


常用命令:mycat status


mycat stop

如果出错了,或者失败,去mycat home目录的logs文件夹,看wrapper.log和mycat.log

2.3 mycat启动错误

The Mycat-server service was launched, but failed to start
 
错误一:Error: missing `server' JVM at `C:\Program Files (x86)\Java\jre1.8.0_131\bin\server\jvm.dll'.
解决办法:修改wrapper.conf,指向本机默认Java地址
wrapper.java.command= C:\Java\jdk1.8.0_92\bin\java.exe

错误二:Caused by: io.mycat.config.util.ConfigException: SelfCheck###  schema testdb refered by user test is not exist!
解决办法:Server.xml 不要写小写的 testdb, 要写大写的TESTDB

2.4配置Mycat连接mysql

修改MYCAT_HOME/conf/schema.xml文件,修改dataHost对应的连接信息(这里的用户名密码是要访问的mysql的用户名密码):




修改MYCAT_HOME/conf/servel.xml


3分片实验

3.1用mysql test用户创建db1,db2,db3

mysql -utest –p 

或mysql -utest -p -P3306


3.2用mycat插入数据

mysql -utest -p –P8066

 (mycat 使用的是8066 端口,使用这个命令之前,请确保mycat 服务打开了,比如进入mycat目录,mycat status看看)

use TESTDB;


分片规则定义在MYCAT_HOME/conf/schema.xml,Travelrecord 分片规则是auto-sharding-long,并且会分到dn1,dn2,dn3三个data node,对应物理库名为db1,db2,db3.



创建表

create table travelrecord (id bigint not null primarykey,user_id varchar(100),traveldate DATE, fee decimal,days int);

插入数据

insert into travelrecord(id,user_id,traveldate,fee,days) values(100002, 'sq', '2017-08-08',500.0,2);
insert into travelrecord(id,user_id,traveldate,fee,days) values(2000001, 'alice', '2017-08-08',500.0,3);
insert into travelrecord(id,user_id,traveldate,fee,days) values(5008, 'xh', '2017-08-08',400.0,3);
insert into travelrecord(id,user_id,traveldate,fee,days) values(60001, 'xy', '2017-08-08',400.0,3);
insert into travelrecord(id,user_id,traveldate,fee,days) values(70001, 'jerry', '2017-08-08',400.0,3);
insert into travelrecord(id,user_id,traveldate,fee,days) values(800001, 'jerry', '2017-08-08',400.0,3);
insert into travelrecord(id,user_id,traveldate,fee,days) values(9000004, 'hi', '2017-08-08',250.0,3);
insert into travelrecord(id,user_id,traveldate,fee,days) values(9000104, 'hinihao', '2017-08-08',250.0,3);
insert into travelrecord(id,user_id,traveldate,fee,days) values(10000004, 'hello', '2017-08-08',600.0,3);
insert into travelrecord(id,user_id,traveldate,fee,days) values(10010005, 'helloworld', '2017-08-08',300.0,1);

3.3查询数据

在mycat后台的db上面,路由看到是分在3个片上面,
explain select * from Travelrecord;


单个路由分析:

explain select * from Travelrecord  where id=100002 ; 

explain select * from Travelrecord  where id=9000104 ; 

explain select * from Travelrecord  where id=10000004;


3.4回到mysql,看物理库的数据

exit;
mysql –utest –p
select * from db1.travelrecord;


select * from db2.travelrecord;


select * from db3.travelrecord;



致此,路由分析完成。

欢迎拍砖。