`

[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参考手册,里面有非常详细的介绍,
我这里只是简单的实现,很多地方都不够详细,只作为数据库分表及数据分离的参考 

 

分享到:
评论

相关推荐

    php mysql分库分表实例

    在IT行业中,数据库管理和优化是至关重要的环节,尤其是在高并发、大数据量的场景下。"php mysql分库分表实例"这个主题就是针对这样的需求,它涉及到如何利用PHP编程语言来实现MySQL数据库的分库分表操作,以提高...

    MySQL数据库分表批量主键查询代理-mysql-partitions-proxy.zip

    "MySQL数据库分表批量主键查询代理-mysql-partitions-proxy"项目就是为了应对这一挑战而设计的。这个开源工具旨在优化数据库的查询效率,尤其在面对分表场景下的主键批量查询时,它能提供一个代理服务,有效地协调和...

    TP5+MySQL通用分表代码

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

    Python+MySQL分表分库实战

    在IT行业中,数据库管理和数据处理是至关重要的环节,特别是在大数据时代。Python作为一门广泛使用的编程语言,因其简洁的语法和强大的库支持,在数据处理领域占据了重要地位。而MySQL则是一款广泛应用的关系型...

    Mysql分库分表实例.zip

    MySQL是一种广泛使用的开源关系型数据库管理系统,其在处理大数据量时可能会遇到性能瓶颈。为了解决这一问题,"Mysql分库分表实例" 提供了一种解决方案——数据分片技术,即通过分库分表来提升数据库的读写效率。 ...

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

    总之,"基于hibernate的mysql分表分库实例"是一个解决大数据量场景下的数据库管理问题的实践案例,它结合了Hibernate的ORM便利性和MySQL集群的高可用性,对于Java开发者来说,这是一个非常有价值的参考资料。...

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

    "Mysql分库分表实例-Sub-LibriryTable"提供了一个实践性的数据库扩展解决方案,帮助应对大数据量和高并发场景下的性能挑战。通过学习这个实例,我们可以深入了解分库分表的原理、策略以及实际操作,提升在大型...

    MySQL分库分表技术

    3. **扩展性**:当系统需要扩展时,可以通过增加新的数据库实例来提高处理能力,而无需重构整个数据库架构。 **二、分库分表类型** 1. **垂直分库**:根据业务领域或数据关联性,将相关表划分为不同的数据库。例如...

    MySQL 分库分表的实现原理及演示案例

    在进行分库分表时,开发者和数据库管理员需要注意数据一致性、事务管理、以及数据迁移等问题。在数据一致性方面,需要考虑到分布式环境下CAP理论的限制,即在保证数据一致性的同时,可能要牺牲系统的可用性或分区...

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

    总之,MySQL数据库的分表分库优化是应对高并发、大数据量场景的有效手段。通过对数据的合理拆分,可以显著提升系统的响应速度和可扩展性。在实施分表分库时,需根据业务需求和现有架构进行综合考虑,确保既能优化...

    达梦数据库使用,包括安装,配置,适配Mysql、备份与还原

    接着,打开数据库配置助手创建数据库实例,建议把页大小设置大一点,以免记录超过页大小需要设置表的开启长记录设置。 对于 Docker 部署,需要编写 Compose 配置文件,版本为 3。服务 dmdbms 的镜像为 dm8_single:...

    mysql分表分库demo

    在 MySQL 中,分表分库可以从三个方面来评估数据体量:表容量、磁盘空间、实例容量。表容量主要从表的记录数、平均长度、增长量、读写量、总大小量进行评估。一般来说,对于 OLTP 的表,不要超过 2000W 行数据量,总...

    去年底写的mysql分库分表中间件heisenberg

    Heisenberg是一款开源的MySQL分库分表中间件,它能够帮助开发者实现数据库的水平扩展,提升系统的处理能力和可用性。 **一、Heisenberg简介** Heisenberg取名自量子力学中的海森堡不确定性原理,寓意其在数据库分...

    MySQL中如何进行分库分表的设计和实现?

    数据库选择:选择合适的数据库管理系统(DBMS),如 MySQL,支持分库分表的功能。MySQL 是一个流行的开源关系数据库管理系统,具有高性能、可靠性强、扩展性好等特点,非常适合大型数据库应用。 数据切分策略:根据...

    mysql数据库管理软件

    MySQL是一款开源、免费的关系型数据库管理系统,由Oracle公司持有并进行开发。它是世界上最受欢迎的数据库之一,尤其在Web应用程序中广泛使用。MySQL以其高效、稳定和易于管理的特点,深受开发者和企业的青睐。本文...

    mysql 分表

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

    mycat+mysql+jdbc实现根据手机号尾号分库分表存储以及效率对比操作代码()

    Mycat提供了负载均衡、读写分离、数据分片等功能,使得在分布式环境下,数据库的管理变得更加简单。 2. 分库分表策略:在本例中,手机号尾号被用作分库分表的依据。这种策略可以根据手机号码的尾号进行哈希运算,将...

    MySQL数据库设计、优化.pptx

    MySQL数据库设计与优化是数据库管理中的重要环节,它关乎到系统的性能、稳定性和可扩展性。本讲座由叶金荣分享,主要涵盖了多个关键方面,包括规范、基础规范、命名规范、库表规范、字段规范、索引规范以及开发环境...

    MySQL分库分表.doc

    MySQL分库分表是一种应对大数据量和高并发场景下的数据库优化策略,旨在提高数据库系统的性能、可用性和可扩展性。MYCAT(曾用名:Maatkit)是一款开源的数据库中间件,它允许开发者将MySQL数据库集群化,实现分库...

Global site tag (gtag.js) - Google Analytics