主从复制原理?
1.数据库有个bin-log二进制文件,记录了所有sql语句。
2.我们的目标就是把主数据库的bin-log文件的sql语句复制过来。
3.让其在从数据的relay-log重做日志文件中再执行一次这些sql语句即可。
4.主从配置一般需要三个线程来操作:
1.binlog输出线程:每当有从库连接到主库的时候,主库都会创建一个线程然后发送binlog内容到从库。在从库里,当复制开始的时候,从库就会创建两个线程进行处理:
2.从库I/O线程:当START SLAVE语句在从库开始执行之后,从库创建一个I/O线程,该线程连接到主库并请求主库发送binlog里面的更新记录到从库上。从库I/O线程读取主库的binlog输出线程发送的更新并拷贝这些更新到本地文件,其中包括relay log文件。
3.从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程写到relay log的更新事件并执行。
可以知道,对于每一个主从复制的连接,都有三个线程。拥有多个从库的主库为每一个连接到主库的从库创建一个binlog输出线程,每一个从库都有它自己的I/O线程和SQL线程。
mysql的主从复制会影响事务吗?
不会的。mysql的主从复制不会影响事务。
因为,主从复制的原理是:
图片来源:网络
数据库将用户的请求通过工作线程来将数据写入到数据库中然后在写入到 binlog 日志中。
binlog日志详细记录了数据的操作信息。
主数据库会有一个IO线程将binlog日志中的数据同步到从数据库的relay日志中。
从数据库再通过自己数据库内的SQL线程将 relay log 日志中的数据写入到数据库中。
主从同步方式特点?
主从同步是在一个交换节点设立一高精度的基准时钟,通过传输链路把此基准时钟信号送到网中各个从节点,各个从节点利用锁相环技术吧本地时钟频率锁定在基准时钟频率上,从而实现网内各节点之间的时钟信号同步 。
主从同步网一般采用星状结构或树状结构,其中大部分节点为从节点。从节点时钟跟踪基准时钟状态,可有效降低成本。因此,主从同步技术能够提高时钟系统的精确度,同时降低成本 。
MySQL主从复制能完美解决数据库的单点问题吗?为什么?
没有完美的解决方案。只有合适的解决方案。
当使用主从时,实际已经放弃了强一致性了。(既然题主只问单点问题,就不考虑访问量问题。即假设主从复制完全能支撑目前的系统访问。)
一般数据库主从设置:
主库可读可写
- 从库只读
即系统既可以从主库获取数据,也可以从从库获取数据。数据写入主库后,自动同步到从库。
这构成了一个简单的分布式系统。根据cap定理,只能三选一。主从之间是最终一致,如果强一致,不但不会提高系统可用性,反而降低了系统可用性。
我们看上面的主从结构可能会出现哪些问题:
系统写入主库,再从主库查询。这就是个单点数据库,没有什么影响。
- 系统写入主库,再从从库查:
- 如果数据已经同步,则没有影响
- 如果数据还未同步,则查询的是老数据
- 如果同步出现了问题,则主从断开。如果系统无法感知,则查询到的可能一直是老数据。这里就需要对同步进行监控,当同步出现问题时,及时处理
主库挂掉。从库需要及时感知,并替换主库。同时需要再通知运维人员处理,否则又变成了单点。
从库挂掉。主库数据无法同步到从库。同样需要及时通知处理
如果主从切换自动化,那单点故障的概率也只是降低50%而已(主库或备库挂掉没人恢复的话)。