- 读写分离的好处:
- 将读写操作分离到不同数据库,避免服务器出现性能瓶颈
- 主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发
- 数据拥有多个容灾副本,提高数据安全性,当主服务器故障时,可立即切换到其他其他服务器,提高系统可用性
- 读写分离基本原理:
- 让主数据处理事务增删改操作,而从数据库处理查询操作
- 数据库复制被用来把事务性操作导致的变更同步到其他从数据库
- 主从数据库不是实时同步,就算网络良好,也存在某一瞬间主从数据不一致
- 图解:
主服务器上对数据操作保存在二进制日志中,然后通过i/o线程读写给中继日志,类似生产者消费者模式,一旦生产就给消费者使用,sql线程再根据中继日志进行重演
- 主从复制实现:
工具:主库--云服务器Windows的mysql5.7,从库--云服务器Linux的mysql5.7(看网上说,mysql5.5到5.7是个坑,注意主从数据库版本问题)
1、关闭mysql服务,主库my.ini配置,配置完重启服务:
server-id=1
log-bin=mysql-bin
binlog-do-db=masterdb
log-bin="c:/masterslave"
log-slave-updates
2、主库添加一个账户
grant replication slave,super,reload on *.* to 'masterUser'@'xxx.xx.xx.xxx' identified by 'masterPassword';
flush privileges;
3、打开从库
4、打开主库查看日志文件名称
5、根据主库上面的数据来配置从数据库
change master to master_host='xxx.xxx.xxx.xxx',master_user='masterUser',master_password='masterPassword',master_log_file='masterslave.000003',master_log_pos=154;
6、从库
7、测试:
在主库中操作
在从库中查看是否自动执行了sql,和主库保持一致
经查,从库创建了masterdb数据库,test表也插入了一行记录,主从复制成功!
如果从库出现1236或者1049错误,推荐一篇博客,解决方法类似
https://blog.csdn.net/zhu_lizhen/article/details/75043894
8、可以使用MySQL+ proxy(Lua脚本)或者是直接使用Amoeda来实现读写分离