通过JDBC连接MySQL实例 本页介绍如何通过JDBC连接关系数据库MySQL版。 通过JDBC连接实例的方式有无需下载SSL证书连接和用户下载SSL证书连接两种,其中使用SSL证书连接通过了加密功能,具有更高的安全性。MySQL新实例默认关闭SSL数据加密,开启SSL请参考设置SSL数据加密。SSL连接实现了数据加密功能,但同时也会增加网络连接响应时间和CPU消耗,不建议开启SSL数据加密。 前提条件 用户需要具备以下技能: 熟悉计算机基础知识。 了解JAVA编程语言。 了解JDBC基础知识。 使用SSL证书连接 说明 使用SSL证书连接实例,即通过证书校验并连接数据库。 1. 下载CA证书。 1. 在天翼云官网首页的顶部菜单栏,选择产品 > 数据库 > 关系型数据库 > 关系数据库MySQL版 ,进入关系数据库MySQL产品页面。然后单击管理控制台 ,进入TeleDB数据库概览页面。 2. 在左侧导航栏,选择MySQL > 实例管理,进入实例列表页面。然后在顶部菜单栏,选择区域和项目。 3. 在实例列表中,单击目标实例名称,进入实例基本信息页面。 4. 在网络 区域,单击SSL状态 参数右侧的下载证书。 2. 使用keytool工具通过CA证书生成truststore文件。 说明 Keytool是Java开发工具包中的一个命令行工具,可用于管理密钥和证书。 如果您的系统中安装了Java并配置了正确的环境变量,则可以直接使用keytool命令。 如果您的系统中没有安装Java,请先安装Java,然后配置环境变量再使用keytool命令。 java keytool.exe importcert alias file keystore storepass 变量 说明 : 请设置truststore文件的名称。建议设置为具有业务意义的名称,便于后续识别。 请替换为下载的CA证书的名称,ca.pem。 请设置truststore文件的存放路径。 请设置truststore文件的密码。 代码示例(使用JDK安装路径下的keytool工具生成truststore文件): java Owner: OID.0.9.2342.19200300.100.1.3Sample@chinatelecom.cn, CNca.ctyun.com, OUDataBaseGroup, OCloudCenter, LGuangZhou, STGuangDong, CCN Issuer: OID.0.9.2342.19200300.100.1.3Sample@chinatelecom.cn, CNca.ctyun.com, OUDataBaseGroup, OCloudCenter, LGuangZhou, STGuangDong, CCN Serial number: b0db70460527a4df Valid from: Tue Mar 21 15:40:12 CST 2023 until: Fri Mar 18 15:40:12 CST 2033 Certificate fingerprints: MD5: A6:9G:E5:5C:10:E4:F4:18:84:66:76:23:54:92:4C:8A SHA1: 23:66:FE:D4:83:24:58:69:B5:F6:28:04:8D:AA:FB:0E:B0:B9:F9:CB SHA256: 3F:C9:C7:EA:3F:8E:9F:6E:71:7E:5C:7A:81:44:0B:EA:51:CB:EA:7F:9C:00:3A:CF:6E:B8:64:9D:16:62:73:91 Signature algorithm name: SHA256withRSA Subject Public Key Algorithm: 2048bit RSA key Version: 3 Extensions: Trust this certificate? [no]: y Certificate was added to keystore 3. 通过JDBC连接MySQL数据库,代码中的JDBC链接格式如下: jdbc:mysql:// : / ? requireSSL &useSSL &verifyServerCertificate &trustCertificateKeyStoreUrlfile: &trustCertificateKeyStorePassword 参数 说明 请替换为实例的IP地址。 说明:如果通过弹性云主机连接,“instanceip”是实例的“内网地址”。您可以在该实例“基本信息”页面的“实例信息”区域查看连接地址。如果通过公网连接,“instanceip”为该实例已绑定的“弹性公网IP”。 请替换为实例的数据库端口,默认为13049。 说明:您可以在该实例“连接管理”页面的“连接信息”区域查看。 替换为连接实例使用的数据库名,默认为mysql。 requireSSL的值,用于设置服务端是否支持SSL连接。取值如下:true:支持。false:不支持。 useSSL的值,用于设置客户端是否使用SSL连接服务端。取值如下:true:使用。false:不使用。 verifyServerCertificate的值,客户端是否校验服务端的证书。取值如下:true:校验。false:不校验。 替换为truststore文件设置的存储路径。 替换为truststore文件设置的密码。 requireSSL参数应用说明 useSSL requireSSL verifyServerCertificate sslMode false 不涉及 不涉及 DISABLED true false false PREFERRED true true false REQUIRED true 不涉及 true VERIFYCA 代码示例(连接MySQL数据库的java代码): java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.sql.SQLException; public class JDBCConnTest { public static void main(String[] args) { Connection conn null; Statement stmt null; String url "jdbc:mysql://instanceip:13049/dbname? requireSSLtrue&useSSLtrue&verifyServerCertificatetrue&trustCertificateKeyStoreUrlfile: &trustCertificateKeyStorePassword "; try { Class.forName("com.mysql.cj.jdbc.Driver"); String USER "xxx"; String PASSOWRD "xxx"; conn DriverManager.getConnection(url, USER, PASSOWRD ); stmt conn.createStatement(); String sql "show status like 'ssl%'"; ResultSet rs stmt.executeQuery(sql); int columns rs.getMetaData().getColumnCount(); for (int i 1; i < columns; i++) { System.out.println(rs.getMetaData().getColumnName(i)); } while (rs.next()) { System.out.println(); for (int i 1; i < columns; i++) { System.out.println(rs.getObject(i)); } } rs.close(); stmt.close(); conn.close(); } catch (SQLException se) { se.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 } } }