运维管理21 分钟阅读
PolarDB MySQL 版 运维命令 100 条
PolarDB MySQL 版兼容 MySQL 协议和常用 SQL,但底层采用计算与存储分离架构。一个集群通常包含主节点、只读节点、集群地址和主地址,连接经过代理后还可能启用读写分离、会话一致性和事务拆分。
2026年8月3日阅读—点赞—收藏—
dba100polardbmysql墨力计划
在知识库中专注阅读,并随时返回相关工具与课程
PolarDB MySQL 版兼容 MySQL 协议和常用 SQL,但底层采用计算与存储分离架构。一个集群通常包含主节点、只读节点、集群地址和主地址,连接经过代理后还可能启用读写分离、会话一致性和事务拆分。
PolarDB MySQL 版兼容 MySQL 协议和常用 SQL,但底层采用计算与存储分离架构。一个集群通常包含主节点、只读节点、集群地址和主地址,连接经过代理后还可能启用读写分离、会话一致性和事务拆分。
因此,排查 PolarDB 问题时既要掌握 MySQL 的会话、事务锁、执行计划和 Performance Schema,也要知道哪些能力属于云平台管理范围。节点扩缩容、主备切换、集群重启、参数模板、自动备份、时间点恢复、读写分离和 SQL 洞察等操作,通常需要在阿里云控制台、DAS 或 API 中完成,不能用普通 MySQL 命令替代。
下面整理了 PolarDB MySQL 版 DBA 常用的 100 条命令,覆盖连接、实例信息、对象、参数、会话、事务锁、SQL 性能、空间、索引、用户权限、导入导出和云平台检查等场景。
本文主要面向兼容 MySQL 8.0 的 PolarDB MySQL 集群。不同产品版本、企业版与标准版、集群规格和兼容内核之间可能存在差异。文中的地址、用户、数据库和对象名均为示例。
1mysql -h pc-example.rwlb.rds.aliyuncs.com \2 -P 3306 -u appuser -p应根据业务需求选择集群地址、主地址或自定义地址。
1SELECT 1;1SELECT VERSION();1SELECT2 @@hostname AS hostname,3 @@port AS port,4 @@server_uuid AS server_uuid,5 @@version AS version,6 CONNECTION_ID() AS connection_id;经过集群地址连接时,多次建立新连接可能被路由到不同节点。
1SELECT2 DATABASE(),3 USER(),4 CURRENT_USER();1SELECT2 @@global.read_only AS read_only,3 @@global.super_read_only AS super_read_only;只读节点通常不能执行写操作。
1SELECT2 NOW() AS local_time,3 UTC_TIMESTAMP() AS utc_time,4 @@session.time_zone,5 @@system_time_zone;1SELECT2 VARIABLE_VALUE AS uptime_seconds,3 NOW() - INTERVAL VARIABLE_VALUE SECOND AS startup_time4FROM performance_schema.global_status5WHERE VARIABLE_NAME = 'Uptime';1SELECT2 @@character_set_server,3 @@character_set_database,4 @@character_set_connection,5 @@character_set_client,6 @@character_set_results;1SELECT2 @@global.sql_mode,3 @@session.sql_mode;1SHOW DATABASES;1CREATE DATABASE appdb2DEFAULT CHARACTER SET utf8mb43DEFAULT COLLATE utf8mb4_0900_ai_ci;排序规则应根据当前兼容版本确认。
1SHOW CREATE DATABASE appdb;1SELECT DATABASE();1SHOW FULL TABLES FROM appdb;1DESC appdb.orders;1SHOW CREATE TABLE appdb.orders\G1SHOW TABLE STATUS FROM appdb LIKE 'orders'\G1SELECT2 column_name,3 column_type,4 is_nullable,5 column_key,6 column_default,7 extra8FROM information_schema.columns9WHERE table_schema = 'appdb'10 AND table_name = 'orders'11ORDER BY ordinal_position;1SELECT2 constraint_name,3 constraint_type4FROM information_schema.table_constraints5WHERE table_schema = 'appdb'6 AND table_name = 'orders'7ORDER BY constraint_type, constraint_name;1SHOW VARIABLES LIKE 'max_connections';1SHOW VARIABLES;1SELECT2 @@global.wait_timeout AS global_wait_timeout,3 @@session.wait_timeout AS session_wait_timeout,4 @@global.max_connections AS max_connections;1SELECT2 @@innodb_buffer_pool_size,3 @@innodb_flush_log_at_trx_commit,4 @@innodb_lock_wait_timeout,5 @@transaction_isolation;1SELECT2 variable_name,3 variable_value,4 variable_source5FROM performance_schema.variables_info6WHERE variable_name IN (7 'max_connections',8 'wait_timeout',9 'long_query_time'10);1SET SESSION wait_timeout = 1800;1SET SESSION max_execution_time = 30000;单位为毫秒。
1SHOW GLOBAL STATUS;1SHOW GLOBAL STATUS LIKE 'Threads%';1SHOW GLOBAL STATUS LIKE 'Created_tmp%';磁盘临时表持续增加,通常需要检查排序、分组、连接和内存参数。
1SELECT COUNT(*) AS connections2FROM information_schema.processlist;1SHOW FULL PROCESSLIST;1SELECT2 id,3 user,4 host,5 db,6 command,7 time,8 state,9 info10FROM information_schema.processlist11ORDER BY time DESC;1SELECT2 user,3 COUNT(*) AS connections4FROM information_schema.processlist5GROUP BY user6ORDER BY connections DESC;1SELECT2 SUBSTRING_INDEX(host, ':', 1) AS client_host,3 COUNT(*) AS connections4FROM information_schema.processlist5GROUP BY SUBSTRING_INDEX(host, ':', 1)6ORDER BY connections DESC;1SELECT2 id,3 user,4 host,5 db,6 time,7 state,8 info9FROM information_schema.processlist10WHERE command <> 'Sleep'11 AND time >= 6012ORDER BY time DESC;1SELECT2 id,3 user,4 host,5 db,6 time7FROM information_schema.processlist8WHERE command = 'Sleep'9ORDER BY time DESC;1KILL QUERY 12345;1KILL CONNECTION 12345;终止连接会回滚未提交事务,执行前应核对连接 ID、用户和来源地址。
1SELECT2 current_connections,3 max_connections,4 ROUND(current_connections * 100 / max_connections, 2) AS usage_pct5FROM (6 SELECT7 (SELECT COUNT(*) FROM information_schema.processlist) AS current_connections,8 @@global.max_connections AS max_connections9) t;1SELECT2 trx_id,3 trx_state,4 trx_started,5 trx_mysql_thread_id,6 trx_rows_locked,7 trx_rows_modified,8 trx_query9FROM information_schema.innodb_trx10ORDER BY trx_started;1SELECT2 trx_id,3 trx_mysql_thread_id,4 TIMESTAMPDIFF(SECOND, trx_started, NOW()) AS trx_seconds,5 trx_rows_locked,6 trx_rows_modified,7 trx_query8FROM information_schema.innodb_trx9ORDER BY trx_seconds DESC;1SELECT2 engine_transaction_id,3 thread_id,4 object_schema,5 object_name,6 index_name,7 lock_type,8 lock_mode,9 lock_status,10 lock_data11FROM performance_schema.data_locks;1SELECT *2FROM performance_schema.data_lock_waits;1SELECT2 r.trx_mysql_thread_id AS waiting_thread,3 TIMESTAMPDIFF(SECOND, r.trx_started, NOW()) AS waiting_seconds,4 b.trx_mysql_thread_id AS blocking_thread,5 r.trx_query AS waiting_query,6 b.trx_query AS blocking_query7FROM performance_schema.data_lock_waits w8JOIN information_schema.innodb_trx r9 ON r.trx_id = w.requesting_engine_transaction_id10JOIN information_schema.innodb_trx b11 ON b.trx_id = w.blocking_engine_transaction_id;1SELECT2 object_type,3 object_schema,4 object_name,5 lock_type,6 lock_duration,7 lock_status,8 owner_thread_id9FROM performance_schema.metadata_locks10WHERE lock_status = 'PENDING';1SHOW ENGINE INNODB STATUS\G重点关注最近死锁、事务、Buffer Pool 和 I/O。
1SELECT @@session.innodb_lock_wait_timeout;1SET SESSION innodb_lock_wait_timeout = 30;1SELECT2 @@global.transaction_isolation,3 @@session.transaction_isolation;1EXPLAIN2SELECT *3FROM appdb.orders4WHERE customer_id = 1001;1EXPLAIN ANALYZE2SELECT *3FROM appdb.orders4WHERE customer_id = 1001;EXPLAIN ANALYZE 会真正执行 SQL,不应随意用于修改类语句和高开销查询。
1EXPLAIN FORMAT=JSON2SELECT *3FROM appdb.orders4WHERE customer_id = 1001;1SELECT2 schema_name,3 digest,4 count_star,5 round(sum_timer_wait / 1000000000000, 2) AS total_seconds,6 round(avg_timer_wait / 1000000000000, 6) AS avg_seconds,7 sum_rows_examined,8 sum_rows_sent,9 digest_text10FROM performance_schema.events_statements_summary_by_digest11ORDER BY sum_timer_wait DESC12LIMIT 20;1SELECT2 schema_name,3 count_star,4 round(avg_timer_wait / 1000000000000, 6) AS avg_seconds,5 digest_text6FROM performance_schema.events_statements_summary_by_digest7WHERE count_star >= 108ORDER BY avg_timer_wait DESC9LIMIT 20;1SELECT2 schema_name,3 count_star,4 sum_rows_examined,5 sum_rows_sent,6 digest_text7FROM performance_schema.events_statements_summary_by_digest8ORDER BY sum_rows_examined DESC9LIMIT 20;1SELECT *2FROM sys.statement_analysis3ORDER BY total_latency DESC4LIMIT 20;1SELECT *2FROM sys.statements_with_full_table_scans3ORDER BY total_latency DESC4LIMIT 20;1TRUNCATE TABLE2performance_schema.events_statements_summary_by_digest;清空会影响趋势分析,应在明确采样窗口时执行。
1SELECT @@performance_schema;1SELECT2 table_schema,3 ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS size_gb4FROM information_schema.tables5WHERE table_schema NOT IN (6 'information_schema',7 'mysql',8 'performance_schema',9 'sys'10)11GROUP BY table_schema12ORDER BY size_gb DESC;1SELECT2 table_schema,3 table_name,4 table_rows,5 ROUND(data_length / 1024 / 1024, 2) AS data_mb,6 ROUND(index_length / 1024 / 1024, 2) AS index_mb,7 ROUND((data_length + index_length) / 1024 / 1024, 2) AS total_mb8FROM information_schema.tables9WHERE table_schema = 'appdb'10ORDER BY data_length + index_length DESC11LIMIT 20;1SELECT2 table_schema,3 table_name,4 table_rows,5 ROUND(data_free / 1024 / 1024, 2) AS data_free_mb,6 ROUND((data_length + index_length) / 1024 / 1024, 2) AS total_mb7FROM information_schema.tables8WHERE engine = 'InnoDB'9 AND data_free > 010ORDER BY data_free DESC11LIMIT 20;data_free 不能直接等同于可回收空间,应结合表结构和存储实现判断。
1SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';1SELECT2 ROUND(3 (1 - reads / NULLIF(read_requests, 0)) * 100,4 45 ) AS buffer_pool_hit_pct6FROM (7 SELECT8 MAX(CASE WHEN variable_name = 'Innodb_buffer_pool_reads'9 THEN variable_value END) AS reads,10 MAX(CASE WHEN variable_name = 'Innodb_buffer_pool_read_requests'11 THEN variable_value END) AS read_requests12 FROM performance_schema.global_status13) s;1SELECT2 ROUND(dirty * 100 / NULLIF(total_pages, 0), 2) AS dirty_page_pct3FROM (4 SELECT5 MAX(CASE WHEN variable_name = 'Innodb_buffer_pool_pages_dirty'6 THEN variable_value END) AS dirty,7 MAX(CASE WHEN variable_name = 'Innodb_buffer_pool_pages_total'8 THEN variable_value END) AS total_pages9 FROM performance_schema.global_status10) s;1SHOW GLOBAL STATUS LIKE 'Innodb_log_waits';1SHOW GLOBAL STATUS LIKE 'Innodb_rows_%';1SHOW GLOBAL STATUS LIKE 'Open%tables';1ANALYZE TABLE appdb.orders;1SHOW INDEX FROM appdb.orders;1SELECT2 index_name,3 seq_in_index,4 column_name,5 cardinality,6 non_unique7FROM information_schema.statistics8WHERE table_schema = 'appdb'9 AND table_name = 'orders'10ORDER BY index_name, seq_in_index;1SELECT2 t.table_schema,3 t.table_name4FROM information_schema.tables t5LEFT JOIN information_schema.table_constraints c6 ON c.table_schema = t.table_schema7 AND c.table_name = t.table_name8 AND c.constraint_type = 'PRIMARY KEY'9WHERE t.table_schema = 'appdb'10 AND t.table_type = 'BASE TABLE'11 AND c.constraint_name IS NULL;1SELECT *2FROM sys.schema_unused_indexes3WHERE object_schema = 'appdb';实例重启和统计清空后数据会重新累计,不能仅凭一次结果删除索引。
1SELECT *2FROM sys.schema_redundant_indexes3WHERE table_schema = 'appdb';1CREATE INDEX idx_orders_customer2ON appdb.orders(customer_id);1CREATE INDEX idx_orders_customer_time2ON appdb.orders(customer_id, order_time);字段顺序应结合过滤、排序和选择性设计。
1DROP INDEX idx_orders_customer2ON appdb.orders;1ALTER TABLE appdb.orders2ADD COLUMN remark VARCHAR(500) NULL;1SELECT2 processlist_id,3 processlist_user,4 processlist_host,5 processlist_time,6 processlist_state,7 processlist_info8FROM performance_schema.threads9WHERE processlist_command <> 'Sleep'10 AND processlist_info REGEXP11 '^(ALTER|CREATE|DROP|TRUNCATE|RENAME)';1SELECT2 user,3 host,4 account_locked,5 password_expired6FROM mysql.user7ORDER BY user, host;1CREATE USER 'appuser'@'10.%'2IDENTIFIED BY 'Replace_With_Strong_Password';1ALTER USER 'appuser'@'10.%'2IDENTIFIED BY 'Replace_With_New_Strong_Password';1ALTER USER 'appuser'@'10.%' ACCOUNT LOCK;解锁:
1ALTER USER 'appuser'@'10.%' ACCOUNT UNLOCK;1SHOW GRANTS FOR 'appuser'@'10.%';1GRANT SELECT ON appdb.*2TO 'report_user'@'10.%';1GRANT SELECT, INSERT, UPDATE, DELETE2ON appdb.*3TO 'appuser'@'10.%';1REVOKE INSERT, UPDATE, DELETE2ON appdb.*3FROM 'appuser'@'10.%';1SELECT *2FROM mysql.role_edges;1DROP USER 'appuser'@'10.%';删除前应确认应用已经停止使用该账号。
1mysqldump -h pc-example.rwlb.rds.aliyuncs.com \2 -P 3306 -u backup_user -p \3 --single-transaction \4 --routines --events --triggers \5 appdb > appdb.sql大规模迁移建议使用 DTS、DMS 或官方迁移方案。
1mysqldump -h pc-example.rwlb.rds.aliyuncs.com \2 -P 3306 -u backup_user -p \3 --single-transaction \4 appdb orders > orders.sql1mysql -h pc-example.rwlb.rds.aliyuncs.com \2 -P 3306 -u restore_user -p \3 appdb < appdb.sql1mysql -h pc-example.rwlb.rds.aliyuncs.com \2 -P 3306 -u report_user -p \3 --batch --raw \4 -e "SELECT * FROM appdb.orders LIMIT 1000" \5 > orders.tsv1SELECT2 event_schema,3 event_name,4 status,5 event_type,6 execute_at,7 interval_value,8 interval_field9FROM information_schema.events10ORDER BY event_schema, event_name;1SELECT2 table_schema,3 table_name,4 partition_name,5 partition_method,6 partition_expression,7 table_rows8FROM information_schema.partitions9WHERE partition_name IS NOT NULL10ORDER BY table_schema, table_name, partition_ordinal_position;1SELECT2 @@hostname,3 @@server_uuid,4 @@global.read_only,5 CONNECTION_ID();分别通过主地址、集群地址和自定义地址多次建立新连接,可以辅助确认路由结果。正式判断仍应结合控制台地址配置。
1SELECT2 error_number,3 error_name,4 sql_state,5 sum_error_raised,6 first_seen,7 last_seen8FROM performance_schema.events_errors_summary_global_by_error9WHERE sum_error_raised > 010ORDER BY sum_error_raised DESC11LIMIT 20;1SELECT 'connections' AS item,2 COUNT(*) AS value3FROM information_schema.processlist4UNION ALL5SELECT 'running_transactions',6 COUNT(*)7FROM information_schema.innodb_trx8UNION ALL9SELECT 'lock_waits',10 COUNT(*)11FROM performance_schema.data_lock_waits12UNION ALL13SELECT 'max_connections',14 @@global.max_connections;数据库内没有一条 SQL 可以完整替代云平台巡检。完成 SQL 检查后,还应在 PolarDB 控制台或 API 中确认:
1集群与节点状态2主节点和只读节点拓扑3集群地址、主地址和自定义地址配置4读写分离与一致性级别5CPU、内存、连接、IOPS、吞吐和存储使用率6慢 SQL、SQL 洞察和一键诊断7参数模板及待重启参数8自动备份、日志备份和可恢复时间范围9告警规则、维护窗口和近期变更记录PolarDB MySQL 版的大部分 SQL 排查方法与 MySQL 8.0 相似,但架构判断不能停留在单机数据库思路。通过集群地址连接时,读请求可能被路由到只读节点;同一条查询在不同连接中可能落到不同计算节点;备份、扩缩容和切换也由云平台统一管理。
因此,实际排查时应把数据库内信息和控制台信息放在一起看。数据库内重点检查会话、事务锁、执行计划、Digest SQL 和空间;控制台重点检查节点拓扑、地址路由、读写分离、监控趋势、SQL 洞察、备份和近期变更。