0. 准备
本文基于docker启动mysql
JDK:要求jdk必须是1.8及以上版本
MySQL:推荐mysql是5.6以上版本
1.先安装java jdk
安装包地址
Java Archive | Oraclehttps://www.oracle.com/java/technologies/downloads/archive/#JavaSE
下载(需要注册或登录一下账号)
安装jdk步骤
# 1.移动到/usr/local/java文件夹下
cp jdk-8u231-linux-x64.tar.gz /usr/local/java
# 2.解压
tar -zxvf dk-8u231-linux-x64.tar.gz
# 3.配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
# 4.source使其生效
source /etc/profile
# 5.检查
java -version
2. 启动mysql
docker run -di --name=test1_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 yuanmengqiang/mysql_utf-8:v1
docker run -di --name=test2_mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 yuanmengqiang/mysql_utf-8:v1
3.MyCat安装及启动
myCat安装
官方文档
MyCat2http://www.mycat.org.cn/
安装步骤
# 下载安装包
wget http://dl.mycat.org.cn/1.6.7.3/20190828135747/Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz
# 解压
tar -xzvf Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz
# 进入mycat目录的bin目录,启动mycat
cd /mycat/bin
./mycat start
# 停止
./mycat stop
4.链接
我这边用navicat链接
# 查看mycat账号密码
这个版本的账号密码:
账号:root
密码:123456
# 其他版本查看
Mycat重要的配置文件
sever.xml:综合配置数据库的相关信息,端口,内存占用,创建账号,密码
schema.xml:对数据库表结构的定义
rule.xml:指定相关算法,来实现不同的分片数据库
# 方式一:
cd conf
vim server.xml
# 方式二:
pycharm远程链接查看文档教程
https://mp.csdn.net/mp_blog/creation/editor?spm=1001.2101.3001.5352
5. 分表
5.1按主键范围分片rang-long
5.1.1 修改配置文件schema.xml
坑一:primaryKey="id" id要小写,不然后期分表失败,全部都有
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- TESTDB数据库给user表进行映射到dn1,dn2库中 -->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
<!-- 表-->
<table name="user" primaryKey="id" dataNode="dn1,dn2" rule="auto-sharding-long" autoIncrement="true"></table>
<!-- 如果想有多个表,继续加table,安装想要的规则即可-->
</schema>
<!-- 创建数据库lqz-->
<dataNode name="dn1" dataHost="localhost1" database="lqz"/>
<dataNode name="dn2" dataHost="localhost2" database="lqz"/>
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- url 数据库地址 -->
<writeHost host="hostM1" url="106.14.42.253:3306" user="root"
password="123456">
</writeHost>
</dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- url 数据库地址 -->
<writeHost host="hostM1" url="106.14.42.253:3307" user="root"
password="123456">
</writeHost>
</dataHost>
</mycat:schema>
5.1.2 修改rule.xml
# ctrl +f,找到自己配置的规则,我这边是auto-sharding-long
5.1.3 修改text
以上配置全部完成,重启myCat,如果用的pycharm,需要把文件同步上传,接着去navicat新建数据库即可,新建的数据库名称,跟你schema.xml中database中名称一样
5.2 一致性哈希murmur
可避免热点问题
热点问题:一直查询一个表
5.2.1 修改配置文件schema.xml
新增一段 <table name="article" dataNode="dn1,dn2" rule="sharding-by-murmur"/>
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- TESTDB数据库给user表进行映射到dn1,dn2库中 -->
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
<!-- 表-->
<!-- <table name="user" primaryKey="id" type="global" rule="auto-sharding-long" dataNode="dn1,dn2"/>-->
<table name="user" primaryKey="id" dataNode="dn1,dn2" rule="auto-sharding-long" autoIncrement="true"></table>
<!-- 如果想有多个表,继续加table,安装想要的规则即可-->
<table name="article" dataNode="dn1,dn2" rule="sharding-by-murmur"/>
</schema>
<!-- 创建数据库lqz-->
<dataNode name="dn1" dataHost="localhost1" database="lqz"/>
<dataNode name="dn2" dataHost="localhost2" database="lqz"/>
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- url 数据库地址 -->
<writeHost host="hostM1" url="106.14.42.253:3306" user="root"
password="123456">
</writeHost>
</dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- url 数据库地址 -->
<writeHost host="hostM1" url="106.14.42.253:3307" user="root"
password="123456">
</writeHost>
</dataHost>
</mycat:schema>
配置完成重启myCat,新建表即可
6. 新建数据库和表
6.1 按主键范围分片rang-long新建表
6.2 按照一致性哈希murmur新建表