发布时间:2022-08-18 18:13
1.为什么需要主从复制?
(1)在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。
(2)做数据的热备
(3)架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
2.什么是mysql的主从复制?
mysql主从复制是指数据可以从一个mysql数据库主节点复制到一个或多个从节点。Mysql默认采用异步复制方式,这样节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或特定的数据库、数据表。
3.mysql主从复制原理?
(1)master服务器数据改变时会将其记录至二进制binlog日志中。
(2)slave服务器会定时检测master服务器中的binlog日志是否发生变化,如变化则开始一个IO线程请求master binlog日志
(3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中
(4)从节点将启动sql线程从中继日志中读取二进制日志,在本地重放,使得数据与主节点保持一致,最后I/O线程和sql线程进入休眠状态,等待下一次唤醒。
备注: master主服务器、slave从服务器
也就是说:
(1)从库生成两个线程 一个io线程 一个sql线程
(2)io线程会请求主库的binlog日志,并将得到的binlog写到从库的relay-log(中继日志)
(3)主库会为每一个从库的io线程启动一个dump线程,来传递binlog
(4)sql线程读取中继日志,解析成sql语句执行。
注意:
(1)master将操作语句记录到binlog日志中,然后授权slave远程连接的权限(master一定要开启binlog二进制日志功能);通常为了数据安全考虑,slave也开启binlog功能。
(2)slave开启两个线程:IO线程、sql线程。其中IO线程负责读取master的binlog内容到中继日志relay-log里;sql线程负责从relay日志里读取binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。
(3)mysql复制至少需要两个mysql的服务,当然mysql的服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
(4)版本最好一致,至少master版本<=slave版本
(5)master和slave两节点间时间需同步
4.读写分离介绍?
mysql读写分离基本原理是让master数据库处理写的操作,slave数据库处理读的操作。master将写的操作同步到各个slave节点。
mysql读写分离能提高系统性能的原因在于:
(1)物理服务器增加,机器处理能力提升。拿硬件换性能。
(2)主从只负责各自的读、写,极大程度缓解X锁和S锁争用。
(3)slave可以配置myiasm引擎,提升查询性能以及节约系统开销。
(4)master直接写是并发的,slave通过主库发送来的binlog恢复数据是异步。
(5)slave可以单独设置一些参数来提升读的性能。
(6)增加冗余,提高可用性。
5.目前实现mysql的读写分离,主要有以下几种方案:
(1)通过程序实现,网上很多现成的代码,比较复杂,如果添加从服务器要更改多台服务器的代码。
(2)通过mysql-proxy来实现,由于mysql-proxy的主从读写分离是通过lua脚本来实现,目前lua的脚本的开发跟不上节奏,而写没有完美的现成的脚本,因此导致用于生产环境的话风险比较大,据网上很多人说mysql-proxy的性能不高。
(3)自己开发接口实现,这种方案门槛高,开发成本高,不是一般的小公司能承担得起。
(4)利用阿里巴巴的开源项目Amoeba来实现,具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库,并且安装配置非常简单。
6.什么是amoeba?
Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。
主要解决:
(1)降低数据切分带来的复杂多数据库结构
(2)提供切分规则并降低 数据切分规则 给应用带来的影响
(3)降低db与客户端的连接数
(4)读写分离
7.主从复制及读写分离操作
主从复制与读写分离的安装及操作配置的文章已发布,可在本专栏内查找。
只有历经沧桑,才能遇见曙光。 ------酷酷的韩