MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP。 在这些语言中,MySQL 在 PHP 的 web 开发中是应用最广泛。大家知道mysql如何分区的吗?下面由学习啦小编为大家整理的mysql分区的方法,希望大家喜欢!

mysql分区的方法

一、概述

当 MySQL的总记录数超过了100万后,会出现性能的大幅度下降吗?答案是肯定的,但是,性能下降>的比率不一而同,要看系统的架构、应用程序、还有>包括索引、服务器硬件等多种因素而定。当有网友问我这个问题的时候,我最常见的回答>就是:分表,可以根据id区间或者时间先后顺序等多种规则来分表。分表很容易,然而由此所带来的应用程序甚至是架构方面的改动工作却不>容小觑,还包括将来的扩展性等。

在以前,一种解决方案就是使用 MERGE

类型,这是一个非常方便的做饭。架构和程序基本上不用做改动,不过,它的缺点是显见的:

1.只能在相同结构的 MyISAM 表上使用

2.无法享受到 MyISAM 的全部功能,例如无法在 MERGE 类型上执行 FULLTEXT 搜索

3.它需要使用更多的文件描述符

4.读取索引更慢

这个时候,MySQL 5.1 中新增的分区(Partition)功能的优势也就很明显了:

1.与单个磁盘或文件系统分区相比,可以存储更多的数据

2.很容易就能删除不用或者过时的数据

3.一些查询可以得到极大的优化

4.涉及到 SUM()/COUNT() 等聚合函数时,可以并行进行

5.IO吞吐量更大

分区允许可以设置为任意大小的规则,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为单独的表。

分区应该注意的事项:

1、 做分区时,要么不定义主键,要么把分区字段加入到主键中。

2、 分区字段不能为NULL,要不然怎么确定分区范围呢,所以尽量NOT NULL

二、分区的类型

1.RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。

2.LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

2.HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包>含MySQL中有效的、产生非负整数值的任何表达式。

3.KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含>整数值。

可以通过使用SHOW VARIABLES命令来确定MySQL是否支持分区,例如:

代码如下:

mysql> SHOW VARIABLES LIKE '%partition%';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| have_partition_engine | YES |

+-----------------------+-------+

1 row in set (0.00 sec)

代码如下:

mysql> SHOW VARIABLES LIKE '%partition%';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| have_partition_engine | YES |

+-----------------------+-------+

1 row in set (0.00 sec)

1、range分区

代码如下:

create table t_range(

id int(11),

money int(11) unsigned not null,

date datetime

)partition by range(year(date))(

partition p2007 values less than (2008),

partition p2008 values less than (2009),

partition p2009 values less than (2010)

partition p2010 values less than maxvalue

);

2.list分区

代码如下:

create table t_list(

a int(11),

b int(11)

)(partition by list (b)

partition p0 values in (1,3,5,7,9),

partition p1 values in (2,4,6,8,0)

);

对于innodb和myisam引擎,一条语句插入多条记录的时候,如果中间有值不能插入,innodb会全部回滚,myisam在错误值之前的数据可以插入到表中。对于innodb和myisam引擎,一条语句插入多条记录的时候,如果中间有值不能插入,innodb会全部回滚,myisam在错误值之前的数据可以插入到表中。

3.hash分区

hash分区的目的是将数据均匀的分布到预先定义的各个分区中,保证各分区的数据量大致一致。

代码如下:

create table t_hash(

a int(11),

b datetime

)partition by hash (YEAR(b)

partitions 4;

hash的分区函数页需要返回一个整数值。partitions子句中的值是一个非负整数,不加的partitions子句的话,默认为分区数为1。

4.key分区

key分区和hash分区相似,不同在于hash分区是用户自定义函数进行分区,key分区使用mysql数据库提供的函数进行分区,NDB cluster使用MD5函数来分区,对于其他存储引擎mysql使用内部的hash函数,这些函数基于password()一样的算法。

代码如下:

create table t_key(

a int(11),

b datetime)

partition by key (b)

partitions 4;

5。columns分区

上面的RANGE、LIST、HASH、KEY四种分区中,分区的条件必须是整形,如果不是整形需要通过函数将其转换为整形。

mysql-5.5开始支持COLUMNS分区,可视为RANGE和LIST分区的进化,COLUMNS分区可以直接使用非整形数据进行分区。COLUMNS分区支持以下数据类型:

所有整形,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL则不支持。

日期类型,如DATE和DATETIME。其余日期类型不支持。

字符串类型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT类型不支持。

COLUMNS可以使用多个列进行分区。

新增分区

代码如下:

mysql> ALTER TABLE sale_data

-> ADD PARTITION (PARTITION p201010 VALUES LESS THAN (201011));

Query OK, 0 rows affected (0.36 sec)

Records: 0 Duplicates: 0 Warnings: 0

删除分区

代码如下:

--当删除了一个分区,也同时删除了该分区中所有的数据。

mysql> ALTER TABLE sale_data DROP PARTITION p201010;

Query OK, 0 rows affected (0.22 sec)

Records: 0 Duplicates: 0 Warnings: 0

分区的合并

下面的SQL,将p201001 - p201009 合并为3个分区p2010Q1 - p2010Q3

代码如下:

mysql> ALTER TABLE sale_data

-> REORGANIZE PARTITION p201001,p201002,p201003,

-> p201004,p201005,p201006,

-> p201007,p201008,p201009 INTO

-> (

-> PARTITION p2010Q1 VALUES LESS THAN (201004),

-> PARTITION p2010Q2 VALUES LESS THAN (201007),

-> PARTITION p2010Q3 VALUES LESS THAN (201010)

-> );

Query OK, 0 rows affected (1.14 sec)

Records: 0 Duplicates: 0 Warnings: 0

导入导出MySQL数据库的方法

1. 概述

MySQL数据库的导入,有两种方法:

1) 先导出数据库SQL脚本,再导入;

