MySQL数据库集群瘦身实践

数据库集群过大,迁移备份慢,易产生慢查,且问题容易扩散,保持小而美是一个健康集群的重要标准。
本文主要讲述了作者在MySQL数据库集群瘦身的一次重要实践。
集群释放800+G,业务稳定运行两年无忧。

背景调查

调研基本情况,防止对上下游产生影响

  • 集群架构:一主N从,下游大数据
  • 业务场景:业务影响如何,重要程度如何
  • 数据现状:数据量级、耗时评估
free_G data_G index_G sum_G
127.1 750.5 391.6 1269.1
# 集群概况
SELECT TABLE_SCHEMA
	, sum(ROUND(DATA_FREE / 1024 / 1024 / 1024, 1)) AS free_G
	, sum(ROUND(DATA_LENGTH / 1024 / 1024 / 1024, 1)) AS data_G
	, sum(ROUND(INDEX_LENGTH / 1024 / 1024 / 1024, 1)) AS index_G
	, sum(ROUND((DATA_FREE + DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024, 1)) AS sum_G
FROM `information_schema`.tables
WHERE 1 = 1
	AND TABLE_SCHEMA = 'my_db';

# 各表情况

SELECT TABLE_NAME, TABLE_COMMENT, TABLE_ROWS
	, ROUND(DATA_FREE / 1024 / 1024 / 1024, 1) AS free_G
	, ROUND(DATA_LENGTH / 1024 / 1024 / 1024, 1) AS data_G
	, ROUND(INDEX_LENGTH / 1024 / 1024 / 1024, 1) AS index_G
	, ROUND((DATA_FREE + DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024, 1) AS sum_G
FROM `information_schema`.tables
WHERE 1 = 1
	AND TABLE_SCHEMA = 'my_db'
ORDER BY sum_G DESC;

制定目标

制定优化目标,锁定关键大表

  • 分库分表
    数据不能删,变瘦了,集群没变,业务迭代复杂了;
    适合业务稳定期做。

  • 业务拆分
    按照业务模块,拆分不同的集群存储,同时可拆分对应的微服务。成本高,适合业务成长期做。

  • 数据清理
    删除过期无效的数据,成本较低,需要周期执行。

你可能感兴趣的:(数据库,mysql)