一、 相关概念

1)什么是分库分表

将存放在一台数据库服务器中的数据,按照特定方式进行拆分,

分散存放到多台数据库服务器中,以达到分散单台服务器负载的效果

2)分库分表分割方式

垂直分割(纵向切分)

按业务类型分类,将存储在一个库里的表分别存储到不同的数据库器里

水平分割(横向切分)

将表记录按行切分,分散存储到多个数据库服务器表中。

3) MyCAT软件介绍(提供数据分库分表存储的服务软件(中间件))

mycat是基于Java的分布式数据库系统中间件,为高并发环境的分布式存储提供解决方案

适合数据大量写入的存储需求

支持MySQL、Oracle、Sqlserver、Mongodb等

提供数据读写分离服务

提供数据分片服务

基于阿里巴巴Cobar进行研发的开源软件

4) 提供的10种分片规则

1 枚举法 sharding-by-intfile

2 固定分片 rule1

3 范围约定 auto-sharding-long

4 求模法 mod-long

5 日期列分区法 sharding-by-date

6 通配取模 sharding-by-pattern

7 ASCII码求模通配  sharding-by-prefixpattern

8 编程指定 sharding-by-substring

9 字符串拆分hash解析 sharding-by-stringhash

10 一致性hash   sharding-by-murmur

5) 分片服务器的工作过程;当mycat收到一个SQL命令时

第一步:解析SQL命令涉及到的表

第二步:根据表使用分片规则的计算结果(看对表的配置,如果有分片规则,则获取SQL命令里分片字段的值,并匹配分片函数,获得分片列表)

第三步:将SQL命令发往对应的数据库服务器去执行

第四步:最后收集和处理所有分片结果数据,并返回到客户端

6) 存储的拓扑结构

192.168.4.50 主机做客户端 只有mysql命令就可以  数据库服务不需要

准备新的服务ip地址192.168.4.56  做mycat分片服务器

关 firewalld   selinux   不需要安装任何数据库服务软件。如果安装了的话 不运行数据库服务即可

准备3台新的数据库服务器  192.168.4.53 /54 /55

(如果有相同Ip地址的数据库服务器要删除、重新准备3台新的数据库服务器 数据库管理员本机登录密码123qqq...A)

二、部署mycat服务(192.168.4.56)

第一步:安装软件

[root@maxscale56 ~]# yum  -y   install  java-1.8.0-openjdk.x86_64
[root@maxscale56 ~]# tar -xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
[root@maxscale56 ~]# mv mycat/ /usr/local/
[root@maxscale56 ~]# ls /usr/local/mycat/
bin  catlet  conf  lib  logs  version.txt

第二步:了解安装目录文件列表

bin              //mycat命令catlet         //扩展功能 conf         //配置文件.txt  和 ..properties 结尾的是 分片规则配置文件.xml 结尾的是 mycat服务配置文件lib        //mycat使用的jar包logs          //mycat启动日志和运行日志version.txt  //mycat软件 说明文件

XML  扩展标记语言   的格式特点     有开始有结束   标签有单标签和双 标签

<!--    -->   注释符号  可以注释1行 也可以注释多行

第三步:修改配置文件 

#定义客户端连接56主机时使用的用户名密码 及 逻辑库名(虚拟库名)

host56]# vim /usr/local/mycat/conf/server.xml   (使用默认配置即可)
<user name="root"> 用户名
<property name="password">123456</property> 密码<property name="schemas">TESTDB</property>  虚拟库名
</user><user name="user"> 用户名<property name="password">user</property> 密码<property name="schemas">TESTDB</property> 虚拟库名<property name="readOnly">true</property> 只读访问权限</user>
:wq

设置分片存储数据的表 schema.xml 文件格式说明

]# vim /usr/local/mycat/conf/schema.xml     #定义存储数据的表名 定义表存储数据使用的分片规则 存储数据的 数据库服务ip
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">#定义分片存储数据的表
<schema ....>
<table   name="表名" dataNode="数据库要存储在几台服务器里" rule="分片规则名"     / ><table ...>
....
</table>
</schema>#定义数据库服务器主机名
<dataNode  name="第几台数据库服务器"  dataHost="主机名"  database="库名" />#定义数据库服务器ip地址
<dataHost .....    >......
</dataHost>
</mycat:schema>    

