数据库的工作原理
数据库内部其实有缓冲区,在缓冲区中的数据是待处理的数据,数据库源源不断地从缓冲区中获取数据进行处理,但是如果并发压力高了,会造成数据缓冲区数据溢出,最终导致数据库宕机,不能正常响应。这种现象无法根治,只能想办法缓解。那么有什么好的策略呢?
数据库要实现高可用需要解决如下的问题
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:中继日志有什么作用?
保证数据的有效
可以被别人读取,实现数据备份
中继日志兼具缓存和为别人提供服务功能。