TDSQL MySQL 版 DBA 实用 100 条命令

TDSQL MySQL 版虽然兼容 MySQL 协议和大量 MySQL 语法,但它并不是在单机 MySQL 外面简单加一层代理。对于 InnoDB 引擎分布式实例来说,SQL 会先经过 Proxy 解析和路由,再发送到对应的 set 执行。

这意味着很多在单机 MySQL 中习以为常的操作,在 TDSQL 中需要重新理解:

  • 分表需要指定 shardkey
  • 分表的主键和唯一索引必须包含分表键
  • 查询不带分表键可能广播到所有 set
  • 分表的 INSERT 必须包含分表键
  • UPDATEDELETE 必须带 WHERE 条件
  • 单表只存放在一个 set
  • 广播表会在所有 set 保存全量数据
  • 部分 SQL 需要使用透传语法
  • 读写分离可以通过注释标记控制
  • 用户权限、备份恢复、扩缩容和主备管理中的部分操作需要在控制台完成

下面整理了 TDSQL MySQL 版 InnoDB 引擎常用的 100 条命令,覆盖连接、基础信息、对象检查、分表设计、数据操作、事务、读写分离、会话、锁、SQL 性能、空间、索引、Sequence、透传和导入导出等场景。

TDSQL MySQL 版存在不同内核和 SQL 引擎版本,部分语法与返回字段可能不同。本文不适用于 TDSQL Boundless、TDSQL PostgreSQL,也不能直接当作普通 MySQL 8.0 命令清单使用。执行前应通过控制台确认实例类型、内核版本和 SQL 引擎版本。

文中的数据库名、表名、账号、IP、端口、set 名称和分表键均为示例。涉及删除数据、终止连接、透传写操作、表结构变更和数据导入时,应先在测试环境验证。

一、连接与基础信息

1. 使用 MySQL 客户端连接 TDSQL

bash 复制代码
mysql -h 192.168.1.10 -P 3306 -u appuser -p

密码由终端交互式输入,不建议直接写在命令行中。

2. 保留注释连接 TDSQL

bash 复制代码
mysql -c -h 192.168.1.10 -P 3306 -u appuser -p

-c 表示保留 SQL 注释。使用读写分离、透传 SQL 和 Proxy 管理注释时,应带上该参数,避免注释被客户端过滤。

3. 查看数据库版本

sql 复制代码
SELECT VERSION();

结果反映当前兼容内核版本,但还应结合控制台确认 TDSQL 产品形态和 SQL 引擎版本。

4. 查看服务器基础信息

sql 复制代码
SELECT
    @@hostname AS hostname,
    @@port AS port,
    @@version AS version,
    CONNECTION_ID() AS connection_id;

经过 Proxy 连接时,部分变量反映的是当前路由节点或平台提供的逻辑信息。

5. 查看当前数据库

sql 复制代码
SELECT DATABASE();

6. 查看当前用户

sql 复制代码
SELECT
    USER() AS login_user,
    CURRENT_USER() AS privilege_user;

TDSQL MySQL 版的账号创建和权限配置通常需要通过控制台完成,不能照搬普通 MySQL 的用户管理流程。

7. 查看当前时间

sql 复制代码
SELECT
    NOW() AS local_time,
    UTC_TIMESTAMP() AS utc_time;

8. 查看时区

sql 复制代码
SELECT
    @@session.time_zone AS session_time_zone,
    @@global.time_zone AS global_time_zone,
    @@system_time_zone AS system_time_zone;

9. 查看字符集

sql 复制代码
SELECT
    @@character_set_server,
    @@character_set_database,
    @@character_set_connection,
    @@character_set_client,
    @@character_set_results;

10. 查看 SQL 模式

sql 复制代码
SELECT
    @@global.sql_mode,
    @@session.sql_mode;

SQL 模式会影响严格校验、分组查询和日期值处理。

二、数据库与对象信息

11. 查看所有数据库

sql 复制代码
SHOW DATABASES;

12. 创建数据库

sql 复制代码
CREATE DATABASE appdb
DEFAULT CHARACTER SET utf8mb4;

13. 切换数据库

sql 复制代码
USE appdb;

14. 查看数据库创建语句

sql 复制代码
SHOW CREATE DATABASE appdb;

15. 查看数据库中的表

sql 复制代码
SHOW FULL TABLES FROM appdb;

