MySQL普通表转换为分区表(MySQL-5.6.25,MySQL-5.7.7-rc)

考虑到设计人员没有规划好表的容量,某些业务表体积过大以后,需要将以前的表转换为分区表的需求,简单记录一下MySQL的分区表转换功能,
测试环境:MySQL-5.6.25和MySQL-5.7.7-rc
本着学习的原则,先把百度方法中的,中间表->锁表->导数据->rename,放在一边,先试着能否直接用alter来转换表结构,类似于oracle的直接转换
先在MySQL-5.7.7-rc环境下建表

插入数据

试一下如下语句:ALTER TABLE students PARTITION BY KEY(sid) PARTITIONS 2;

ok成功了.......看上去这样子比百度方法"中间表->锁表->导数据->rename"要方便很多?
是的,反正都会锁表,虽然时间和效率上面不知道优劣,但是反正要锁表,都要停止这个表上的业务不是么...........

那么,转换分区表以后,原有的数据会不会自动转移到新的分区表里面去呢?

重新建表,添加数据,换一个分区方式试一下

查看分区的数据

如预想一般

如果有严格的不能停业务的要求,那么用主从结构,从库(别开只读)的这张表事先建立为分区表,然后进行同步,找个合适的时机把应用层的DB config换掉就好(好像还是有一小段时间的停机?就算用双主也还是会有一致性的问题,应用层的短暂停止就当做没有吧OTZ.....)

---------------------------------------------------------这只是一篇简单的,简短的,偷懒没有进行详细性能效率对比的,博客的小尾巴,over撒花~-------------------------------------------------------------

附上MySQL-5.6.25的截图

时间: 2024-10-26 14:43:34

MySQL普通表转换为分区表(MySQL-5.6.25,MySQL-5.7.7-rc)的相关文章

【分区】如何将一个普通表转换为分区表

[分区]如何将一个普通表转换为分区表   1.1  BLOG文档结构图   1.2  前言部分   1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 将一个普通表转换为分区表的常用方法(重点) ② 在线重定义的使用 ③ ctas和insert的优化 ④ DML语句如何开启并行操作,如何查看DML是否开启了并行     Tips:        ① 若文章代码格式有错乱,推荐使用QQ.搜狗或360浏览器,也

用PHP将mysql数据表转换为excel文件格式

excel|mysql|数据|转换 详细内容如下:   <?php $DB_Server = "localhost"; $DB_Username = "mydowns"; $DB_Password = ""; $DB_DBName = "mydowns"; $DB_TBLName = "user"; $Connect = @mysql_connect($DB_Server, $DB_Username,

普通表转换为分区表

yang@ORACL> create table yangtmp ( id number, time date ); 表已创建. yang@ORACL> insert into yangtmp select rownum id ,sysdate-dbms_random.value(1,500) time   2  from dual   3  connect by level <=1e5; 已创建100000行. yang@ORACL> select count(1) from y

一次非法关机导致mysql数据表损坏的实例解决_Mysql

排查修复数据表的经过: 1.访问网页,提示错误,连接不到数据库. 2.启动mysql服务,卸载和关闭rpm安装的mysql服务 (昨天安装postfix好像yum安装了mysql),用netstat -anp |grep mysqld 命令查看mysql服务没有起来,用mysql -uroot -p也连接不到服务器. 3.查看错误提示:110726 17:02:23 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgra

Mysql 5.7 Gtid内部学习(五) mysql.gtid_executed表/gtid_executed变量/gtid_purged变量的更改时机

本节将集中讨论下面三种Gtid更新的时机,这部分相当重要,后面的故障案列会和这节有关.下面先来看一下他们的定义 mysql.gtid_executed表:Gtid持久化的介质,Mysql启动阶段会读取这个表来获取gtid_executed变量的值. gtid_executed变量(show global variables):Mysql数据库已经执行了哪些Gtid事务,处于内存中.show slave status中的Executed_Gtid_Set也取自这里. gtid_purged变量(s

使用exchange方式切换普通表到分区表

      随着数据库数据量的不断增长,有些表需要由普通的堆表转换为分区表的模式.有几种不同的方法来对此进行操作,诸如导出表数据,然后创建分区表再导入数据到分区表:使用EXCHANGE PARTITION方式来转换为分区表以及使用DBMS_REDEFINITION来在线重定义分区表.本文描述的是使用EXCHANGE PARTITION方式来实现,下面是具体的操作示例.       有关具体的dbms_redefinition在线重定义表的原理及步骤可参考:基于 dbms_redefinition

使用DBMS_REDEFINITION在线切换普通表到分区表

      随着数据库数据量的不断增长,有些表需要由普通的堆表转换为分区表的模式.有几种不同的方法来对此进行操作,诸如导出表数据,然后创建分区表再导入数据到分区表:使用EXCHANGE PARTITION方式来转换为分区表以及使用DBMS_REDEFINITION来在线重定义分区表.本文描述的是使用DBMS_REDEFINITION来实现,下面是具体的操作示例.       有关具体的dbms_redefinition在线重定义表的原理及步骤可参考:基于 dbms_redefinition 在线

php+mysql如何将数据表转换为Excel输出

php教程 mysql教程如何将数据表转换为Excel输出 $xlsname="倒出信息"; header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=$xlsname.xls");  ?> <table>   <tr>   <td ><h3>序号</h3></t

快速掌握升级MySQL系统表

一些MySQL发布对mysql数据库中的系统表的结构进行了更改,添加了新权限或特性.当你更新到新版 本MySQL,你应同时更新系统表,以确保它们的结构最新.首先备份mysql数据库,然后按照下面的程序操 作. 在Unix或Unix类系统中,运行mysql_fix_privilege_tables脚本来更新系统表: shell> mysql_fix_privilege_tables 你必须在服务器运行时执行该脚本.它试图连接本机上用root运行的服务器.如果root账户需要密码 ,在命令行中按下述