2) 直接拷贝数据库目录和文件。

在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。

所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。

2. 方法一 SQL脚本形式

操作步骤如下:

2.1. 导出SQL脚本

在原数据库服务器上,可以用phpMyAdmin工具,或者mysqldump(mysqldump命令位于mysql/bin/目录中)命令行,导出SQL脚本。

2.1.1 用phpMyAdmin工具

导出选项中,选择导出“结构”和“数据”,不要添加“Drop DATABASE”和“Drop TABLE”选项。

选中“另存为文件”选项,如果数据比较多,可以选中“gzipped”选项。

将导出的SQL文件保存下来。

2.1.2 用mysqldump命令行

命令格式

mysqldump -u用户名 -p 数据库名 > 数据库名.sql

范例:

mysqldump -uroot -p abc > abc.sql

(导出数据库abc到abc.sql文件)

提示输入密码时,输入该数据库用户名的密码。

2.2. 创建空的数据库

通过主控界面/控制面板,创建一个数据库。假设数据库名为abc,数据库全权用户为abc_f。

2.3. 将SQL脚本导入执行

同样是两种方法,一种用phpMyAdmin(mysql数据库管理)工具,或者mysql命令行。

2.3.1 用phpMyAdmin工具

从控制面板,选择创建的空数据库,点“管理”,进入管理工具页面。

在"SQL"菜单中,浏览选择刚才导出的SQL文件,点击“执行”以上载并执行。

注意:phpMyAdmin对上载的文件大小有限制,php本身对上载文件大小也有限制,如果原始sql文件

比较大,可以先用gzip对它进行压缩,对于sql文件这样的文本文件,可获得1:5或更高的压缩率。

gzip使用方法:

# gzip xxxxx.sql

得到

xxxxx.sql.gz文件。

2.3.2 用mysql命令行

命令格式

mysql -u用户名 -p 数据库名 < 数据库名.sql

范例:

mysql -uabc_f -p abc < abc.sql

(导入数据库abc从abc.sql文件)

提示输入密码时,输入该数据库用户名的密码。

方法2进入mysql,建立数据库,选择数据库后,打入下面代码,d:112121.sql为数据库目录。

mysql>source d:112121.sql

3 方法二 直接拷贝

如果数据库比较大,可以考虑用直接拷贝的方法,但不同版本和操作系统之间可能不兼容,要慎用。

3.1 准备原始文件

用tar打包为一个文件

3.2 创建空数据库

3.3 解压

在临时目录中解压,如:

cd /tmp

tar zxf mydb.tar.gz

3.4 拷贝

将解压后的数据库文件拷贝到相关目录

cd mydb/

cp * /var/lib/mysql/mydb/

对于FreeBSD:

cp * /var/db/mysql/mydb/

3.5 权限设置

将拷贝过去的文件的属主改为mysql:mysql,权限改为660