修改前schema.xml的准备工作

]# cp /usr/local/mycat/conf/schema.xml  /root/      #备份源文件[root@maxscale56 ~]# sed -i '56,77d' /usr/local/mycat/conf/schema.xml #删除无用的行
[root@maxscale56 ~]# sed -i '39,42d' /usr/local/mycat/conf/schema.xml #删除无用的行    

修改schema.xml文件的如下内容

]#vim  /usr/local/mycat/conf/schema.xml     <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" /><table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="sharding-by-intfile" /><table name="customer" primaryKey="ID" dataNode="dn1,dn2,dn3"  rule="sharding-by-intfile">#定义3台数据库服务器的主机名<dataNode name="dn1" dataHost="mysql53" database="db1" />  第一台<dataNode name="dn2" dataHost="mysql54" database="db2" />  第二台<dataNode name="dn3" dataHost="mysql55" database="db3" />  第三台
#指定名称叫mysql53主机的ip地址
<dataHost name="mysql53"   ...... >  ......<writeHost host="hostM1" url="192.168.4.53:3306" user="pljadmin" password="123qqq...A"> </writeHost>
</dataHost>#指定名称叫mysql54主机的ip地址
<dataHost name="mysql54"   ...... > ......<writeHost host="hostM2" url="192.168.4.54:3306" user="pljadmin" password="123qqq...A"></writeHost>
</dataHost>  #指定名称叫mysql55主机的ip地址
<dataHost name="mysql55"   ...... >  ......<writeHost host="hostM3" url="192.168.4.55:3306" user="pljadmin" password="123qqq...A"></writeHost>
</dataHost>
:wq

schema.xml  配置后的内容

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"><table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /><table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" /><table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" /><table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"rule="mod-long" /><table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"rule="sharding-by-intfile" /><table name="customer" primaryKey="ID" dataNode="dn1,dn2,dn3"rule="sharding-by-intfile"><childTable name="orders" primaryKey="ID" joinKey="customer_id"parentKey="id"><childTable name="order_items" joinKey="order_id"parentKey="id" /></childTable><childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"parentKey="id" /></table></schema><dataNode name="dn1" dataHost="mysql53" database="db1" /><dataNode name="dn2" dataHost="mysql54" database="db2" /><dataNode name="dn3" dataHost="mysql55" database="db3" /><dataHost name="mysql53" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.4.53:3306" user="pljadmin" password="123qqq...A"></writeHost></dataHost><dataHost name="mysql54" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM2" url="192.168.4.54:3306" user="pljadmin" password="123qqq...A"></writeHost></dataHost><dataHost name="mysql55" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM3" url="192.168.4.55:3306" user="pljadmin" password="123qqq...A"></writeHost></dataHost>
</mycat:schema>

配置数据库服务器 

 # 添加用户pljadmin[root@host55 mysql]# mysql -uroot -p123qqq...A  -e   'grant all on  *.*  to pljadmin@"%" identified by "123qqq...A"'[root@host54 mysql]# mysql -uroot -p123qqq...A   -e   'grant all on  *.*  to pljadmin@"%" identified by "123qqq...A"'[root@host53mysql]# mysql -uroot -p123qqq...A   -e   'grant all on  *.*  to pljadmin@"%" identified by "123qqq...A"'

创建存储数据的库

[root@host53 ~]# mysql -uroot -p123qqq...A -e 'create database db1'
[root@host54 ~]# mysql -uroot -p123qqq...A -e 'create database db2'
[root@host55 ~]# mysql -uroot -p123qqq...A -e 'create database db3'

启动56主机的mycat服务

做启动服务准备 :

1)验证数据库服务器的授权用户

[root@host56 ~]# which  mysql || yum -y install mariadb
[root@host56 ~]# mysql -h192.168.4.53 -upljadmin  -p123qqq...a
[root@host56 ~]# mysql -h192.168.4.54 -upljadmin  -p123qqq...a
[root@host56 ~]# mysql -h192.168.4.55 -upljadmin  -p123qqq...a    

2)定义主机名

 [root@host56 ~]# hostname host56
[root@host56 ~]# echo  host56  > /etc/hostname

3) 56虚拟机的内存不能小于1G

启动mycat服务

[root@host56 mycat]# /usr/local/mycat/bin/mycat  start
Starting Mycat-server...
[root@host56 mycat]# 

查看日志 文件

[root@host56 mycat]# ls /usr/local/mycat/logs/
mycat.log  mycat.pid  wrapper.log
[root@host56 mycat]#

查看端口号

[root@host56 mycat]# netstat  -utnlp  | grep 8066
tcp6       0      0 :::8066                 :::*                    LISTEN      1808/java

