`

[MySQL管理] mysql数据库的分表(简单实例)

 
阅读更多

mysql数据库的分区

mysql数据库分区也叫mysql数据库分表,即当一个表中数据库非常大时,查询速度非常慢影响效率,同时也增加了io的压力,这样我们就可以用分表的形式将一个表根据一定的规则将他分成多个表,主要的分表类型有range,list,hash,key等,详细说明可以参考mysql5.1以上版本参考手册

mysql分区支持主要在5.1以上版本,如果你的mysql是5.1以上版本,查看是否支持分区的方式是:
mysql> show variables like 'h%';
+-------------------------+-----------------------+
| Variable_name           | Value                 |
+-------------------------+-----------------------+
| have_community_features | YES                   |
| have_compress           | YES                   |
| have_crypt              | YES                   |
| have_csv                | YES                   |
| have_dynamic_loading    | YES                   |
| have_geometry           | YES                   |
| have_innodb             | NO                    |
| have_ndbcluster         | NO                    |
| have_openssl            | NO                    |
| have_partitioning       | YES                   | -->>此项为yes说明支持表分区功能,如果为No则需要重新编译
| have_query_cache        | YES                   |
| have_rtree_keys         | YES                   |
| have_ssl                | NO                    |
| have_symlink            | YES                   |
| hostname                | localhost.localdomain |
+-------------------------+-----------------------+
15 rows in set (0.02 sec)

如果不支持,则需要下载mysql5.1及以上版本,重新编译安装,这里以mysql-5.1.30.tar.gz来编译安装

1.下载mysql-5.1.30.tar.gz源码,
2.解压
        tar xvzf mysql-5.1.30.tar.gz
        cd mysql-5.1.30
        ./configure --prefix=/usr/local/mysql \
        --localstatedir=/data \
        --datadir=/data \
        --with-plugins=partition    //添加分区功能

        make && make install
        cd /usr/local/mysql/bin
        ./mysql_install_db
        ./mysqld_safe &
3.安装成功,则时mysql支持分区功能

4.分区简单实例,以range分区类型为例:
create table users00 (
uid int unsigned not null auto_increment primary key,
name varchar(30) not null default "",
email varchar(30) not null default ""
)partition by range (uid)
( partition p0 values less than (10000) data directory = "/data00/" index directory = "/data00/",
partition p1 values less than (20000) data directory = "/data00/" index directory = "/data00/",
partition p2 values less than (30000) data directory = "/data00/" index directory = "/data00/",
partition p3 values less than maxvalue data directory = "/data00/" index directory = "/data00/"
);
该表分区类型为range,分为4个区,uid为0~10000在p0区,10001~20000在p1区 ...
查看users00表所在的数据目录:
....
-rw-rw---- 1 root root   8620 Nov 22 14:47 users00.frm
-rw-rw---- 1 root root     32 Nov 22 14:47 users00.par
lrwxrwxrwx 1 root root     24 Nov 22 14:47 users00#P#p0.MYD -> /data00/users00#P#p0.MYD
lrwxrwxrwx 1 root root     24 Nov 22 14:47 users00#P#p0.MYI -> /data00/users00#P#p0.MYI
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p1.MYD -> /data00/users00#P#p1.MYD
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p1.MYI -> /data00/users00#P#p1.MYI
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p2.MYD -> /data00/users00#P#p2.MYD
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p2.MYI -> /data00/users00#P#p2.MYI
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p3.MYD -> /data00/users00#P#p3.MYD
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p3.MYI -> /data00/users00#P#p3.MYI
....

此时表数据已经达到了物理分区,这样可以减少同一目录的IO,同时由单表的3w记录下降到了单表1w的数据量,这样查询起来效率更高

5.分区的修改和合并

以下是将p0分区再分割成2分区s0,s1的例子:

mysql> alter table users00 reorganize partition p0 into( partition s0 values less than (3999) data directory='/data00/' index directory='/data00/', partition s1 values less than (10000) data directory='/data00/' index directory='/data00/' );
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
分割成功,查看/data00/数据目录:
.....
-rw-rw---- 1 root root   8620 Nov 22 15:01 users00.frm
-rw-rw---- 1 root root     40 Nov 22 15:01 users00.par
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p1.MYD -> /data00/users00#P#p1.MYD
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p1.MYI -> /data00/users00#P#p1.MYI
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p2.MYD -> /data00/users00#P#p2.MYD
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p2.MYI -> /data00/users00#P#p2.MYI
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p3.MYD -> /data00/users00#P#p3.MYD
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p3.MYI -> /data00/users00#P#p3.MYI
lrwxrwxrwx 1 root root     24 Nov 22 15:01 users00#P#s0.MYD -> /data00/users00#P#s0.MYD
lrwxrwxrwx 1 root root     24 Nov 22 15:01 users00#P#s0.MYI -> /data00/users00#P#s0.MYI
lrwxrwxrwx 1 root root     24 Nov 22 15:01 users00#P#s1.MYD -> /data00/users00#P#s1.MYD
lrwxrwxrwx 1 root root     24 Nov 22 15:01 users00#P#s1.MYI -> /data00/users00#P#s1.MYI
......

以下是合并s0,s1分区为p0分区

mysql> alter table users00 reorganize partition s0,s1 into( partition p0 values less than(10000) data directory="/data00/" index directory="/data00/");
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

此时s0,s1又合并成了p0分区
....
-rw-rw---- 1 root root   8620 Nov 22 15:04 users00.frm
-rw-rw---- 1 root root     32 Nov 22 15:04 users00.par
lrwxrwxrwx 1 root root     24 Nov 22 15:04 users00#P#p0.MYD -> /data00/users00#P#p0.MYD
lrwxrwxrwx 1 root root     24 Nov 22 15:04 users00#P#p0.MYI -> /data00/users00#P#p0.MYI
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p1.MYD -> /data00/users00#P#p1.MYD
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p1.MYI -> /data00/users00#P#p1.MYI
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p2.MYD -> /data00/users00#P#p2.MYD
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p2.MYI -> /data00/users00#P#p2.MYI
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p3.MYD -> /data00/users00#P#p3.MYD
lrwxrwxrwx 1 root root     24 Nov 22 14:39 users00#P#p3.MYI -> /data00/users00#P#p3.MYI
....

详细的分区信息及功能介绍请参考mysql参考手册,里面有非常详细的介绍,
我这里只是简单的实现,很多地方都不够详细,只作为数据库分表及数据分离的参考 

 

分享到:
评论

相关推荐

    TP5+MySQL通用分表代码

    - 很简单,网上很多关于分表的都是含糊其辞,没有任何详细的,通用的,既然没有,那么我写一个出来吧。 - 主要目的 - 产品上线以后,数据量越来越大,当一个表有几十万上百万条记录的时候,是时候考虑分表了。...

    php mysql分库分表实例

    php分库分表

    MySQL数据库优化之分表分库操作实例详解

    主要介绍了MySQL数据库优化之分表分库操作,结合实例形式详细分析了mysql数据库分表分库垂直拆分、水平拆分相关原理以及应用案例,需要的朋友可以参考下

    Mysql分库分表实例-Sub-LibriryTable.zip

    Mysql分库分表实例-Sub-LibriryTable

    mysql 分表

    关于mysql的分表技术实现方法。以及分表设计, 及简单的代码实例。

    基于hibernate的mysql分表分库实例-mysql-cluster-hibernate.zip

    基于hibernate的mysql分表分库实例-mysql-cluster-hibernate

    新版 MySQL DBA 高级视频 基于MySQL 5.7 MySQL 8.0版本.rar

    │ 第七课MySQL数据库设计.pdf │ 第三十一课percona-toolkits 的实战及自动化.pdf │ 第三课MySQL授权认证.pdf │ 第九课MySQL字符集.pdf │ 第二十一课MySQL常见错误-converted.pdf │ 第二十课MySQL索引和调优....

    MySQL数据库实战例子(存储引擎、视图、锁机制、分表)

    本例子主要以存储引擎、视图、存储函数、锁机制、分表为主,并且配以对应的博客全面解析。 这个例子的博客系列在这里:http://blog.csdn.net/Jack__Frost/article/category/6998564

    shards-jdbc分库分表实例

    shards-jdbc分库分表实例 dataSources: ds0: !!org.apache.commons.dbcp.BasicDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ds0 username: root password: ...

    MySQL运维与管理相关文档.rar

    资源来自互联网,包括 1、MySQL 5.7 多实例单配置 & 多实例多配置文件安装 2、MySQL分区实战以及分区的管理 3、MySQL 数据库基本命令汇总整理,需要的赶紧学起来

    MyCat测试报告(单机MySQL与通过MyCat分表后的对比情况)1

    测试方法: 简单分表测试,16张表分别放在单台MySQL对比两台机器四个实例每个实例4张表的MySQL(使用mycat作为中间件),3600秒的时间分别在16、

    一个MySQL存储引擎插件 它能够在 cantian 存储引擎的帮助下将MySQL 实例形成一个多读多写的透明集群

    它能够在无侵入的情况下将16个(或更多)MySQL实例组成一个多读多写的应用透明集群,并借助Cantian数据存储引擎提供更高的OLTP性能以及更强的高可用能力。这将使MySQL单机的应用无需进行(分库分表等)改造就可以...

    MYSQL数据库表结构优化方法详解

    本文实例讲述了MYSQL数据库表结构优化方法。分享给大家供大家参考,具体如下:  选择合适的数据类型  1、使用可以存下你的数据的最小的数据类型  2、使用简单的数据类型。Int要比varchar类型在mysql处理上简单 ...

    mysql分区功能详解,以及实例分析

    前段时间写过一篇关于mysql分表的 的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面 (可以通过my.cnf中的datadir来查看),一张表...

    incepiton-mysql:专为mysql初始化而设计的Web平台

    数据库实例查看,申请,取消 工单查看,申请,取消,修改 工单状态,数量可视化展示 审核功能 数据库实例查看,分配,撤销 工单查看,取消,驳回,执行,定时执行 支持pt-online-schema-change工具,大表可进行在线...

    MySQL复制(四)—多源(主)复制

    通常用于数据仓库整合数据,比如OLTP系统为了分散业务压力,对业务进行分库分表,当要对数据进行分析的时候,可以使用多主复制将数据整合到同一个数据库实例上,便于统一分析。MySQL从5.7版本开始支持多主复制。 ...

    基于SSM的人大机关办公管理系统.zip

    同时,为了保证数据安全性,系统采用了分库分表策略,将数据分散存储在不同的数据库实例中。在功能模块方面,系统包括以下几个主要模块:登录注册模块:用户可以通过该模块实现登录和注册功能,便于系统管理员管理和...

    在OneProxy的基础上实行MySQL读写分离与负载均衡

    采用与MySQL Proxy一致的反向协议输出模式,对应用非常简单和透明易用,让用户畏惧的数据库故障切换(Failover)、读写分离(Read/Write Split)、分库分表(Horizontal Partitioning)等复杂方案变得极其简单可控!...

    C基础 mariadb处理的简单实例

    现在数据库中表示按照天分表的. 突然我们需要按照月来处理数据. 例如输入一个玩家id, 查找这个玩家这个月内看了一件事几次. 我们先搭建一个环境. 操作系统: Linux version 4.4.0-22-generic (buildd@lgw01-41) ...

Global site tag (gtag.js) - Google Analytics