16. 查看表结构

sql 复制代码
DESC appdb.orders;

17. 查看完整建表语句

sql 复制代码
SHOW CREATE TABLE appdb.orders\G

这是检查 shardkey、主键、唯一索引、字符集和二级分区定义的重要入口。

18. 查看表状态

sql 复制代码
SHOW TABLE STATUS FROM appdb LIKE 'orders'\G

返回的行数通常是估算值,分布式实例中的空间数据还应结合控制台监控判断。

19. 查看表字段

sql 复制代码
SELECT
    column_name,
    column_type,
    is_nullable,
    column_key,
    column_default,
    extra
FROM information_schema.columns
WHERE table_schema = 'appdb'
  AND table_name = 'orders'
ORDER BY ordinal_position;

20. 查看表约束

sql 复制代码
SELECT
    constraint_name,
    constraint_type
FROM information_schema.table_constraints
WHERE table_schema = 'appdb'
  AND table_name = 'orders'
ORDER BY constraint_type, constraint_name;

三、分表、单表与广播表

21. 创建 HASH 分表

sql 复制代码
CREATE TABLE appdb.orders (
    order_id BIGINT NOT NULL,
    customer_id BIGINT NOT NULL,
    order_time DATETIME NOT NULL,
    amount DECIMAL(18,2) NOT NULL,
    PRIMARY KEY (order_id, customer_id),
    KEY idx_orders_customer (customer_id)
) ENGINE = InnoDB
SHARDKEY = customer_id;

SHARDKEY 必须放在建表语句末尾。分表键应选择分布较均匀、查询经常携带并且不会更新的字段。

22. 创建带唯一索引的分表

sql 复制代码
CREATE TABLE appdb.user_account (
    user_id BIGINT NOT NULL,
    account_no VARCHAR(64) NOT NULL,
    user_name VARCHAR(100),
    PRIMARY KEY (user_id),
    UNIQUE KEY uk_account_user (account_no, user_id)
) ENGINE = InnoDB
SHARDKEY = user_id;

分表的主键和每个唯一索引都必须包含分表键,否则无法保证跨分片全局唯一。

23. 创建普通单表

sql 复制代码
CREATE TABLE appdb.system_config (
    config_key VARCHAR(100) PRIMARY KEY,
    config_value VARCHAR(500)
) ENGINE = InnoDB;

不指定 shardkey 时创建的是单表,数据存放在一个 set 中,适合数据量较小且不需要广播的对象。

24. 创建广播表

sql 复制代码
CREATE TABLE appdb.region_dict (
    region_id INT PRIMARY KEY,
    region_name VARCHAR(100)
) ENGINE = InnoDB
SHARDKEY = noshardkey_allset;

广播表会在所有 set 中保存全量数据,适合较小、更新不频繁并且经常参与跨 set 关联的字典表。

25. 创建一级 RANGE 分表

sql 复制代码
CREATE TABLE appdb.orders_range (
    order_id BIGINT NOT NULL,
    order_time DATE NOT NULL,
    amount DECIMAL(18,2),
    PRIMARY KEY (order_id, order_time)
)
TDSQL_DISTRIBUTED BY RANGE(order_id) (
    s1 VALUES LESS THAN (1000000),
    s2 VALUES LESS THAN (2000000)
);

RANGE 和 LIST 一级分区语法需要相应 SQL 引擎版本支持,MySQL 5.7 兼容内核可能不支持。

26. 创建一级 LIST 分表

sql 复制代码
CREATE TABLE appdb.customer_list (
    customer_id BIGINT NOT NULL,
    customer_name VARCHAR(100),
    PRIMARY KEY (customer_id)
)
TDSQL_DISTRIBUTED BY LIST(customer_id) (
    s1 VALUES IN (1,3,5),
    s2 VALUES IN (2,4,6)
);

s1s2 是 set 别名,应根据实际 set 数量和官方规则配置,不能随意改成业务名称。

27. 创建一级 HASH、二级 RANGE 分区表

