MySQL 设计实例1
MySQL的混和引擎设计是优点不是缺点, 除了MyISAM、InnoDB,MySQL还有 BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED 等存储引擎,具体怎么使用要看应用场景。对于,MyISAM和Innodb两种存储引擎,最大的区别是Innodb引擎支持事务等高级特性,MyISAM不支持事务;其次,Innodb支持行锁,MyISAM是表锁,锁的粒度支持不一样,对于并发写操作性能影响较大。那么很显然,在做数据库建模设计时,对于需要事务支持的交易表当然需要选择Innodb,而对于没有事务需求的表,例如字典表、日志表,建议选择MyISAM(注:MyISAM也是Mysql的默认存储引擎)。 因为虽然MyISAM不支持事务等高级特性,但强调的是性能,其执行速度比InnoDB类型更快。两则结合使用,一切都是为了性能,因为一般来说,系统最大的瓶颈就是IO。而对于MySQL Master/Slave 读写分离架构,只读的从机是完全可以只用MyISAM来提高读的性能。
1.混和引擎的MySQL如何进行设计,需要将所有的MyISAM引擎表转化成Innodb吗?
根据情况分析,如果使用频率不高,和主要业务和事物的表没有直接关联关系,不用回滚的情况下,不转换为innodb也可以,当然备份对这种表影响也不是很大。
如果情况允许,还是建议转换成innodb,毕竟myisam表损坏的情况还是很多的。
2.混和引擎的MySQL,大家平时是用哪些方案备份的?
如果在slave上面,允许比较大时间表锁的话,可以考虑mysqldump,优点是到处的数据量较小节约存储空间,可以拆分单表数据直接还原等操作。
如果在master上面备份,不能允许长时间表所的话,可以考虑innobackupex,可以自动备份innodb和myisam,在完成innodb备份以后,在备份myisam时候才会表所。可以降低锁表时间,缺点是占用比较大的磁盘空间,当然可以压缩,压缩会造成额外的系统资源开销。
在slave上,可以考虑快照备份,需要前期规划好,如果快照保存时间越长,对IO和空间消耗越大。
具体根据自己的实际环境和情况来设计备份方法。
3.混和引擎的MySQL如何进行优化呢,innodb_buffer_pool_size是否设成物理内存的50%-80%即可?
关于innodb_buffer_pool_size的值为物理内存的多少,这个得看你有多少物理内存,还要看你是否在机器上做其他的管理操作,比如备份,慢查询分析,二进制日志分析等。如果你只有4G内存,那么你想设置80%肯定是是多了,50%就差不多了。如果你有32G内存,少量管理操作,我个人觉得80%比较合适。或者64G内存,80%都嫌少,系统用不到那么多内存的。