`
fff
  • 浏览: 32371 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql replication driver 在jdk1.6下失效问题解决

阅读更多
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!");
		}
	}
分享到:
评论
4 楼 fff 2011-08-05  
检查下失败的异常,“不幸的家庭有各自的不幸”,so只能自己debug看看了
3 楼 paul_lmc 2011-07-22  
就是,我按照上面的方法,测试了,还是不行,不知道问题出在什么地方。

写数据库的时候,总是超时。不能写成功。
2 楼 fff 2010-02-24  
下个mysql driver的源代码debug下看看
1 楼 超级潜水艇 2010-01-25  
照你的方法弄了还是不行

相关推荐

    mysql replication搭建.docx

    ### MySQL Replication 架构与实现 #### 一、MySQL Replication 概念与优势 MySQL Replication 是一种数据复制机制,它允许将一个MySQL服务器(主服务器或Master)的数据异步复制到一个或多个其他MySQL服务器(从...

    ubuntu10.04_JDK1.6_hadoop_hbase安装白皮书.txt

    本文详细介绍了如何在 Ubuntu 10.04 系统上安装和配置 JDK 1.6、Hadoop 和 HBase。通过这些步骤,用户可以搭建起一个简单的 Hadoop 和 HBase 集群环境,用于进行大数据处理和存储。需要注意的是,为了确保系统的稳定...

    完整精品数据库课件 MySQL从入门到精通 第18章 MySQL Replication(共27页).ppt

    MySQL Replication是MySQL数据库系统中的一个重要特性,它允许数据从一个主服务器(master)自动同步到一个或多个从服务器(slaves)。这种技术主要用于数据备份、负载均衡和高可用性设置,确保即使在主服务器出现...

    MySql Replication Tutorial

    MySql Replication Tutorial,关于MySql Replication 的 PPT

    深入理解MySQL Group Replication.pdf

    MySQL Group Replication是一种高可用性和高性能的解决方案,旨在提供数据库的高可用性和高性能。它是MySQL数据库的一部分,旨在提供高可用性和高性能的解决方案。 背景: 数据库.replication是指在一个或多个站点...

    利用JDBC和MySQL Replication实现数据库集群

    针对这一情况,提出在现有硬件的基础上利用JDBC规范与MySQL Replication实现数据库集群从而解决数据访问瓶颈。其主要方法是在进行JDBC连接之前实现负载均衡,所有SQL请求由负载均衡器进行统一调度。在数据库端利用...

    MySQL Replication一主多从环境搭建.docx

    MySQL Replication是一种数据库复制技术,允许数据从一个MySQL服务器(主服务器)实时同步到其他一个或多个MySQL服务器(从服务器)。这种技术对于实现高可用性、负载均衡和数据备份至关重要。以下是对一主多从环境...

    MySQL Group Replication 详细搭建部署过程

    然后,在 db1、db2、db3 上依次安装 group replication 插件mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';。 MySQL Group Replication 的工作流程可以分为以下几个步骤: 1. 安装 ...

    基于MySQL Replication的数据库集群解决方案.pdf

    在采用MySQL Replication设计解决方案时,需要注意以下几点: 1) 可用性:MySQL Replication本身没有内置的高可用性机制,所以需要在方案设计时额外考虑提高系统的可用性,例如通过设置多从服务器实现故障切换。 2) ...

    Mysql Replication 具有HA.pdf

    MySQL Replication是一种在多台服务器间复制数据的技术,主要用于实现读写分离、数据备份和高可用性(High Availability, HA)。其最常见的方式是Master-Slave结构,其中Master节点负责接收写操作并将事务记录到二...

    MySQLReplication主从复制全方位解决方案.docx

    MySQLReplication主从复制全方位解决方案.docx

    python-mysql-replication, 在PyMYSQL之上,MySQL复制协议构建的纯 python 实现.zip

    python-mysql-replication, 在PyMYSQL之上,MySQL复制协议构建的纯 python 实现 python-mysql-replication MySQL复制协议在PyMYSQL之上的纯 python 实现。 这允许你接收诸如插入。更新。delete 和它们的数据和原始...

    深入理解MySQL Group Replication

    MySQL Group Replication是一种高可用性和可扩展性的解决方案,它通过在多个MySQL服务器之间自动同步数据来确保数据的一致性和可用性。该技术自MySQL 5.7.17版本引入,并在MySQL 8.0.1及后续版本中作为标准特性提供...

    Ubuntu上MySQL的Replication配置

    胖子摸索出来的,Ubuntu上MySQL的Replication配置,的简单记录步骤

    mysql replication修改库名及复制单个表

    通过精心配置MySQL Replication的参数,我们可以实现在不创建额外数据库的情况下,仅复制特定表的目标。这不仅提高了数据管理的灵活性,还确保了数据的一致性和完整性。对于需要在不同数据库之间迁移数据或优化数据...

    第18章 MySQL Replication PPT

    MySQL复制(Replication)是MySQL数据库系统中一种强大的功能,它允许数据从一个服务器(主服务器)异步地复制到一个或多个其他服务器(从服务器)。这种架构为高可用性、负载均衡和数据备份提供了基础。 在MySQL ...

    mysql-replication配置文档

    MySQL复制(replication)是一种将数据从一个MySQL服务器(主服务器)实时同步到另一个或多个服务器(从服务器)的技术,这种技术有助于实现高可用性、负载均衡和数据备份。在MySQL中,复制主要分为单向异步复制和...

    mysql-replication mysql数据库主从复制步骤

    MySQL主从复制是一种常用的数据冗余机制,能够实现数据的实时备份,并在主服务器出现故障时快速切换到从服务器,保证业务的连续性。接下来将详细介绍主从复制的具体配置及实施步骤。 ### MySQL数据库主从复制概述 ...

Global site tag (gtag.js) - Google Analytics