sql 复制代码
CREATE TABLE appdb.order_history (
    customer_id BIGINT NOT NULL,
    order_id BIGINT NOT NULL,
    order_date DATE NOT NULL,
    amount DECIMAL(18,2),
    PRIMARY KEY (customer_id, order_id, order_date)
) ENGINE = InnoDB
SHARDKEY = customer_id
PARTITION BY RANGE COLUMNS(order_date) (
    PARTITION p202601 VALUES LESS THAN ('2026-02-01'),
    PARTITION p202602 VALUES LESS THAN ('2026-03-01'),
    PARTITION pmax VALUES LESS THAN (MAXVALUE)
);

二级分区适合需要按时间裁剪和清理的表,不建议划分过细。

28. 查看分区信息

sql 复制代码
SELECT
    table_schema,
    table_name,
    partition_name,
    partition_method,
    partition_expression,
    table_rows
FROM information_schema.partitions
WHERE table_schema = 'appdb'
  AND table_name = 'order_history'
ORDER BY partition_ordinal_position;

29. 增加二级 RANGE 分区

sql 复制代码
ALTER TABLE appdb.order_history
ADD PARTITION (
    PARTITION p202603 VALUES LESS THAN ('2026-04-01')
);

执行前应检查现有 MAXVALUE 分区和当前内核支持情况。

30. 删除二级分区

sql 复制代码
ALTER TABLE appdb.order_history
DROP PARTITION p202601;

删除分区会同时删除其中数据,执行前必须确认数据保留策略和备份。

四、分布式 DML 与路由

31. 向分表插入数据

sql 复制代码
INSERT INTO appdb.orders
    (order_id, customer_id, order_time, amount)
VALUES
    (10001, 2001, NOW(), 199.00);

分表的 INSERT 必须包含分表键,否则 Proxy 无法判断数据应该写入哪个 set。

32. 批量插入同一分表

sql 复制代码
INSERT INTO appdb.orders
    (order_id, customer_id, order_time, amount)
VALUES
    (10002, 2001, NOW(), 99.00),
    (10003, 2002, NOW(), 299.00);

不同分表键的数据可能被路由到不同 set,应关注分布式事务和批量大小。

33. 使用分表键查询

sql 复制代码
SELECT *
FROM appdb.orders
WHERE customer_id = 2001
  AND order_id = 10001;

带等值分表键时,Proxy 可以直接路由到目标 set,通常是效率最高的访问方式。

34. 查询不带分表键的数据

sql 复制代码
SELECT *
FROM appdb.orders
WHERE order_time >= '2026-07-01'
ORDER BY order_time DESC
LIMIT 100;

不带分表键的查询可能下发到所有 set,再由 Proxy 聚合结果。数据量大时应重点评估扫描和网络开销。

35. 更新分表数据

sql 复制代码
UPDATE appdb.orders
SET amount = 209.00
WHERE customer_id = 2001
  AND order_id = 10001;

UPDATE 必须带 WHERE 条件,建议包含分表键。TDSQL 不允许直接更新 shardkey 的值。

36. 删除分表数据

sql 复制代码
DELETE FROM appdb.orders
WHERE customer_id = 2001
  AND order_id = 10001;

DELETE 必须带 WHERE 条件,建议包含分表键,避免广播到全部 set。

37. 使用 REPLACE 写入分表

sql 复制代码
REPLACE INTO appdb.orders
    (order_id, customer_id, order_time, amount)
VALUES
    (10001, 2001, NOW(), 209.00);

REPLACE 同样必须包含分表键,并可能先删除冲突行再插入,应评估触发的写放大。

38. 使用 INSERT ON DUPLICATE KEY UPDATE

sql 复制代码
INSERT INTO appdb.orders
    (order_id, customer_id, order_time, amount)
VALUES
    (10001, 2001, NOW(), 209.00)
ON DUPLICATE KEY UPDATE
    amount = VALUES(amount),
    order_time = VALUES(order_time);

唯一键必须符合分表规则,不能在更新部分修改分表键。

39. 分页查询时固定排序

sql 复制代码
SELECT
    order_id,
    customer_id,
    order_time,
    amount
FROM appdb.orders
WHERE customer_id = 2001
ORDER BY order_time DESC, order_id DESC
LIMIT 20 OFFSET 0;

分布式查询如果排序字段不唯一,不同 set 聚合后可能出现顺序不稳定,因此应增加唯一字段作为辅助排序。

40. 使用分表键关联两张分表

sql 复制代码
SELECT
    o.order_id,
    o.customer_id,
    d.product_id,
    d.quantity