停止服务的命令  

[root@host56 mycat]# /usr/local/mycat/bin/mycat  stop
Stopping Mycat-server...
Stopped Mycat-server.
[root@host56 mycat]# netstat  -utnlp  | grep 8066 服务停了端口没有了 [root@host56 mycat]# ls /usr/local/mycat/logs/   pid 号文件也没了
mycat.log  wrapper.log
[root@host56 mycat]#        

服务没有启动的排错方法

查看日志文件获取报错信息

vim  /usr/local/mycat/logs/wrapper.log

三、测试分片服务器56的配置

在客户端连接mycat服务器 查看 库和表

[root@host50 ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.00 sec)
mysql> use TESTDB;
Database changed
mysql>
mysql> show  tables;
+------------------+
| Tables in TESTDB |
+------------------+
| company          |
| customer         |
| customer_addr    |
| employee         |
| goods            |
| hotnews          |
| orders           |
| order_items      |
| travelrecord     |
+------------------+
9 rows in set (0.00 sec)mysql>
#这些表示不存在的 ,要存储数据 需要根据 表使用的分片规则建表后 才能存储数据mysql> select  * from goods;
ERROR 1146 (42S02): Table 'db3.goods' doesn't exist
mysql>
mysql> exit;
Bye
[root@host50 ~]#     

五 建表 并存储数据

1、常用分片规则的工作过程(支持的分片规则共有10种)

枚举分片规则 (sharding-by-intfile) :

分片字段的值   必须在 分片规则配置文件定义的值里  选择。

求模分片规则  (mod-long):

根据分片字段值   与  指定数字的取余计算结果    存储数据

2、建表存储数据(验证分片规则)

配置思路:

1 确定使用分片规则的表叫什么名字名

(查看schema.xml 文件里 <table> )

2 确定分片字段的表头名

(查看rule.xml文件里的   <tableRule> )

3 确定分片规则使用的配置文件,定义分片字段的值

(查看rule.xml文件里的   <function> )

4 修改分片规则的配置文件,定义分片字段的值

5 重启mycat服务

6 根据分片规则建表存储数据

7 在数据库服务器本机查看存储的数据

验证sharding-by-intfile工作过程

找使用sharding-by-intfile分片规则的表名

 vim  /usr/local/mycat/conf/schem.xml  <table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="sharding-by-intfile" />

创建employee分片字段名  sharding_id

 vim   /usr/local/mycat/conf/rule.xml<tableRule name="sharding-by-intfile"> 分片规则名<rule><columns>sharding_id</columns> 分片字段名<algorithm>hash-int</algorithm>   算法名  (存储数据的计算规则)</rule></tableRule>

找到sharding-by-intfile分片规则配置文件partition-hash-int.txt

    <function name="hash-int"   算法名class="io.mycat.route.function.PartitionByFileMap">  算法调用的执行程序<property name="mapFile">partition-hash-int.txt</property> 配置文件名</function>

编辑 sharding-by-intfile分片规则配置文件partition-hash-int.txt 设置 分片字段的值

host56]# vim  /usr/local/mycat/conf/partition-hash-int.txt
分片字段值=第几台数据库服务器
10000=0      # 0对应dn1     mysql53    192.168.4.53   db1
10010=1      # 1对应dn2     mysql54    192.168.4.54   db2
10020=2      # 2对应dn3      mysql54    192.168.4.54   db3
:wq[root@host56 conf]# /usr/local/mycat/bin/mycat restart
Starting Mycat-server...
[root@host56 conf]#

根据分片规则建表并存储数据

