You need to enable JavaScript to run this app.
文档中心
云数据库 MySQL 版

云数据库 MySQL 版

复制全文
下载 pdf
连接实例
通用客户端程序连接实例
复制全文
下载 pdf
通用客户端程序连接实例
通用客户端程序连接实例​
您可以选用任何兼容 MySQL 协议的客户端程序进行连接。本文介绍通过客户端程序连接 MySQL 实例的相关操作。​
背景信息​
云数据库 MySQL 版支持多种类型的连接地址,推荐使用私网地址进行连接。但如果您的客户端程序部署在本地,无法和 MySQL 实例处于同一个私有网络(VPC)下,则需要使用公网地址连接实例。​
云数据库 MySQL 版实例默认使用 3306 端口号。MySQL 实例的连接地址前缀和端口号支持修改,如有需要,可参考修改连接地址前缀和端口进行操作。​
操作步骤​
根据客户端程序的部署位置,完成相应的操作以连接实例。​
  1. 确保 ECS 实例与 MySQL 实例属于同一 VPC 网络中。​
  1. 获取 ECS 实例的私网 IPv4 地址。​
  1. 将 ECS 实例的私网 IPv4 地址添加到 MySQL 实例的白名单中。设置白名单的方法,请参见设置白名单。​
  1. 在客户端程序中完成相应的配置,连接实例。​
  • 客户端部署在本地​
  1. 为 MySQL 实例申请公网地址。关于申请公网地址的详细信息,请参见开启或关闭公网访问。​
  1. 获取本地设备的公网 IPv4 地址。​
  1. 将本地设备的公网 IPv4 地址添加到 MySQL 实例的 IP 白名单中。设置白名单的方法,请参见设置白名单。​
  1. 在客户端程序中完成相应的配置,连接实例。​
使用 caching_sha2_password 认证连接实例​
caching_sha2_password 是 MySQL 8.0 及以上版本数据库使用的身份验证插件,采用新的加密算法对登录凭证进行校验,直连地址和数据库代理连接地址均适用。对于服务端尚未缓存登录凭证的用户或 IP,插件执行更严格的全量认证:客户端需要基于 TLS 通道发送明文密码,或使用 MySQL 服务端的 RSA 公钥对密码进行加密,再由服务端使用私钥进行非对称解密;对于已成功登录过的用户,则使用效率更高的快速认证。​
前提条件​
连接使用 caching_sha2_password 插件的实例时(无论使用直连地址还是数据库代理连接地址),客户端需要满足以下前提条件中的任意一个:​
  • 客户端本地已缓存 MySQL 服务端的 RSA 公钥。​
  • 客户端支持在连接时从服务端获取 RSA 公钥。​
说明​
  • 允许客户端从服务端获取 RSA 公钥(如 Connector/J 的 allowPublicKeyRetrieval=true)时,客户端会信任连接过程中获取到的公钥,在不可信网络中存在被攻击的风险。建议仅在网络可信的内网场景使用该方式,生产环境优先使用 SSL 加密或本地公钥文件。​
  • 您可以通过执行 SHOW STATUS LIKE 'Caching_sha2_password_rsa_public_key'; 语句获取服务端 RSA 公钥,并将公钥保存为 PEM 格式的本地文件(例如 mysql_server_public_key.pem)后,在客户端连接参数中指定该文件的路径。但需注意,在使用数据库代理连接时,需要确保查询的是主节点公钥,且若实例发生主从切换,需要重新获取公钥。​
