mysql diver包里有relication driver,可以在jdbc层进行读写分离,主写从读
默认的配置方式是指定driver为ReplicationDriver,并改写jdbc url
jdbc.driverClassName=com.mysql.jdbc.ReplicationDriver
jdbc.url=jdbc:mysql://192.168.1.23:3306,192.168.1.252:3306/my_db?useUnicode=true
ref.
mysql doc
但是在jdk1.6(win)下,这个配置不生效。升级driver jar依旧如此,最后只好debug connect过程,发现datasource的driver加载过程并不是直接用定义的driverClass去forName加载直接建立连接,而是分两个步骤:
ensureDriverLoaded(); //确认是否加载driver,否则forName加载
Connection out = driver().connect( jdbcUrl, overrideProps(username, password) ); //从已加载的drivers列表中取得能parseUrl的driver,并建立连接
问题就在第二步里产生。
com.mysql.jdbc下drivers的继承关系如下
NonRegisteringDriver //包含主要逻辑,包括
解析url
-|-Driver //空,无功能逻辑
|-NonRegisteringReplicationDriver //主要的replication逻辑
-|-ReplicationDriver //空,无功能逻辑
在jdk1.5下,drivers列表仅有 ensureDriverLoader()加载的 ReplicationDriver;
在jdk1.6(win)下,ensureDriverLoader()方法加载 ReplicationDriver 过程里会先加载[com.mysql.jdbc.Driver, sun.jdbc.odbc.JdbcOdbcDriver](这里还没搞清楚,可能和jvm加载方式有关?)
导致 com.mysql.jdbc.Driver 用来建立connection,而非配置的 ReplicationDriver,replication的从读被忽略了
===============
解决办法却和上面的问题无关,而是在jdbc url里配上完整的replication信息,用"jdbc:mysql:replication://"替换原来的"jdbc:mysql://"
jdbc.driverClassName=com.mysql.jdbc.ReplicationDriver
jdbc.url=jdbc:mysql:replication://192.168.1.23:3306,192.168.1.252:3306/my_db?useUnicode=true
因为在 Top driver的connect() 里实现了 ReplicationDriver的connect()功能,前提就是url里有replication串。
mysql driver代码里的诡异实现,难道是某种补丁?
关于Driver 和 ReplicationDriver的无功能逻辑的解释,只有这一个功能,载入实际功能类
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
// ~ Static fields/initializers
// ---------------------------------------------
//
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
分享到:
相关推荐
mysql replication搭建
MySql Replication Tutorial,关于MySql Replication 的 PPT
针对这一情况,提出在现有硬件的基础上利用JDBC规范与MySQL Replication实现数据库集群从而解决数据访问瓶颈。其主要方法是在进行JDBC连接之前实现负载均衡,所有SQL请求由负载均衡器进行统一调度。在数据库端利用...
MySQL Replication一主多从环境搭建
【完整课件如下】MySQL从入门到精通 第01章 初始MySQL(共19页).pptMySQL从入门到精通 第02章 MySQL的安装与配置(共14页).pptMySQL从入门到精通 第03章 数据库的基本操作(共11页).pptMySQL从入门到精通 第04章 ...
mysql-replication mysql数据库主从复制步骤
MySQLReplication主从复制全方位解决方案.docx
Mysql Replication HA 配置
胖子摸索出来的,Ubuntu上MySQL的Replication配置,的简单记录步骤
详细描述mysql-replication配置,mysql主从库切换,验证等
MySQL Group Replication 详细搭建部署过程
基于MySQL Replication的数据库集群解决方案.pdf
mysql replication修改库名及复制单个表
深入理解MySQL Group Replication.pdf
NULL 博文链接:https://risheng.iteye.com/blog/1853366
MySQL Replication Tips and Tricks 关于mysql复制的使用技巧,在新版中的新特性,推荐!!
MySQL Replication PPT资源
MySQL Replication(复制)已经在一些著名的网站和企业广泛应用以将数据库的扩展性提升到极限水平。对用户而言可以简单快速地为数据库创建多个副本,超越单个数据库实例容量的限制,弹性扩展数据库系统以满足快速增长...
python-mysql-replication, 在PyMYSQL之上,MySQL复制协议构建的纯 python 实现 python-mysql-replication MySQL复制协议在PyMYSQL之上的纯 python 实现。 这允许你接收诸如插入。更新。delete 和它们的数据和原始...
本篇文章详细介绍了Mysql 5.7 基于组复制(MySQL Group Replication)的配置说明,实为线上操作手册,在此分享,希望能帮助到有用到的朋友~