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开发

本质原理就是本地一份代码,远程一份代码
本地右键执行时,使用的解释器是远程的,把结果执行完,又传递回来

 

 

原文地址:https://www.cnblogs.com/DEJAVU888/p/14957189.html