[root@host50 ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456         #连接mycat服务
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.01 sec)mysql> use TESTDB;  建表或存储数据都有进入到 TESTDB库下执行
mysql> show tables;
+------------------+
| Tables in TESTDB |
+------------------+
| company          |
| customer         |
| customer_addr    |
| employee         |
| goods            |
| hotnews          |
| orders           |
| order_items      |
| travelrecord     |
+------------------+
9 rows in set (0.00 sec)
mysql> create table employee(-> sharding_id   int  ,-> name char(10), addr  char(20) );
Query OK, 0 rows affected (1.34 sec)
mysql> insert into employee(sharding_id,name,addr) values(10000,"bob","bj");
Query OK, 1 row affected (0.05 sec)mysql> insert into employee(sharding_id,name,addr) values(10000,"bob2","bj");
Query OK, 1 row affected (0.06 sec)mysql> insert into employee(sharding_id,name,addr) values(10000,"bob3","bj");
Query OK, 1 row affected (0.03 sec)mysql> insert into employee(sharding_id,name,addr) values(10010,"tom","bj");
Query OK, 1 row affected (0.04 sec)mysql> insert into employee(sharding_id,name,addr) values(10020,"ABC","bj");
Query OK, 1 row affected (0.03 sec)mysql> insert into employee(sharding_id,name,addr) values(10020,"ABC","bj");mysql> insert into employee(sharding_id,name,addr)
values(10040,"tom","bj");
ERROR 1064 (HY000): can't find any valid datanode :EMPLOYEE -> SHARDING_ID -> 10040
超出分片字段配置文件指报错。
mysql> select  * from  empoyee;在数据库服务器本机查看数据
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'select * from db1.employee'
[root@host54 ~]# mysql -uroot -p123qqq...A -e 'select * from db2.employee'
[root@host55 ~]# mysql -uroot -p123qqq...A -e 'select * from db3.employee'

mod-long分片规则工作过程: 根据分片字段值与设定的数字求模结果存储数据

当余数是 0  数据存储到  dn1

当余数是 1  数据存储到  dn2

当余数是 2  数据存储到  dn3

创建表:必须根据表使用的分片规则建表,具体操作如下:

1 确定使用分片规则的表叫什么名字名  (查看schema.xml 文件里 <table> )

[root@maxscale56 ~]# vim /usr/local/mycat/conf/schema.xml
<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"rule="mod-long" />

2 确定分片字段的表头名 (查看rule.xml文件里的   <tableRule> )

[root@maxscale56 ~]# vim /usr/local/mycat/conf/rule.xml                 <tableRule name="mod-long"> 分片规则名<rule><columns>id</columns> 分片字段名 <algorithm>mod-long</algorithm> 算法</rule></tableRule>

3 确定分片规则使用的配置文件,定义分片字段的值 (查看rule.xml文件里的   <function> )

[root@maxscale56 ~]# vim /usr/local/mycat/conf/rule.xml<function name="mod-long" class="io.mycat.route.function.PartitionByMod"><!-- how many data nodes --><property name="count">3</property> 定义分片字段 做求模计算的数字(是数据库服务器的台数)</function>

4 重启mycat服务  (配置文件没有做过修改 ,服务不需要重启)

5 创建表并存储数据

[root@host50 ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456
mysql> use TESTDB;
mysql> create  table  hotnews(id  int  , title char(30),comment varchar(150) , worker char(3) );
mysql> insert into hotnews(id,title,comment,worker)values(9,"a","a","a");
mysql> insert into hotnews(id,title,comment,worker)values(10,"b","a","a");
mysql> insert into hotnews(id,title,comment,worker)values(11,"b","a","a");
mysql> insert into hotnews(id,title,comment,worker)values(0,"b","a","a");
mysql> insert into hotnews(id,title,comment,worker)values(1000,"d","a","a");
mysql> select  * from hotnews;
+------+-------+---------+--------+
| id   | title | comment | worker |
+------+-------+---------+--------+
|    9 | a     | a       | a      |
|    0 | d     | a       | a      |
|   11 | c     | a       | a      |
|   10 | b     | a       | a      |
| 1000 | d     | a       | a      |
+------+-------+---------+--------+
5 rows in set (0.00 sec)

在数据库服务器查看数据

[root@host53 ~]# mysql -uroot -p123qqq...A -e 'select  * from db1.hotnews'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+-------+---------+--------+
| id   | title | comment | worker |
+------+-------+---------+--------+
|    9 | a     | a       | a      |
|    0 | d     | a       | a      |
+------+-------+---------+--------+
[root@host53 ~]#
[root@host54 ~]# mysql -uroot -p123qqq...A -e 'select  * from db2.hotnews'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+-------+---------+--------+
| id   | title | comment | worker |
+------+-------+---------+--------+
|   10 | b     | a       | a      |
| 1000 | d     | a       | a      |
+------+-------+---------+--------+
[root@host54 ~]#
[root@host55 ~]# mysql -uroot -p123qqq...A -e 'select  * from db3.hotnews'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+-------+---------+--------+
| id   | title | comment | worker |
+------+-------+---------+--------+
|   11 | c     | a       | a      |
+------+-------+---------+--------+
[root@host55 ~]# 

添加新库新表

在56主机添加新库GAMEDB  新表名  user  和 salary

注意在 schema.xml 文件里 表名必须唯一 不可以重复

定义库名

[root@host56 conf]# vim /usr/local/mycat/conf/server.xml <user name="root"><property name="password">123456</property><property name="schemas">TESTDB,GAMEDB</property>  定义库名 </user><user name="user"><property name="password">user</property><property name="schemas">TESTDB,GAMEDB</property><property name="readOnly">true</property></user>
:wq

定义表名

 ]# vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">  在此行下方添加如下行 其他行不能动<schema name="GAMEDB" checkSQLschema="false" sqlMaxLimit="100">  定义库名<table name="user"  dataNode="dn1,dn2,dn3" rule="mod-long" /> 定义表名<table name="salary"  dataNode="dn1,dn2,dn3" type="global" /> 定义表名</schema>........
