mysql读写分离后,访问时,可以使用 myCat 或 maxScale 插件,透明的完成读写分离,也可使用代码
日pv几百万,使用嵌套读写分离完全可以
mysql部署策略
日pv量级在1w以下,单台机器跑web和db + 冷备份
日pv达到几万。此时单台机器已经有点负载,需要我们把web和db分开 + redis + 主从(仅用于备份)
日pv达到几十万,mysql主从,一主多从,java可以通过discuz 或 mysql-proxy 实现读写分离
日pv到几百万,使用嵌套主从(把mysql原来的一主多从变为一主一从,然后从作为其他从的主,而前面的主只负责网站业务的写入,而后面的从不负责网站任何业务,只负责给其他从同步bin-log)
日pv到1千万的时候,分库分表,纵向 + 横向
单表的数据量低于500W
单个库数据量在1T到2T,基本就是极限了,这个时候就得分多个库了
在mysql中,每个数据库最多可创建20亿个表,一个表允许定义1024列,每行的最大长度为8092字节(不包括文本和图像类型的长度)。
当表中定义有varchar、nvarchar或varbinary类型列时,如果向表中插入的数据行超过8092字节时将导致Transact-SQL语句失败,并产生错误信息。
SQL对每个表中行的数量没有直接限制,但它受数据库存储空间的限制。
每个数据库的最大空间1048516TB,所以一个表可用的最大空间为1048516TB减去数据库类系统表和其它数据库对象所占用的空间。
mysql存储T量级的数据。
每行,如果试图插入超过 8,060 字节的行或对行进行更新以至字节总数超过 8,060,
HAProxy可以实现Mysql的负载均衡
阿里云使用的是主备模式
mycat
mysql的最大连接数需要修改
keepalived 可以实现主备切换
高可用方案:MMM、MHA、mycat、双主+keepalive
InnoDB不支持Hash索引
MMM 两主多从
优点:
1、对主从都实现了虚拟IP,可以不使用其他的代理实现读写分离
2、对从实现了监控
缺点:
1、仅支持 基于日志点 的复制方式
2、不稳定
3、选举方式暴力,直接用主备机当做新主来用(主备机的数据不一定比从库全)
4、社区不活跃
MHA 一主多从
优点:
1、选举方式优化了,从多个从节点中找出数据最完整的从作为新主,更不易丢失数据
2、基于 GTID 的复制方式,可配置半同步复制(MySQL 5.7版本+)
缺点:
1、需要编写脚本或利用第三方工具来实现VIP的配置
2、MHA启动后只会对主数据库进行监控
3、需要基于SSH免认证配置,存在一定的安全隐患
4、没有提供从服务器的读负载均衡功能
双主+keepalive
优点:
1、避免了所有单点的问题
缺点:
1、双主互备有破坏数据的可能
从负载均衡使用中间件,写负载均衡只能采用分表分库的机制