mysql分区技术(二)

例1.假设你创建了一张表,该表保存20家音像店的职员记录,这20家音像店的编号从1到20。根据store_id将其分成4个分区,可使用range分区。如下图:

1

 

例2.根据离职日期分区,同样使用range分区,如下图:

2

 

例3.list分区与range分区有类似的地方(list好比php中的switch、range好比php中的if…else),假设20家音像店分别在4个区,每个区分别包含如下store_id的音像店。东区:1,2,10,11,19,20 南区:7,8,15,16 西区:4,12,13,14,18 北区:3,5,6,9,17 此时,可使用list分区,如下图:

3

 

例4.基于入职日期hired,按年份平均分布成4个分区,则可使用hash分区,如下图:

4

 

key分区,由于性能较低,一般不推荐使用,具体4个分区的对比,如下图:

5

 

mysql分区技术(一)

类似水平分表,但是它是mysql在物理层进行水平分表,与对应的应用程序来说,它还是一张表
mysql5.1开始以插件的形式支持分区
mysql常用分区类型有 RANGE LIST HASH KEY
show plugins; //通过show plugins命令,如果显示partition active 表示分区插件已启动
innodb引擎的表有两种表空间:共享表空间、独占表空间
如果innodb的表要做分区,必须是独占表空间,而且个人也比较建议使用独占表空间(性能更高、灵活性更高),唯一的缺点就是占用硬盘容量更大

 

从测试可看出,如果表的数据量不是很大的情况下,建立索引可以起到同样的优化效果,只有表数据量较大(估计2000万条以上吧- -)或者一些不方便建立索引的表上,选择分区技术也是不错的方案。

mnmp环境搭建

首选,需要安装xcode和brew。

然后删除mac自带的Apache和php。(可以不删,但是配置起来比较麻烦)

 

事务简介

事务的ACID原则:

原子性(Atomicity):一个事务要么全部执行,要么不执行。也就是说一个事务不可能只执行了一半就停止了。比如你从取款机取钱,这个事务可以分成两个步骤:1划卡、2出钱。不可能划了卡,而钱却没出来。这两步必须同时完成。要么就不完成。

一致性(Consistency):事务的运行并不改变数据库中数据的一致性。例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变。

隔离性(Isolation):两个以上的事务不会出现交错执行的状态。因为这样可能会导致数据不一致。

持久性(Durability):事务运行成功以后,就系统的更新是永久的。不会无缘无故的回滚。

事务隔离级别设置:

 

隔离级别对应的脏读、不可重复读、幻读情况如下图:

1

脏读、不可重复读、幻读的解释:

脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。

幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。

通常在实际业务中,我一般使用默认隔离级别,但是可以通过for update对重要业务加锁

 

推荐地址:http://www.cnblogs.com/zemliu/archive/2012/06/17/2552301.html

linux常用命令整理(一)

 

mysql主从同步

设备:两台虚拟机 master 192.168.2.103 slave 192.168.2.104

环境:centos6.3 lnmp集成环境 mysql版本5.5.37

在学习mysql主从同步之前,我们首先得了解mysql授权、mysql的bin-log日志、mysqldump

了解以上知识后,就可以配置mysql主从了,步骤如下:

注:为了保证测试的顺利,可以在配置前先清理一下bin-log日志 reset master 

master服务器配置

1.授权一个账号给从服务器使用
2./etc/my.cnf中开启bin-log日志并设置一个唯一的server-id(需要跟从服务器不同)
3.使用mysqldump备份数据 建议加上 -l读锁 -F重新生成bin-log日志
4.把master的数据备份传输到slave上 scp /tmp/test.sql 192.168.2.104:/tmp/
5.重启mysql

slave服务器配置

1.恢复传输过来的备份数据
2./etc/my.cnf 开启bin-log 设置唯一的server-id 开启master-host=192.168.2.103 master-user = user2 master-
password=123 master-port=3306
3.重启mysql

配置完成,通过show slave status \G查看 Slave_Io_Running Slave_Sql_Running 都为yes表示主从同步配置完成

 

从服务器无法同步时,使用以下方法进行修复