MYSQL分库分表和不停机更改表结构
发布:smiling 来源: PHP粉丝网 添加日期:2014-09-24 20:50:14 浏览: 评论:0
在MYSQL分库分表中我们一般是基于数据量比较大的时间对mysql数据库一种优化的做法,下面我简单的介绍一下mysql分表与分库的简单做法.
1、分库分表
很明显,一个主表,也就是很重要的表,例如用户表,无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是这样子:
- <?php
- for($i=0;$i< 100; $i++ ){
- //echo "CREATE TABLE db2.members{$i} LIKE db1.members<br>";phpfensi.com
- echo "INSERT INTO members{$i} SELECT * FROM members WHERE mid%100={$i}<br>";
- }
- ?>
2、不停机修改mysql表结构
同样还是members表,前期设计的表结构不尽合理,随着数据库不断运行,其冗余数据也是增长巨大,同事使用了下面的方法来处理,先创建一个临时表,代码如下:
/*创建临时表*/
CREATE TABLE members_tmp LIKE members
然后修改members_tmp的表结构为新结构,接着使用上面那个for循环来导出数据,因为1000万的数据一次性导出是不对的,mid是主键,一个区间一个区间的导,基本是一次导出5万条吧,这里略去了,接着重命名将新表替换上去,代码如下:
/*这是个颇为经典的语句哈*/
RENAME TABLE members TO members_bak,members_tmp TO members;
就是这样,基本可以做到无损失,无需停机更新表结构,但实际上RENAME期间表是被锁死的,所以选择在线少的时候操作是一个技巧,经过这个操作,使得原先8G多的表,一下子变成了2G多.
另外还讲到了mysql中float字段类型的时候出现的诡异现象,就是在pma中看到的数字根本不能作为条件来查询.
Tags: MYSQL分表 MYSQL分库 MYSQL结构
相关文章
- ·Mysql数据库水平分表实现方案(2014-09-23)
- ·mysql分表几种方法总结(2014-10-04)
- ·mysql分表实现方法详解(2014-10-05)
- ·mysql数据库分表方法总结(2014-10-10)
- ·mysql数据库分表性能优化分析(2014-10-12)
- ·mysql大数据分库和分表 php解决方案(2015-04-18)
- ·mysql导出数据库表结构命令详解(2014-09-27)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)