什么是主从复制
复制是指将主数据库的 DDL 和 DML 操作通过 二进制日志传到复制服务器(也叫从服务器)上,然后在从服务器上对这些日志重新执行,从而使得从服务器和主服务器的数据保持同步。
为什么要做主从复制
1、如果主服务器出现问题,可以快速切换到从服务器提供服务;
2、可以在从服务器上执行查询操作,降低主服务器的访问压力;
3、可以在从服务器上执行备份,以避免备份期间影响主服务器的服务。
主从复制流程
借鉴网络图片
- 主库db的更新事件(update、insert、delete)被写到binlog
- 主库创建一个binlog dump thread,把binlog的内容发送到从库
- 从库启动并发起连接,连接到主库
- 从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
- 从库启动之后,创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db
读写分离
1、什么是读写分离
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
2、为什么要做读写分离
因为数据库的“写”(写10000条数据到MySQL可能要3分钟)操作是比较耗时的,但是数据库的“读”(从MySQL读10000条数据可能只要5秒钟),所以读写分离,解决的是,数据库的写入,影响了查询的效率。
3、什么场景需要读写分离
数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用,利用数据库主从同步 。可以减少数据库压力,提高性能。当然,数据库也有其它优化方案。memcache 或是 表折分,或是搜索引擎。都是解决方法。
4、如何实现读写分离
(1)可以通代码层面实现
(2)可以通过中间件代理实现
我们通过中间件MyCat实现读写分离(MySQL Proxy)
MyCat 我们关注几个配置文件:
server.xml()
schema.xml
rule.xml
参考:
https://www.cnblogs.com/happy4java/p/11206030.html
https://www.cnblogs.com/youzhibing/p/9553766.html
https://dev.mysql.com/doc/refman/5.6/en/replication.html
https://blog.csdn.net/zai_xia/article/details/90379016
https://www.cnblogs.com/php826291930/p/11242436.html