:wq

重启服务

[root@host56 conf]# /usr/local/mycat/bin/mycat  restart
[root@host56 conf]# netstat  -utnlp  | grep 8066
tcp6       0      0 :::8066                 :::*                    LISTEN      3301/java
[root@host56 conf]#

测试新库新表的配置

[root@host50 ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456
mysql> show databases;
+----------+
| DATABASE |
+----------+
| GAMEDB   |
| TESTDB   |
+----------+
mysql> use GAMEDB;
mysql> show tables;
+------------------+
| Tables in GAMEDB |
+------------------+
| salary           |
| user             |
+------------------+

向新添加的表里存储数据,验证分库分表存储 ,具体操作如下

创建user表并存储数据

root@maxscale56 ~]# vi /usr/local/mycat/conf/schema.xml
<table name="user" dataNode="dn1,dn2,dn3" rule="mod-long" />使用mod-long分片规则的表,必须有分片字段表头名必须叫id
[root@host50 ~]# mysql -h192.168.4.56 -P8066 -uroot -p123456
mysql》 use  GAMEDB;
mysql>  create table  user( id int  , username char(10) , password  char(6));
mysql> insert into user(id,username,password) values(17,"a","123456"),(17,"b","654321"),(17,"c","121123");
mysql> insert into user(id,username,password) values(4,"a","123456"),(4,"b","654321"),(4,"c","121123");
mysql> insert into user(id,username,password) values(9,"a","123456"),(9,"b","654321"),(9,"c","121123");#在数据库服务器本机查看数据
[root@host53 ~]# mysql -uroot -p123qqq...A -e 'select  * from db1.user'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+----------+----------+
| id   | username | password |
+------+----------+----------+
|    9 | a        | 123456   |
|    9 | b        | 654321   |
|    9 | c        | 121123   |
+------+----------+----------+
[root@host53 ~]#
[root@host54 ~]# mysql -uroot -p123qqq...A -e 'select  * from db2.user'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+----------+----------+
| id   | username | password |
+------+----------+----------+
|    4 | a        | 123456   |
|    4 | b        | 654321   |
|    4 | c        | 121123   |
+------+----------+----------+
[root@host54 ~]#
[root@host55 ~]# mysql -uroot -p123qqq...A -e 'select  * from db3.user'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+----------+----------+
| id   | username | password |
+------+----------+----------+
|   17 | a        | 123456   |
|   17 | b        | 654321   |
|   17 | c        | 121123   |
+------+----------+----------+
[root@host55 ~]#

没有使用分片规则 所以建表时,表头名没有限制

[root@maxscale56 ~]# vim /usr/local/mycat/conf/schema.xml <table name="salary" dataNode="dn1,dn2,dn3" type="global" />

创建表并存储数据

mysql> create table salary(name char(10),pay int);
mysql> insert into salary (name,pay) values("a",10);
mysql> insert into salary (name,pay) values("b",20);
mysql> select  * from  salary;
+------+------+
| name | pay  |
+------+------+
| a    |   10 |
| b    |   20 |
+------+------+
2 rows in set (0.09 sec)

在数据库服务器本机查看数据

[root@host53 ~]# mysql -uroot -p123qqq...A -e 'select  * from db1.salary'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+------+
| name | pay  |
+------+------+
| a    |   10 |
| b    |   20 |
+------+------+
[root@host52 ~]# mysql -uroot -p123qqq...A -e 'select  * from db2.salary'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+------+
| name | pay  |
+------+------+
| a    |   10 |
| b    |   20 |
+------+------+
[root@host55 ~]# mysql -uroot -p123qqq...A -e 'select  * from db3.salary'
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+------+
| name | pay  |
+------+------+
| a    |   10 |
| b    |   20 |
+------+------+

