mysql读写分离

MySQL读写分离原理

MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先部署主从复制,只有复制完了,才能在此基础上进行数据的读写分离。

读写分离就是只在主服务器上写,只在从服务器上读,基本的原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的更新同步到集群中的从数据库。

实现步骤:通过centos系统虚拟机搭建两台服务器,主服务器和从服务器,在Linux中通过yum命令安装MySQL,确保服务正常;修改服务器server-id值,在从服务器设置只读权限,主服务器写入数据,从服务器会更新同步。

三种复制方式:

1)同步复制

  主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会受到严重的影响。需要有超时时间。

2)异步复制

  MySQL默认的复制即是异步的。主库执行完客户端提交的事务后会立即将结束返回给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。

3)半同步复制

  介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relaylog中返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延迟时的网络中使用。

注:通过程序代码实现mysql读写分离自然是一个不错的选择,但是并不是所有的应用都适合在程序代码中实现读写分离,像一些大型复杂的java应用,如果在程序代码中实现读写分离对代码改动就较大,像这种应用一般会考虑使用代理层来实现。

 

posted @ 2017-11-22 16:07  java_没有然后  阅读(380)  评论(0编辑  收藏  举报