Apache 嵌入式德比复制 - 从实例不返回连接
Apache embedded derby replication - slave instance not returning the connection
我正在尝试在 apache 嵌入式 derby 数据库中设置复制。
我正在按照 DerbyAdmin guide 来实现相同的 -
按照这个,我必须先启动从数据库,然后再启动主数据库。但是,一旦我尝试在从属 derby 实例方法调用上获取连接,就会卡住。它从来没有 return 连接。以下是相同的代码 -
public static Connection getConnection(){
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
String url = "jdbc:derby:<slave db location>;startSlave=true";
System.out.println("about to fetch connection");
Connection con= null;
try{
con=DriverManager.getConnection(url, "root", "root");
}catch(Exception e){
e.printStackTrace();
}
System.out.println("return con -"+con);
return con;
}
输出
about to fetch connection
为了确保所有的 derby 库是否都包含在项目中,我尝试在没有 startSlave=true 属性的情况下获取连接,它确实 return 连接。
public static Connection getConnection(){
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
String url = "jdbc:derby:<slave db location>;";
System.out.println("about to fetch connection");
Connection con= null;
try{
con=DriverManager.getConnection(url, "root", "root");
}catch(Exception e){
e.printStackTrace();
}
System.out.println("return con -"+con);
return con;
}
输出
about to fetch connection
return con -org.apache.derby.impl.jdbc.EmbedConnection@2022850302 (XID = 420), (SESSIONID = 1), (DATABASE = I:/R&D/derby replication/Slave/replMaster), (DRDAID = null)
我尝试检查 derby.log 文件,但日志文件也是空的。
让我知道出了什么问题。
提前致谢。
经过很长时间的研究,我发现 slave 应该是这样工作的。
与我的假设不同,我们必须先启动 master,然后再启动 slave。
以下是我为使其工作而执行的步骤-
以嵌入式模式启动 derby 调用它实例 masterCandidate 并通过调用下面的 SP-
冻结数据库
call SYSCS_UTIL.SYSCS_FREEZE_DATABASE()
复制粘贴数据库(derby文件夹)到slave位置(注意不要停止这个derby实例)
现在开始德比 URL 调用它实例 slaveCandidate-
jdbc:derby:<slave db location>;startSlave=true
不要等待 return 连接的方法,当我们连接主 derby 实例时,它将 return 低于异常 -
ERROR XRE08: Replication slave mode started successfully for database ''. Connection refused because the database is in replication slave mode.
使用 startMaster 属性创建到 masterCandidate 实例的新连接并使其成为主节点 -
jdbc:derby:;startMaster=true;slaveHost=slaveHost;slavePort=slavePort
现在你已经准备好read/write on master,从现在开始不需要传递startMaster=true属性,而master连接
一旦 masterCandidate 实例关闭,slave 自动成为 master。
直到 master 总是从 slave 获取连接 return 上面提到的(第 3 点)异常。
一旦 master 宕机,我们就可以在 slaveCandidate 上获取连接而无需传递属性。
jdbc:derby:<slave db location>
我正在尝试在 apache 嵌入式 derby 数据库中设置复制。 我正在按照 DerbyAdmin guide 来实现相同的 -
按照这个,我必须先启动从数据库,然后再启动主数据库。但是,一旦我尝试在从属 derby 实例方法调用上获取连接,就会卡住。它从来没有 return 连接。以下是相同的代码 -
public static Connection getConnection(){
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
String url = "jdbc:derby:<slave db location>;startSlave=true";
System.out.println("about to fetch connection");
Connection con= null;
try{
con=DriverManager.getConnection(url, "root", "root");
}catch(Exception e){
e.printStackTrace();
}
System.out.println("return con -"+con);
return con;
}
输出
about to fetch connection
为了确保所有的 derby 库是否都包含在项目中,我尝试在没有 startSlave=true 属性的情况下获取连接,它确实 return 连接。
public static Connection getConnection(){
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
String url = "jdbc:derby:<slave db location>;";
System.out.println("about to fetch connection");
Connection con= null;
try{
con=DriverManager.getConnection(url, "root", "root");
}catch(Exception e){
e.printStackTrace();
}
System.out.println("return con -"+con);
return con;
}
输出
about to fetch connection
return con -org.apache.derby.impl.jdbc.EmbedConnection@2022850302 (XID = 420), (SESSIONID = 1), (DATABASE = I:/R&D/derby replication/Slave/replMaster), (DRDAID = null)
我尝试检查 derby.log 文件,但日志文件也是空的。 让我知道出了什么问题。
提前致谢。
经过很长时间的研究,我发现 slave 应该是这样工作的。
与我的假设不同,我们必须先启动 master,然后再启动 slave。
以下是我为使其工作而执行的步骤-
以嵌入式模式启动 derby 调用它实例 masterCandidate 并通过调用下面的 SP-
冻结数据库call SYSCS_UTIL.SYSCS_FREEZE_DATABASE()
复制粘贴数据库(derby文件夹)到slave位置(注意不要停止这个derby实例)
现在开始德比 URL 调用它实例 slaveCandidate-
jdbc:derby:<slave db location>;startSlave=true
不要等待 return 连接的方法,当我们连接主 derby 实例时,它将 return 低于异常 -
ERROR XRE08: Replication slave mode started successfully for database ''. Connection refused because the database is in replication slave mode.
使用 startMaster 属性创建到 masterCandidate 实例的新连接并使其成为主节点 -
jdbc:derby:;startMaster=true;slaveHost=slaveHost;slavePort=slavePort
现在你已经准备好read/write on master,从现在开始不需要传递startMaster=true属性,而master连接
一旦 masterCandidate 实例关闭,slave 自动成为 master。
直到 master 总是从 slave 获取连接 return 上面提到的(第 3 点)异常。
一旦 master 宕机,我们就可以在 slaveCandidate 上获取连接而无需传递属性。
jdbc:derby:<slave db location>