数据库高可用

数据库的工作原理

数据库内部其实有缓冲区,在缓冲区中的数据是待处理的数据,数据库源源不断地从缓冲区中获取数据进行处理,但是如果并发压力高了,会造成数据缓冲区数据溢出,最终导致数据库宕机,不能正常响应。这种现象无法根治,只能想办法缓解。那么有什么好的策略呢?

数据库要实现高可用需要解决如下的问题

1数据库的信息如何实现同步
2用户如何选择连接哪个数据库
3数据库宕机后如何实现高可用(尽可能不死,死后要有替补)?
4如果数据库宕机,宕机后的数据如何实现数据同步

解决思路

使用代理数据库

经过架构的优化,让服务器将来不会直接连接真实的数据库。而是连接代理数据库,在代理数据库中进行相应的配置,实现读和写的分离,进一步提高数据库的性能。

代理中间服务器MyCat,Amoeba代理用户动态选择数据库,不让用户直接连接真实数据库,主库负责更新操作,从库负责查询操作,进一步维护系统稳定性,抗击并发量,即使某一台服务器出现宕机,可以通过代理服务器进行替换,自动切换为备用数据库

数据库备份

冷备份

说明:为了防止出现不可逆转的现象,定时的将数据库的信息进行导出,存到固定的硬盘中。如果数据库出现宕机,则可以通过数据库备份实现数据的恢复。
特点:操作次数少,数据备份不完全。但是作为数据恢复的最后手段一般也会使用。
方式:通过某些数据库工具进行人为导出。
工具sqlYog
缺点:
1.不能保证数据的完整性
2.如果数据库中的文件较大,则导出的.sql文件的体积也是很大的

数据库冷备份是恢复数据的最好有效手段

热备份

企业主流备份方式。
说明:如果主数据库进行更新操作时,会实时向从库发送数据。这时从库接受数据和自动进行写库操作。这样的备份方式可以做到实时备份。

 

 

主库:主要负责写入二进制文件
从库:主要负责监听主库中的数据的修改,并且同步到从库中
I/O线程:实时监控主库的二进制文件是否发生变化,写入中继日志

SQL线程,把中继日志的内容翻译成sql语句
调用过程:
1.当主库中的数据发生变化时,会将更新的操作写入二进制文件binary log中。
2.从库中通过IO线程实时监听主库中的二进制文件,主要监听变化的二进制数据。
3从库将获取到的数据写入中继日志relay log
中。
3.从库通过sql线程读取中继日志,实现数据库写入,最终实现数据同步

一般最多一主三从

 

问题1:
为什么读取二进制文件后不进行直接的写库操作?
为了数据的安全性。

当二进制文件有大量写入时,I/O线程基于网络读取二进制文件,网络可能产生拥堵和丢包,如果中间丢包,或者因延时只写了半条数据,直接写库不合适。信息往中继日志写,将来SQLThread能保证读取的信息是正确的。即使写错,中继日志信息也称为不了完整信息,SQLThread不读取。

问题2:中继日志有什么作用?
保证数据的有效
可以被别人读取,实现数据备份

中继日志兼具缓存和为别人提供服务功能。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值