chown mysql:mysql /var/lib/mysql/mydb/*

chmod 660 /var/lib/mysql/mydb/*

MySQL怎么备份还原

一、Win32系统下MySQL的备份还原方法

备份:在“运行”中输入“cmd ”,利用“cd /Program Files/MySQL/MySQL Server 5.0/bin”进入bin文件夹,输入“mysqldump -u 用户名 -p databasename >exportfilename”导出数据库到文件,如mysqldump -u root -p voice>voice.sql,然后输入密码即可开始导出MYSQL数据,实现备份操作。

还原:进入MySQL Command Line Client,输入密码,进入到“mysql>”,输入命令"show databases;",回车,看看有些什么数据库;建立你要还原的数据库,输入"create database voice;",回车;切换到刚建立的数据库,输入"use voice;",回车;导入数据,输入"source voice.sql;",回车,开始导入,再次出现"mysql>"并且没有提示错误即还原成功。

二、Linux下MySQL的备份与还原方法:

备份:[root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录)

[root@localhost mysql]# mysqldump -u root -p voice>voice.sql,输入密码即可。

还原:有两种方法可选:

第一种方法:[root@localhost ~]# mysql -u root -p 回车,输入密码,进入MySQL的控制台"mysql>",同1.2还原。

第二种方法:

[root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录)

[root@localhost mysql]# mysql -u root -p voice

mysql如何进行分区_mysql如何进行分区_mysql分区有哪些方法相关推荐

  1. mysql分区和分表比较_MySQL分区和分表的区别与联系

    一.分区和分表简介 分表 就是将一张大表分成N个小表. 分区 将一张大表的数据分成N个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上. 二.分区和分表的区别 1. 实现方式 1.1 分表 My ...

  2. mysql 基于时间分区_MySQL基于时间字段进行分区的方案总结

    MySQL支持的分区类型一共有四种:RANGE,LIST,HASH,KEY.其中,RANGE又可分为原生RANGE和RANGE COLUMNS,LIST分为原生LIST和LIST COLUMNS,HA ...

  3. mysql实现表分区不同的磁盘_SQLServer表分区详解_MySQL

    分区请三思: 1.虽然分区可以带来众多的好处,但是同时也增加了实现对象的管理费用和复杂性.因此在进行分区之前要首先仔细的考虑以确定是否应为对象进行分区. 2.在确定了为对象进行分区后,下一步就要确定分 ...

  4. mysql hash分区 数目_mysql8 参考手册-HASH分区

    分区依据HASH主要用于确保在预定数量的分区之间均匀分布数据.使用范围或列表分区时,必须明确指定应将给定列值或一组列值存储在哪个分区中:对于散列分区,此决定将由您来决定,您只需要根据要散列的列值以及要 ...

  5. 分区和分片的区别_Mysql分表和分区的区别、分库分表介绍与区别

    分表和分区的区别: 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看: [root@BlackGhost test]# ls |grep user a ...

  6. mysql 分区 线性hash_MySQL表分区(3)哈希分区-hash

    哈希分区.哈希分区主要是依据表的某个字段以及指定分区的数量. 创建表分区 要使用HASH分区来分割一个表,要在CREATE TABLE 语句上添加一个"PARTITION BY HASH ( ...

  7. 【详解】MySQL分区表,分区的过程,四种分区类型

    分区的功能并不是在存储引擎层进行完成的,因此不是只有InnoDB存储引擎支持分区,常见的存储引擎MyISAM,NDB都支持.当并不是所有的存储引擎都支持,如CSV等不支持.在使用分区功能之前,应该对存 ...

  8. mysql 分区个数限制_mysql8 参考手册-分区的限制

    本节讨论了对MySQL分区支持的当前限制. 禁止使用的构造. 分区表达式中不允许以下构造: 存储过程,存储函数,UDF或插件. 声明的变量或用户变量. 有关分区表达式中允许的SQL函数的列表,请参见 ...

  9. mysql分区为什么提高性能_通过分区(Partition)提升MySQL性能

    通过分区(Partition)提升MySQL性能 --MySQL5.1新特性翻译系列 几年前,俺写过一篇题为"The Foundation of Excellent Performance& ...

  10. mysql 40014无效_Oracle 问题-ORA-14400: 插入的分区关键字未映射到任何分区

    Oracle 问题-ORA-14400: 插入的分区关键字未映射到任何分区 在执行一次SQL数据导入时报:ORA-14400: 插入的分区关键字未映射到任何分区 具体内容如下: SQL> @&q ...

最新文章

  1. html目录怎么搞出来,webpack怎么把html搬到输出目录里?
  2. hdu 2518 Dominoes
  3. 移动端开发框架Zepto.js
  4. java.util.concurrent BlockingQueue详解
  5. 一个小游戏Digger for .NET!
  6. 以太坊、Hyperledger Fabric和Corda,哪个更好?
  7. Apache Camel 3只有2个月的路程
  8. 最新的ndkr20编译c_NDKr20使用clang编译ffmpeg
  9. Bailian2767 简单密码(POJ NOI0107-10)【密码】
  10. WebSphere报错指南
  11. 产品经理是怎样炼成的
  12. Leetcode题目:Binary Tree Paths
  13. JAVA-Hibernate-SQL类型映射表及Hibernate标识生成策略
  14. Status: Checked in and viewable by authorized users 出现在sharepoint 2013 home 页面
  15. latex加下划线_给latex文字加下划线和高亮显示
  16. 深度学习实战(十一)——多标签分类(基于Keras)
  17. 孕妇饮食禁忌隐私政策
  18. 模拟电路学习-之电容,电感重新认识
  19. 有图书馆有计算机教室的英语,以my school为题的英语作文有图书馆,办公室,音乐室,教室,体育馆...
  20. 华为p10有java功能吗_华为P10最强悍的特色功能 很多人都不知道

热门文章

  1. Java学习第八项——接口与继承
  2. 2017-05-04-Facebook出品的Android声明式开源新框架Litho文档翻译-总览和导航
  3. vue-cli使用px2rem 或 postcss-plugin-px2rem px转换rem
  4. vue+webpack项目中px2rem的例子
  5. ubuntu16.04如何查看显卡型号
  6. 远程桌面复制粘贴异常解决方案--rdpclip.exe
  7. GT引擎开发教训和技巧
  8. 计算机网络需要知道的技术知识(不分开发语言)
  9. 基于百问网IMX6ULL_PRO开发板移植LCD多点触摸驱动(GT911)
  10. ZYNQ UltraScale 双核裸跑 / 裸跑 + Linux