mysql---分库分表相关推荐

  1. mysql分库分表分页查询语句_MySQL分库分表分库后的查询(8th)

    前言 这边我们以使用python程序要展示一下再分库分表后,我们需要如何对数据库进行操作. python操作数据库 我们这边还是沿用之前的那5中:场景1:购买者下订单#!/usr/bin/env py ...

  2. 企业Shell实战-MySQL分库分表备份脚本

    本文来自 http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.ht ...

  3. php+mysql分库分表的哈希(hash)算法

    转自:http://itlab.idcquan.com/linux/PHP/905174.html php+mysql分库分表的哈希(hash)算法: 我们在实际开发的时候,难免会遇到大访问量的问题, ...

  4. 使用EntityFrameworkCore实现Repository, UnitOfWork,支持MySQL分库分表

    昨天(星期五)下班,19:00左右回到家,洗个澡,然后20:30左右开始写代码,写完代码之后,上床看了<生活大爆炸10季>17.18两集,发现没有更新到19集,瞄了一眼手机,竟然已经是凌晨 ...

  5. mysql 分库分表 建表,mysql 分库分表 建表MySQL常用操作

    通过命令行启动.停止MySQL服务器: start: net start mysql stop: net stop mysql 连接MySQL服务器:\>mysql -h127.0.0.1 -u ...

  6. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变...

    [Mysql主从复制] 解决的问题 数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了. 负载均 ...

  7. 如何彻底解决烦人的 MySQL 分库分表问题?写一个更好的数据库!

    作者 | 黄东旭 责编 | 郭   芮 我还清楚记得,五年前的这个时候,当时还在豌豆荚,午后与刘奇和崔秋的闲聊关于未来数据库的想象,就像一粒种子一样,到了今天看起来也竟枝繁叶茂郁郁葱葱,有点感慨.按照 ...

  8. 超实用的mysql分库分表策略,轻松解决亿级数据问题

    超实用的mysql分库分表策略,轻松解决亿级数据问题 参考文章: (1)超实用的mysql分库分表策略,轻松解决亿级数据问题 (2)https://www.cnblogs.com/xichji/p/1 ...

  9. MySQL分库分表多维度查询——比较好的方法

    转载自:http://blog.itpub.net/29254281/viewspace-2086198/ MySQL分库分表,一般只能按照一个维度进行查询. 以订单表为例, 按照用户ID mod 6 ...

  10. MySQL运维(二)MySQL分库分表概念及实战、读取分离详解

    MySQL运维(二)MySQL分库分表详解.读取分离详解 1.MySQL分库分表相关概念 1.1 分库分表概念 1.1.1 分库的原因 分库:就是一个数据库分成多个数据库,部署到不同机器. 如果业务量 ...

最新文章

  1. 分布式架构的对比-IBM XIV
  2. 企业官网建设注重这四点错不了!
  3. mySql中使用命令行建表基本操作
  4. Java的基础数据类型
  5. 【转】如何拿到半数面试公司Offer——我的Python求职之路
  6. php文件下载不完整,求帮看下这段PHP下载MP4文件的有关问题,文件下载不完整
  7. java中的mod运算_Java源码中Integer类位运算分析
  8. 本博客停止更新,后续用博客园。
  9. 升级mac Mojave系统,git无法使用
  10. 参数传值,for循环,数组,对象。
  11. (转) C#网速监测
  12. Linux批量转图,CMYK转RGB
  13. 【全面恢复受损的Word文档】
  14. python安装库之----有些库库真是小妖精
  15. java中jlaber用法_laber的for属性
  16. [七七黎]乱七八糟-美女和野兽
  17. 搜狗拼音输入法2015 v7.2f 官方版
  18. JAVA编写单例(Singleton)模式
  19. 拉格朗日对偶问题的一些介绍
  20. Maven下载及安装教程详解

热门文章

  1. 采用16线激光雷达调用cartographer室内定位
  2. 前端开发之SEO(搜索引擎优化)
  3. 组合框控件Combo Box和CComboBox类
  4. 代数与逻辑:作业三 贝叶斯决策
  5. 需求响应|动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)
  6. android icon红点,android 桌面图标消息红点
  7. git--修改用户名和邮箱的方法(全局修改和局部修改)
  8. 总线干扰神器——VH6501
  9. 全球主要的域名争议解决机构有哪些?
  10. 复杂美入选2022中国产业区块链企业100强