FROM appdb.orders o
JOIN appdb.order_detail d
  ON d.customer_id = o.customer_id
 AND d.order_id = o.order_id
WHERE o.customer_id = 2001;

关联表使用相同分表键并在条件中带上该键,更有机会在单个 set 内完成计算。

五、事务与读写分离

41. 开启事务

sql 复制代码
START TRANSACTION;

42. 提交事务

sql 复制代码
COMMIT;

43. 回滚事务

sql 复制代码
ROLLBACK;

44. 创建保存点

sql 复制代码
SAVEPOINT sp_before_update;

回滚到保存点:

sql 复制代码
ROLLBACK TO SAVEPOINT sp_before_update;

应先确认当前内核版本和分布式事务场景是否支持预期行为。

45. 查看自动提交状态

sql 复制代码
SELECT @@session.autocommit;

46. 关闭当前会话自动提交

sql 复制代码
SET SESSION autocommit = 0;

使用完后恢复:

sql 复制代码
SET SESSION autocommit = 1;

长时间不提交的分布式事务会占用锁和资源。

47. 查看事务隔离级别

sql 复制代码
SELECT @@session.transaction_isolation;

较老兼容版本可以查看:

sql 复制代码
SELECT @@session.tx_isolation;

48. 设置当前会话事务隔离级别

sql 复制代码
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

49. 将查询路由到备节点

sql 复制代码
/*slave*/ SELECT *
FROM appdb.orders
WHERE customer_id = 2001
ORDER BY order_time DESC
LIMIT 20;

连接客户端时必须使用 -c 保留注释。备节点读取可能存在延迟,不适合强一致读场景。

50. 只允许查询在满足延迟条件的备节点执行

sql 复制代码
/*slave:slaveonly,20*/ SELECT COUNT(*)
FROM appdb.orders
WHERE customer_id = 2001;

slaveonly 表示没有符合条件的备节点时不回退到主节点,20 表示允许的延迟阈值。具体单位和支持形式应以当前版本官方文档为准。

六、连接、会话与运行状态

51. 查看当前连接 ID

sql 复制代码
SELECT CONNECTION_ID();

52. 查看会话列表

sql 复制代码
SHOW FULL PROCESSLIST;

重点关注连接来源、状态、运行时间和 SQL 文本。

53. 查询 PROCESSLIST

sql 复制代码
SELECT
    id,
    user,
    host,
    db,
    command,
    time,
    state,
    info
FROM information_schema.processlist
ORDER BY time DESC;

54. 查看长时间运行的 SQL

sql 复制代码
SELECT
    id,
    user,
    host,
    db,
    time,
    state,
    info
FROM information_schema.processlist
WHERE command <> 'Sleep'
  AND time >= 60
ORDER BY time DESC;

55. 按用户统计连接

sql 复制代码
SELECT
    user,
    COUNT(*) AS connections
FROM information_schema.processlist
GROUP BY user
ORDER BY connections DESC;

56. 按客户端统计连接

sql 复制代码
SELECT
    SUBSTRING_INDEX(host, ':', 1) AS client_host,
    COUNT(*) AS connections
FROM information_schema.processlist
GROUP BY SUBSTRING_INDEX(host, ':', 1)
ORDER BY connections DESC;

57. 终止正在执行的 SQL

sql 复制代码
KILL QUERY 12345;

该操作只终止当前语句,连接通常保留。

58. 终止数据库连接

sql 复制代码
KILL CONNECTION 12345;

终止连接会回滚未提交事务,执行前必须核对连接 ID、用户、来源地址和业务影响。

59. 查看 Proxy 和 set 状态

sql 复制代码
/*proxy*/ SHOW STATUS;

连接时应使用 mysql -c。该命令可以作为查看 set 名称和 Proxy 路由信息的入口,具体输出以实例版本为准。

60. 查看数据库状态变量

sql 复制代码
SHOW GLOBAL STATUS;

筛选连接相关指标:

sql 复制代码
SHOW GLOBAL STATUS LIKE 'Threads%';

在分布式实例中,指标可能来自逻辑实例、Proxy 或当前路由节点,应结合控制台实例级、分片级和节点级监控解释。

七、SQL 性能与执行计划

61. 查看 SQL 执行计划

sql 复制代码
EXPLAIN
SELECT *
FROM appdb.orders
WHERE customer_id = 2001
  AND order_time >= '2026-07-01';

