简析MySQL读写分离与负载均衡实例教程
发布时间:2022-06-29 04:15:52 所属栏目:MySql教程 来源:互联网
导读:MySQL 数据库的读写分离和负载均衡一般是通过第三方软件来实现的,也可以通过mysql驱动程序来实现,如com.mysql.jdbc.ReplicationDriver. 详细文档参见:http://dev.mysql.com/doc/refman/5.5/en/connector-j-info.html,代码如下: import java.sql.Connection
MySQL 数据库的读写分离和负载均衡一般是通过第三方软件来实现的,也可以通过mysql驱动程序来实现,如com.mysql.jdbc.ReplicationDriver. 详细文档参见:http://dev.mysql.com/doc/refman/5.5/en/connector-j-info.html,代码如下: import java.sql.Connection; import java.sql.ResultSet; import java.util.Properties; import com.mysql.jdbc.ReplicationDriver; public class ReplicationDriverDemo { ![]() public static void main(String[] args) throws Exception { ReplicationDriver driver = new ReplicationDriver(); 读写分离: jdbc:mysql:replication://master:3306,slave1:3306,slave2:3306/dbname When using the following connection string: jdbc:mysql:replication://dbmaster:3306,dbslave1:3306,dbslave2:3306/dbname dbmaster is used for all write connections as expected and dbslave1 is used for all read connections, but dbslave2 is never used. I would have expected distributed reads between dbslave1 and dbslave2. 原理是:ReplicationDriver生成代理的connection对象,当设置这个connection.readOnly=true时,连接slave,当connection.readOnly=false时,连接master 负载均衡: jdbc:mysql:loadbalance://master:3306,slave1:3306,slave2:3306/dbname When using the following connection string: jdbc:mysql:loadbalance://dbmaster:3306,dbslave1:3306,dbslave2:3306/dbname connections are load-balanced between all three servers for both read and write connections. 问题:读写分离时可能会碰到刚写完master,再马上到slave进行查询的情况,而主从复制的时候有延迟,这时怎么解决呢?有两个办法. 1.比如增加页面保存数据后马上跳转到列表页面,这时可能出不来数据,因为复制还没完成,这时可以在前台添加一些成功的提示,成功页面等进行一些页面跳转延迟处理,让服务器有时间去复制,复制延迟一般在毫秒级,而这种提示处理在秒级,所以时间上一般是足够的. 2.第1种办法可能部分场景是可行的,但是有些场景要求比较高,需要实时的,这时可以在读取的时候进行处理,强制从master中读取,可以通过注解,加参数/标识等来指定从master读取数据. (编辑:锡盟站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