DAY 129 docker
作者:互联网
1 分库分表
1 数据量到达一定程序,需要拆分
-水平拆
-垂直拆
2 水平分库,垂直分库
3 水平分表,垂直分表
4 垂直分库:不同业务的表,放到不同库
垂直分表:user表有10个字段1000万条数据,使用一对一做垂直分表
5 水平分库:以及分成4个表,分到4个库中
水平分表:4000w条数据,分到4个表中
6 分库分表方案
-hash取模和range范围方案
-range范围分,会出现热点问题,简洁好操作,扩容不需要迁移数据
-hash不存在热点问题,需要hash函数,操作复杂,但扩容迁移数据痛苦
7 mysql:做分库分表
-开源数据库中间件-MyCat,做分库分表
8 Mycat:基于 Java 开发的,实现了 MySQL 公开的二进制传输协议,巧妙地将自己伪装成一个 MySQL Server,目前市面上绝大多数 MySQL 客户端工具和应用都能兼容
9 centos上安装Mycat
-jdk1.8以上
10 centos上安装jdk 1.8
-下载tar.gz,创建文件夹
mkdir /usr/local/java
-解压
tar -zxvf jdk-8u291-linux-x64.tar.gz
-配置环境变量
#vim 打开profile
vim /etc/profile
#在最后一行输入
export JAVA_HOME=/usr/local/java/jdk1.8.0_291
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
#使配置生效
source /etc/profile
#检查
java -version
11 安装Mycat
解压即用
./mycat start
./mycat stop
./mycat console # 前台启动,错误会显示
12 在两台机器上安装mysql
docker run -di --name=test1_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
docker run -di --name=test2_mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
13 Mycat的配置文件
sever.xml:综合配置数据库的相关信息,端口,内存占用,创建账号,密码
schema.xml:对数据库表结构的定义
rule.xml:指定相关算法,来实现不同的分片数据库
14 通过range范围来分表
15 通过hash分表
最终配置文件如下
以后使用mysql客户端链接Mycat之间操作即可
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
<table name="user" primaryKey="id" dataNode="dn1,dn2" rule="auto-sharding-long" autoIncrement="true"
fetchStoreNodeByJdbc="true">
</table>
<table name="order" primaryKey="id" dataNode="dn1,dn2" rule="sharding-by-murmur" autoIncrement="true"
fetchStoreNodeByJdbc="true">
</table>
</schema>
<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="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="jdbc:mysql://106.15.189.205:3306" user="root"
password="123456">
</writeHost>
</dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="jdbc:mysql://106.15.189.205:3307" user="root"
password="123456">
</writeHost>
</dataHost>
</mycat:schema>
autopartition-long.txt
# range start-end ,data node index
# K=1000,M=10000.
0-500K=0
500K-1000K=1
2 远程链接Linux开发
本质原理就是本地一份代码,远程一份代码
本地右键执行时,使用的解释器是远程的,把结果执行完,又传递回来
标签:分库,JAVA,Mycat,mysql,分表,129,docker,HOME,DAY 来源: https://www.cnblogs.com/DEJAVU888/p/14957189.html