62. 以 JSON 格式查看执行计划

sql 复制代码
EXPLAIN FORMAT=JSON
SELECT *
FROM appdb.orders
WHERE customer_id = 2001;

是否支持完整 JSON 字段与当前兼容内核版本有关。

63. 查看索引

sql 复制代码
SHOW INDEX FROM appdb.orders;

64. 查看索引基数

sql 复制代码
SELECT
    index_name,
    seq_in_index,
    column_name,
    cardinality,
    non_unique
FROM information_schema.statistics
WHERE table_schema = 'appdb'
  AND table_name = 'orders'
ORDER BY index_name, seq_in_index;

cardinality 是估算值,不能代替实际数据分布分析。

65. 更新表统计信息

sql 复制代码
ANALYZE TABLE appdb.orders;

分表执行时可能涉及多个 set。应在低峰期执行,并确认当前版本对分表的支持方式。

66. 查看优化器相关参数

sql 复制代码
SHOW VARIABLES LIKE 'optimizer%';

67. 查看会话执行超时设置

sql 复制代码
SHOW VARIABLES LIKE 'max_execution_time';

如果当前版本支持,可以在会话中设置:

sql 复制代码
SET SESSION max_execution_time = 30000;

单位通常为毫秒,应以实际变量说明为准。

68. 查看临时表相关状态

sql 复制代码
SHOW GLOBAL STATUS LIKE 'Created_tmp%';

TDSQL MySQL 版分布式实例不支持用户创建 TEMPORARY TABLE,这里的指标主要用于观察执行过程中产生的内部临时对象。

69. 查看排序相关状态

sql 复制代码
SHOW GLOBAL STATUS LIKE 'Sort%';

70. 查看全表扫描相关状态

sql 复制代码
SHOW GLOBAL STATUS LIKE 'Select_scan';

全局累计值需要结合采样时间差、QPS 和分片监控判断,单次查询结果不能直接说明当前存在性能故障。

八、事务、锁与 InnoDB 检查

71. 查看正在运行的事务

sql 复制代码
SELECT
    trx_id,
    trx_state,
    trx_started,
    trx_mysql_thread_id,
    trx_rows_locked,
    trx_rows_modified,
    trx_query
FROM information_schema.innodb_trx
ORDER BY trx_started;

视图可见性与账号权限和内核版本有关。

72. 查看长事务

sql 复制代码
SELECT
    trx_id,
    trx_mysql_thread_id,
    TIMESTAMPDIFF(SECOND, trx_started, NOW()) AS trx_seconds,
    trx_rows_locked,
    trx_rows_modified,
    trx_query
FROM information_schema.innodb_trx
ORDER BY trx_seconds DESC;

73. 查看 InnoDB 状态

sql 复制代码
SHOW ENGINE INNODB STATUS\G

重点关注最近死锁、事务、信号量、Buffer Pool 和 I/O。通过 Proxy 执行时,输出范围可能只对应某个 set,需要结合透传或控制台诊断。

74. 查看数据锁

sql 复制代码
SELECT *
FROM performance_schema.data_locks;

该表适用于支持相应 Performance Schema 结构的版本。

75. 查看锁等待关系

sql 复制代码
SELECT *
FROM performance_schema.data_lock_waits;

76. 关联查询阻塞与被阻塞事务

sql 复制代码
SELECT
    r.trx_mysql_thread_id AS waiting_thread,
    r.trx_started AS waiting_since,
    b.trx_mysql_thread_id AS blocking_thread,
    b.trx_started AS blocking_since,
    r.trx_query AS waiting_query,
    b.trx_query AS blocking_query
FROM performance_schema.data_lock_waits w
JOIN information_schema.innodb_trx r
  ON r.trx_id = w.requesting_engine_transaction_id
JOIN information_schema.innodb_trx b
  ON b.trx_id = w.blocking_engine_transaction_id;

不同内核版本的锁表字段可能不同,执行前应先 DESC performance_schema.data_lock_waits

77. 查看最近死锁信息

sql 复制代码
SHOW ENGINE INNODB STATUS\G

在输出中查找:

text 复制代码
LATEST DETECTED DEADLOCK

78. 查看死锁检测参数

sql 复制代码
SHOW VARIABLES LIKE 'innodb_deadlock_detect';

