腾讯云云原生数据库TDSQL-C对接使用完全指南:从入门到生产实战
1. TDSQL-C产品概述
TDSQL-C MySQL版是腾讯云自研的新一代云原生关系型数据库,采用计算与存储分离的架构,100%兼容原生MySQL协议。与传统自建数据库相比,TDSQL-C具备秒级弹性扩缩容、按需计费、最高可达百万级QPS等核心优势。其计算层完全兼容MySQL 5.7和8.0,您可以在不修改应用程序任何代码的情况下,将现有MySQL数据库平滑迁移至TDSQL-C。
在实例形态上,TDSQL-C提供两种选择:预置资源实例(包年包月或按量计费)和Serverless实例。Serverless模式的计算和存储独立计费,计算按CCU个数计费,存储按实际使用量计费,计费系统按秒计费、按小时结算,非常适合业务负载波动较大的场景。
一个TDSQL-C集群包含一个读写实例和最多15个只读实例。通过增加只读实例,可以有效降低读写实例的负载,实现一写多读的架构。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
2. 创建TDSQL-C集群
2.1 前提条件
在使用TDSQL-C之前,首先需要完成腾讯云账号的注册和实名认证。实名认证通过后,即可进入TDSQL-C购买页创建集群。
2.2 创建集群配置要点
在购买页中,需要完成以下核心配置:
- 实例形态:选择预置资源或Serverless。预置资源适合负载稳定的生产环境;Serverless适合开发测试或波动较大的业务场景。
- 实例引擎:支持事务集群和分析集群两种引擎。事务集群可通过开启只读分析引擎配合TXSQL读写实例提供HTAP能力;分析集群中仅存在只读分析引擎实例,通过Zero-ETL能力将配置的数据源数据同步至分析引擎。
- 地域与可用区:选择数据库部署的地域和可用区,支持多可用区部署以提升容灾能力。
- 网络:目前仅支持私有网络VPC。选择VPC后,同一VPC内的云服务器才能通过内网访问数据库实例。
- 数据库版本:支持MySQL 5.7和8.0。
- 计算实例:必须配置一个读写实例,并可选择添加0-15个只读实例。
2.3 创建数据库账号
集群创建完成后,需要在控制台创建用于连接的数据库账号。建议为不同的应用或环境创建独立的账号,并授予最小必要的权限。
3. 连接TDSQL-C的三种方式
TDSQL-C MySQL版支持通过以下三种方式进行连接:
3.1 内网地址连接(推荐)
通过内网地址连接是生产环境的首选方式。使用同地域、同账号、同VPC内的云服务器CVM直接连接数据库的内网地址,这种连接方式使用内网高速网络,延迟低、安全性高。
TDSQL-C支持实例级独立IP地址,即可以通过集群下读写实例或任意只读实例的IP地址连接访问对应实例。
查询内网地址:在TDSQL-C控制台的集群管理页面,找到目标实例,在其所属网络下方即可查看内网IP地址。
3.2 外网地址连接
外网地址需要手动开启。在控制台的实例详情页可以开启或关闭外网地址。外网连接易受网络影响,对网络有较高要求的场景推荐使用内网连接或云联网连接。需要注意的是,TDSQL-C不支持更换外网地址。
3.3 DMC数据库管理控制台连接
DMC(Database Management Center)是腾讯云提供的一款数据库管理工具,提供库表级操作、实时监控、实例会话管理、SQL窗口、数据管理等一体化服务。通过DMC可以直观方便地管理数据库实例。DMC服务目前免费使用,暂不收费。
登录DMC时,需要选择集群类型(事务集群或分析集群)、地域、集群、访问地址(主实例、只读实例、只读分析引擎或数据库代理),然后输入账号和密码即可。
4. 通过命令行连接TDSQL-C
在Linux云服务器上,可以通过MySQL客户端命令行工具连接TDSQL-C。
4.1 安装MySQL客户端
以CentOS 7.2系统为例,执行以下命令安装MySQL客户端:
yum install mysql4.2 内网连接命令
安装完成后,执行以下命令登录TDSQL-C:
mysql -h 内网地址 -P 端口 -u 用户名 -p参数说明:
-h:替换为TDSQL-C集群下目标实例的内网地址-P:替换为内网端口号(默认为3306)-u:替换为数据库账号名-p:提示输入密码
示例:
mysql -h 10.0.168.14 -P 5308 -u root -p输入密码后,出现 MySQL [(none)]> 提示即表示成功登录。
重要提示:使用MySQL登录命令时,务必增加 -c 参数,以支持注释透传功能。注释透传指支持透传SQL语句到对应的一个或者多个物理分片,并透传到分表键对应的分片中的操作方式。
mysql -h 内网地址 -P 端口 -u 用户名 -p密码 -c5. Python连接TDSQL-C代码示例
TDSQL-C完全兼容MySQL协议,因此可以使用标准的Python MySQL驱动(如pymysql)进行连接。
5.1 安装pymysql
pip install pymysql5.2 Python连接示例
import pymysql# 数据库连接配置
config = {
'host': 'your_tdsql_c_endpoint.tencentcdb.com', # 内网或外网地址
'port': 3306, # 端口号
'user': 'your_username', # 数据库账号
'password': 'your_password', # 数据库密码
'database': 'your_database', # 数据库名
'charset': 'utf8mb4' # 字符集
}
try:
# 建立连接
connection = pymysql.connect(**config)
print("TDSQL-C连接成功!")
# 创建游标
cursor = connection.cursor()
# 执行查询
cursor.execute("SELECT VERSION()")
result = cursor.fetchone()
print(f"数据库版本: {result[0]}")
# 创建表示例
create_table_sql = """
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(200) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""
cursor.execute(create_table_sql)
print("用户表创建成功")
# 插入数据示例
insert_sql = "INSERT INTO users (name, email) VALUES (%s, %s)"
cursor.execute(insert_sql, ("张三", "zhangsan@example.com"))
connection.commit()
print(f"插入数据成功,影响行数: {cursor.rowcount}")
# 查询数据示例
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 关闭游标和连接
cursor.close()
connection.close()
except pymysql.Error as e:
print(f"数据库操作失败: {e}")
except Exception as e:
print(f"连接失败: {e}")
上述代码展示了完整的连接、建表、插入和查询流程。在实际生产环境中,建议将连接配置放在配置文件中,并使用连接池管理数据库连接。
6. Java连接TDSQL-C代码示例
TDSQL-C完全兼容MySQL协议和JDBC规范,可以使用标准的MySQL JDBC驱动进行连接。
6.1 引入JDBC依赖
在Maven项目的pom.xml中添加以下依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>6.2 JDBC基础连接示例
TDSQL Boundless无需单独引入驱动包,直接使用MySQL官方驱动即可:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class TDSQLConnectionExample {
// JDBC连接URL - 完整示例
private static final String URL =
"jdbc:mysql://tdsql-xxxxxx.dns.tdsql.com:3306/your_db_name?" +
"useUnicode=true&characterEncoding=utf8mb4&" +
"serverTimezone=Asia/Shanghai&autoReconnect=true&" +
"failOverReadOnly=false&rewriteBatchedStatements=true&" +
"connectTimeout=3000&socketTimeout=60000";
private static final String USER = "your_username";
private static final String PASSWORD = "your_password";
public static void main(String[] args) {
try {
// 加载JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立连接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("TDSQL-C连接成功!");
// 执行查询
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT VERSION()");
if (rs.next()) {
System.out.println("数据库版本: " + rs.getString(1));
}
// 关闭资源
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
JDBC URL中各参数的含义:
useUnicode=true&characterEncoding=utf8mb4:启用Unicode编码,支持完整Unicode包括emoji字符,防止中文乱码serverTimezone=Asia/Shanghai:设置时区为UTC+8,解决MySQL 8.x驱动中的时区异常autoReconnect=true:当连接断开或主库切换时自动重连,防止业务因无效连接而报错rewriteBatchedStatements=true:启用批量SQL重写,提高INSERT/UPDATE批量操作的性能connectTimeout=3000:连接建立超时设置为3秒,实现快速失败,避免线程阻塞socketTimeout=60000:读写超时设置为60秒,防止慢SQL导致连接池耗尽
6.3 使用HikariCP连接池(生产推荐)
在生产环境中,强烈建议使用连接池管理数据库连接。连接池的核心价值在于解决频繁创建/销毁连接带来的性能开销、连接无限制增长以及数据库雪崩风险。以下以HikariCP为例:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class TDSQLHikariCPExample {
private static HikariDataSource dataSource;
static {
HikariConfig config = new HikariConfig();
// JDBC URL
config.setJdbcUrl(
"jdbc:mysql://tdsql-xxxxxx.dns.tdsql.com:3306/your_db_name?" +
"useUnicode=true&characterEncoding=utf8mb4&" +
"serverTimezone=Asia/Shanghai&autoReconnect=true&" +
"rewriteBatchedStatements=true"
);
config.setUsername("your_username");
config.setPassword("your_password");
// 驱动类名
config.setDriverClassName("com.mysql.cj.jdbc.Driver");
// 连接池核心参数
config.setMinimumIdle(5); // 最小空闲连接数
config.setMaximumPoolSize(20); // 最大连接数
config.setIdleTimeout(300000); // 空闲连接回收时间:5分钟
config.setConnectionTimeout(3000); // 连接超时:3秒
config.setMaxLifetime(1800000); // 连接最大生命周期:30分钟
// 连接测试
config.setConnectionTestQuery("SELECT 1");
dataSource = new HikariDataSource(config);
}
public static Connection getConnection() throws Exception {
return dataSource.getConnection();
}
public static void main(String[] args) {
try (Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT VERSION()");
ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
System.out.println("TDSQL-C版本: " + rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
HikariCP核心参数建议值:
- minimumIdle:建议设置为CPU核心数×2,保证连接池中有固定数量的空闲连接
- maximumPoolSize:根据业务并发量按需配置
- idleTimeout:建议300000ms(5分钟),回收长期空闲的连接以释放数据库资源
- connectionTimeout:建议3000ms,快速失败避免线程阻塞
7. 数据库代理与读写分离
TDSQL-C的数据库代理服务提供了自动读写分离能力。通过数据库代理,可以将读请求自动路由到只读实例,写请求路由到读写实例,从而有效降低读写实例的负载。
7.1 开启数据库代理
在TDSQL-C控制台的集群管理页面,选择已开启代理的集群,进入集群详情页后可以在拓扑图中找到数据库代理板块,点击详情进入数据库代理管理页面。
7.2 设置读写分离
在数据库代理管理页面,可以设置代理访问地址的读写属性。选择"读写分离"后,系统自动开启读写分离功能。同时支持为读写实例和多个只读实例分配不同的读权重。
接入模式支持"均衡分配"和"就近访问"两种模式。均衡分配模式适合对延迟不敏感的场景,就近访问模式则优先路由到同可用区的实例以降低延迟。
8. Serverless弹性伸缩配置
对于Serverless实例,TDSQL-C支持自动暂停和弹性扩缩容功能。
8.1 配置自动暂停
在集群详情页的"Serverless配置"中,可以勾选"自动暂停"并设置暂停时间(如1小时)。当1小时内无连接时,实例自动暂停,计算层停止计费。
8.2 自动扩缩容规则
Serverless实例可根据负载变化自动扩缩容。例如,当CPU使用率超过70%时自动扩容,负载下降后自动缩容。计算资源按秒级实际使用量收取费用,实例暂停后不收取计算费用。
这种弹性能力特别适合开发测试环境、电商大促等业务负载波动较大的场景。
9. 监控告警配置
TDSQL-C控制台提供了丰富的可视化监控告警页面,支持查看数据库运行状况和性能指标。
9.1 查看监控数据
在集群管理页选择"监控告警",可以查看CPU使用率、内存使用率、连接数、QPS、慢查询等核心性能指标。
9.2 设置告警策略
通过腾讯云可观测平台控制台,可以配置告警策略:
- 登录腾讯云可观测平台控制台,在左侧导航选择"告警管理" > "告警配置"
- 在告警策略列表页,点击"新建策略"
- 在新建策略页中,完成基本信息、告警规则、告警通知的设置
告警规则可以针对CPU使用率、连接数、慢查询数等指标设置阈值,当指标超过阈值时通过短信、邮件、微信等方式推送告警通知。
10. 安全组与访问控制
安全组是一种虚拟防火墙,用于设置云数据库等实例的网络访问控制,是重要的网络安全隔离手段。
10.1 配置安全组
在TDSQL-C控制台的集群管理页面,选择"安全组"页签,选择需要配置安全组的实例类型(读写实例、只读实例、只读分析引擎、数据库代理),点击"配置安全组"。
安全组目前仅支持私有网络VPC内网访问和外网访问的网络控制。
10.2 安全组规则建议
- 授权用户访问时只允许特定IP或IP段访问
- 如果是公网访问场景,务必放通所有涉及到的出口IP
- 遵循最小权限原则,仅开放必要的端口(如3306)
11. 数据迁移与导入导出
TDSQL-C MySQL版计算层100%兼容原生MySQL,因此可以使用MySQL原生的工具进行数据迁移。
11.1 数据导出方法
支持以下两种导出方式:
- 通过DMC管理平台导出:在DMC界面中可视化导出数据
- 使用MySQL原生工具:如mysqldump命令行工具
mysqldump -h 内网地址 -P 端口 -u 用户名 -p 数据库名 > backup.sql11.2 数据导入方法
支持以下导入方式:
- 使用DTS数据传输服务:持续同步增量数据
- 使用DMC管理平台导入
- 使用MySQL Workbench导入:通过Server > Data Import功能导入SQL文件
- 使用MySQL命令行工具:
mysql -h 内网地址 -P 端口 -u 用户名 -p 数据库名 < backup.sql注意:使用mysqldump导出的数据文件必须兼容目标TDSQL-C的MySQL版本。
12. 计费模式与成本优化
12.1 计费模式
TDSQL-C的计费项包括计算节点、存储空间以及增值服务项。预置资源实例支持按量计费和包年包月两种模式。Serverless实例计算和存储独立计费,计算按CCU个数计费,存储按使用量GB计费。
12.2 成本优化建议
- 选择合适的实例规格:根据业务实际负载选择计算规格,避免资源浪费
- 使用Serverless应对波动:对于开发测试或负载波动大的场景,Serverless模式可以显著降低成本
- 利用自动暂停功能:Serverless实例在无连接时可自动暂停,暂停期间不收取计算费用
- 合理规划只读实例:根据读流量需求合理配置只读实例数量
- 购买资源包:对于稳定运行的实例,可以购买资源包进行资源抵扣,享受更优惠的价格
13. 常见连接问题排查
13.1 连接失败常见原因
TDSQL-C数据库连接失败可能由以下原因导致:
- 网络问题:客户端与数据库不在同一VPC或子网,未配置正确的网络互通(如安全组、NAT网关)
- 认证失败:用户名、密码错误,或账号权限不足
- 实例状态异常:数据库实例未启动、已隔离(欠费)或正在维护中
- 配置问题:连接地址填写错误,或端口未开放
- 客户端问题:客户端驱动版本不兼容,或代码中连接字符串配置错误
13.2 解决建议
- 通过TDSQL-C控制台检查实例状态、网络配置和账号权限
- 通过私有网络VPC和安全组配置网络隔离与访问规则
- 通过云监控查看实例的CPU、内存、连接数等指标,排查资源瓶颈
- 通过数据库审计功能追踪连接失败的具体操作记录
14. 常见问题问答
问1:TDSQL-C支持哪些MySQL版本?
答:TDSQL-C MySQL版支持MySQL 5.7和8.0两个大版本。
问2:一个TDSQL-C集群最多可以配置多少个只读实例?
答:一个集群包含一个读写实例和最多15个只读实例。
问3:TDSQL-C支持JDBC连接吗?
答:支持。TDSQL-C完全兼容MySQL协议,也完全支持JDBC协议。使用标准的MySQL JDBC驱动即可连接。
问4:TDSQL-C Serverless实例如何计费?
答:Serverless实例的计算和存储独立计费。计算按CCU个数计费,存储按实际使用量GB计费。计费系统按秒计费、按小时结算。实例暂停后不收取计算费用。
问5:TDSQL-C支持数据库版本升级吗?
答:目前TDSQL-C不支持直接进行数据库版本升级(如从MySQL 5.7升级到8.0)。如需升级版本,可以创建目标版本的新实例,通过DTS数据传输服务将源数据迁移到新实例。
问6:TDSQL-C如何实现读写分离?
答:通过开启数据库代理服务,在代理访问地址中选择"读写分离"属性即可自动开启读写分离功能。系统会自动将读请求路由到只读实例,写请求路由到读写实例。