连接示例​
各语言客户端的配置示例如下。示例中 {ip}、{port}、{db}、{user}、{password} 需分别替换为实例的实际连接地址(直连地址或数据库代理连接地址)、端口、数据库名、账号和密码。​
Java(MySQL Connector/J)连接示例​
未开启 SSL 时,设置 allowPublicKeyRetrieval=true 允许客户端从服务端获取公钥:​
​
import java.sql.Connection;​
import java.sql.DriverManager;​
​
public class MysqlJdbcDemo {​
public static void main(String[] args) throws Exception {​
String url = "jdbc:mysql://{ip}:{port}/{db}"​
+ "?sslMode=DISABLED"​
+ "&allowPublicKeyRetrieval=true";​
​
try (Connection conn = DriverManager.getConnection(url, "{user}", "{password}")) {​
System.out.println("connected");​
}​
}​
}​
​
// 连接串示例 ​
jdbc:mysql://{ip}:{port}/your_db?sslMode=DISABLED&allowPublicKeyRetrieval=true​
​
C#(MySQL Connector/NET)连接示例​
  • 允许客户端从服务端获取公钥。​
  • ​
    using MySql.Data.MySqlClient;​
    ​
    var cs = "Server={ip};"​
    + "Port={port};"​
    + "Database={db};"​
    + "User ID={user};"​
    + "Password={password};"​
    + "SslMode=None;"​
    + "AllowPublicKeyRetrieval=True;";​
    ​
    using var conn = new MySqlConnection(cs);​
    conn.Open();​
    ​
    Console.WriteLine("connected");​
    ​
  • 使用本地缓存的服务端 RSA 公钥文件。​
  • ​
    using MySql.Data.MySqlClient;​
    ​
    var cs = "Server={ip};"​
    + "Port={port};"​
    + "Database={db};"​
    + "User ID={user};"​
    + "Password={password};"​
    + "SslMode=None;"​
    + "ServerRSAPublicKeyFile=/path/to/mysql_server_public_key.pem;";​
    ​
    using var conn = new MySqlConnection(cs);​
    conn.Open();​
    ​
    Console.WriteLine("connected");​
    ​
C#(MySqlConnector)连接示例​
  • 允许客户端从服务端获取公钥。​
  • ​
    using MySqlConnector.MySqlClient;​
    ​
    var cs = "Server={ip};"​
    + "Port={port};"​
    + "Database={db};"​
    + "User ID={user};"​
    + "Password={password};"​
    + "SslMode=None;"​
    + "AllowPublicKeyRetrieval=True;";​
    ​
    await using var conn = new MySqlConnection(cs);​
    await conn.OpenAsync();​
    ​
    Console.WriteLine("connected");​
    ​
  • 使用本地缓存的服务端 RSA 公钥文件。​
  • ​
    using MySqlConnector.MySqlClient;​
    ​
    var cs = "Server={ip};"​
    + "Port={port};"​
    + "Database={db};"​
    + "User ID={user};"​
    + "Password={password};"​
    + "SslMode=None;"​
    + "ServerRSAPublicKeyFile=/path/to/mysql_server_public_key.pem;";​
    ​
    await using var conn = new MySqlConnection(cs);​
    await conn.OpenAsync();​
    ​
    Console.WriteLine("connected");​
    ​
C(MySQL C API / libmysqlclient)连接示例​
  • 通过 MYSQL_OPT_GET_SERVER_PUBLIC_KEY 选项从服务端获取公钥。​
  • ​
    #include <mysql.h>​
    #include <stdio.h>​
    #include <stdlib.h>​
    ​
    int main(void) {​
    MYSQL *mysql = mysql_init(NULL);​
    if (mysql == NULL) {​
    return 1;​
    }​
    ​
    unsigned int get_server_public_key = 1;​
    mysql_options(mysql, MYSQL_OPT_GET_SERVER_PUBLIC_KEY, &get_server_public_key);​
    ​
    if (mysql_real_connect(​
    mysql,​
    "{ip}",​
    "{user}",​
    "{password}",​
    "{db}",​
    3306,​
    NULL,​
    0) == NULL) {​
    fprintf(stderr, "connect failed: %s\n", mysql_error(mysql));​
    mysql_close(mysql);​
    return 1;​
    }​
    ​
    printf("connected\n");​
    mysql_close(mysql);​
    return 0;​
    }​
    ​
  • 通过 MYSQL_SERVER_PUBLIC_KEY 选项指定本地缓存的服务端 RSA 公钥文件。​
​
const char *pubkey = "/path/to/mysql_server_public_key.pem";​
mysql_options(mysql, MYSQL_SERVER_PUBLIC_KEY, pubkey);​
​
​
最近更新时间:2026.11.05 18:13:35
这个页面对您有帮助吗?
有用
有用
无用
无用