托管实例参数是否允许修改,应以控制台参数模板为准。

79. 查看锁等待超时

sql 复制代码
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';

80. 设置当前会话锁等待超时

sql 复制代码
SET SESSION innodb_lock_wait_timeout = 30;

这只影响当前会话,不能代替对阻塞源和长事务的排查。

九、空间、表和索引管理

81. 查看数据库逻辑大小

sql 复制代码
SELECT
    table_schema,
    ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS size_gb
FROM information_schema.tables
WHERE table_schema NOT IN (
    'information_schema',
    'mysql',
    'performance_schema',
    'sys'
)
GROUP BY table_schema
ORDER BY size_gb DESC;

分布式环境中的逻辑统计与物理分片占用可能不同,应同时查看控制台容量监控。

82. 查看大表排行

sql 复制代码
SELECT
    table_schema,
    table_name,
    table_rows,
    ROUND(data_length / 1024 / 1024, 2) AS data_mb,
    ROUND(index_length / 1024 / 1024, 2) AS index_mb,
    ROUND((data_length + index_length) / 1024 / 1024, 2) AS total_mb
FROM information_schema.tables
WHERE table_schema = 'appdb'
ORDER BY data_length + index_length DESC
LIMIT 20;

table_rows 对 InnoDB 通常是估算值。

83. 查看没有主键的表

sql 复制代码
SELECT
    t.table_schema,
    t.table_name
FROM information_schema.tables t
LEFT JOIN information_schema.table_constraints c
  ON c.table_schema = t.table_schema
 AND c.table_name = t.table_name
 AND c.constraint_type = 'PRIMARY KEY'
WHERE t.table_schema = 'appdb'
  AND t.table_type = 'BASE TABLE'
  AND c.constraint_name IS NULL
ORDER BY t.table_name;

84. 查看重复索引候选

sql 复制代码
SELECT
    table_schema,
    table_name,
    index_name,
    GROUP_CONCAT(column_name ORDER BY seq_in_index) AS index_columns
FROM information_schema.statistics
WHERE table_schema = 'appdb'
GROUP BY table_schema, table_name, index_name
ORDER BY table_name, index_columns;

结果需要人工比较,不能仅根据字段相同就直接删除索引。

85. 创建普通索引

sql 复制代码
CREATE INDEX idx_orders_time
ON appdb.orders(order_time);

对于分表,大范围不带分表键的查询即使有二级索引,也可能仍然需要访问全部 set。

86. 创建包含分表键的唯一索引

sql 复制代码
CREATE UNIQUE INDEX uk_orders_no_customer
ON appdb.orders(order_no, customer_id);

所有唯一索引都必须包含 shardkey

87. 删除索引

sql 复制代码
DROP INDEX idx_orders_time
ON appdb.orders;

删除前应确认索引不是唯一约束依赖对象,并观察完整业务周期。

88. 增加字段

sql 复制代码
ALTER TABLE appdb.orders
ADD COLUMN remark VARCHAR(500) NULL;

分布式大表执行 DDL 可能耗时较长,应评估锁、空间和各 set 的执行情况。

89. 修改字段

sql 复制代码
ALTER TABLE appdb.orders
MODIFY COLUMN remark VARCHAR(1000) NULL;

TDSQL 不支持对分表键字段进行改名,也不能通过更新数据改变分表键值。

90. 清空表

sql 复制代码
TRUNCATE TABLE appdb.stage_orders;

执行前应确认表类型、数据保留要求和当前版本支持情况。清空操作不可按普通 DELETE 方式回退。

十、Sequence、透传与导入导出

91. 创建 TDSQL Sequence

sql 复制代码
CREATE TDSQL_SEQUENCE appdb.order_seq
START WITH 1
TDSQL_MINVALUE 1
TDSQL_MAXVALUE 999999999999
TDSQL_INCREMENT BY 1
TDSQL_NOCYCLE
TDSQL_CACHE 20;

Sequence 需要相应 SQL 引擎版本和权限支持,主要用于并发不高且需要全局唯一编号的场景。

92. 查看 Sequence 定义

sql 复制代码
SHOW CREATE TDSQL_SEQUENCE appdb.order_seq;

93. 获取下一个 Sequence 值

sql 复制代码
SELECT TDSQL_NEXTVAL(appdb.order_seq);

也可以使用当前版本支持的标准兼容形式:

