InnoDB有事务,适合频繁修改数据的OLTP;Myisam是无事务,适合读取
那么主库InnoDB,备库Myisam呢?
-
slave机器的可以节省一半以上的空间
-
slave备份更快.读性能更高
-
其他略
具体操作如下
- 设置主库默认引擎为innodb,备库默认引擎为Myisam,并且备库不能支持innodb引擎
/etc/my.cnf中注释掉和Innodb配置相关的参数,修改default_table_type =myisam ,skip-innodb
-
直接将主库的数据dump到备库
-
配置m-s相关参数,启动即可
但是注意,这样的m-s大部分业务可行,在某些情况下是不行的,上线前你最好观察几天.
但是,这个操作增加了运维的复杂度,随着Redis等工具的兴起(Redis简单教程.md),方案本身吸引力将弱
两者比较
MyISAM VS InnoDB: 谁是引擎之王
-
这两者在处理上有很多不同,比如一个简单的不带where条件的count(*), MyISAM事先就统计好了行数,简单返回给你就行了; InnoDB是临时去统计的,要计算一阵子,
-
所以对于变动频繁的业务表,MyISAM就不是很合适,因为写动作多,而MyISAM是以读见长的,且要经常更新count(*),表格损坏恢复性还不好,但是对于一些参数表就比较合适了
-
对日志表、业务表,InnoDB比较合适,支持事务,功能也比较全面;当表上有写操作时,InnoDB是锁行的,而
MyISAM二逼是锁表的,比如我对第一行有个update操作,其他几个人的update/insert/delete都做不了了
InnoDB vs. MyISAM 对比表
InnoDB 和 MyISAM 是 MySQL 中两种主要的存储引擎,各有优缺点。InnoDB 支持事务、行级锁和外键,具备自动崩溃恢复功能,适合高并发和需要数据一致性的应用。MyISAM 则不支持事务,使用表级锁,仅提供有限的崩溃恢复工具,但在只读或少量写操作的场景中,仍能提供较好的性能。
MyISAM 最致命的坑
不支持事务
:
缺乏事务支持意味着无法保证数据的一致性和完整性,在数据修改过程中,如遇到错误或系统崩溃,数据可能处于不一致状态。
表级锁
:
在高并发写操作场景下,表级锁会导致严重的性能瓶颈。每次写操作都锁住整个表,其他操作必须等待,极大地降低了系统的并发处理能力。
有限的崩溃恢复能力:
MyISAM 仅提供有限的修复工具(如myisamchk),无法保证在系统崩溃后完全恢复数据,增加了数据丢失的风险。