sql 复制代码
SELECT NEXT VALUE FOR appdb.order_seq;

94. 重设 Sequence 值

sql 复制代码
SELECT TDSQL_RESETVAL(appdb.order_seq, 100000);

重设前必须确认不会与现有业务数据冲突。

95. 删除 Sequence

sql 复制代码
DROP TDSQL_SEQUENCE appdb.order_seq;

96. 向指定 set 透传查询

sql 复制代码
/*sets:set_1544429718_1*/ SELECT COUNT(*)
FROM appdb.orders;

实际 set 名称可以通过 /*proxy*/ SHOW STATUS 查询。连接时必须使用 mysql -c

97. 向全部 set 透传查询

sql 复制代码
/*sets:allsets*/ SELECT COUNT(*)
FROM appdb.orders;

结果通常会分别返回各 set 的执行结果,不能直接把单行结果误认为整个逻辑表总数。

98. 按分表键透传 SQL

sql 复制代码
/*shardkey:2001*/ SELECT *
FROM appdb.orders
WHERE customer_id = 2001;

Proxy 会根据给定分表键把 SQL 路由到对应 set。

透传写操作风险较高。一次向多个 set 透传写入时,Proxy 不会自动提供普通分布式事务保障,可能造成数据不一致。

99. 使用 mysqldump 导出数据

bash 复制代码
mysqldump -h 192.168.1.10 -P 3306 -u backup_user -p \
  --single-transaction \
  --set-gtid-purged=OFF \
  appdb orders > /backup/orders.sql

具体参数应以腾讯云数据导出导入指南和当前内核兼容性为准。大规模备份恢复优先使用控制台提供的备份能力或官方迁移工具。

100. 使用 MySQL 客户端导入 SQL 文件

bash 复制代码
mysql -h 192.168.1.10 -P 3306 -u restore_user -p \
  appdb < /backup/orders.sql

从单机 MySQL 导入到 TDSQL 分布式实例前,必须先调整表结构:确定表类型,为分表增加合适的 shardkey,并确保主键和所有唯一索引包含分表键。建议先导入表结构,验证无误后再导入数据,最后校验表数量、行数、索引和业务查询结果。

结语

TDSQL MySQL 版的日常使用看起来与 MySQL 相似,但 DBA 排查问题时必须多考虑两层:Proxy 如何解析和路由 SQL,以及数据实际分布在哪些 set。

一条 SQL 在单机 MySQL 中能够使用索引,并不代表它在 TDSQL 中就一定高效。如果查询没有携带分表键,即使每个 set 内部都走索引,也可能需要广播到全部 set,再由 Proxy 完成聚合、排序和返回。

因此,TDSQL 运维和优化最重要的几个检查点是:

  • 当前实例到底是哪一种 TDSQL 产品和内核版本
  • 表是分表、单表还是广播表
  • 分表键是否选择合理
  • SQL 是否携带分表键
  • 主键和唯一索引是否包含分表键
  • 慢 SQL 是单个 set 内部慢,还是跨 set 广播和聚合慢
  • 监控指标属于实例级、分片级还是节点级

账号权限、参数模板、备份恢复、扩缩容、主备切换和监控告警等操作,应以腾讯云控制台和对应版本官方文档为准,不能简单照搬普通 MySQL 的 Shell 管理命令。

官方资料

相关推荐
wWYy.5 小时前
Mysql:覆盖索引
android·数据库·mysql
无忧.芙桃6 小时前
MySQL数据库原理与实践(五):内置函数
数据库·mysql
wWYy.8 小时前
Mysql:一行数据是怎么存储的?
android·数据库·mysql
☆凡尘清心☆21 小时前
CentOS Stream 9 专用 LNMP 全自动一键脚本
linux·运维·mysql·nginx·lnmp·centos stream 9
xqqxqxxq1 天前
DML 表数据:插入、删除、修改
笔记·mysql
xxwl5851 天前
数据库后端接口测试报告
spring boot·mysql·tomcat
xqqxqxxq1 天前
MySQL 数据类型笔记
数据库·笔记·mysql
Logintern091 天前
理解MySQL数据库的“事务与锁”
数据库·mysql
朱容zr3331331 天前
为什么推荐使用自增主键?使用UUID作为主键的优缺点是什么?
java·运维·数据库·后端·mysql·面试·性能优化