主从-从库的表比主库的大,表空间相差过大

背景

因为这边公司做数据分析的需求,mysql并不满足数据的速度条件,所有需要先mysql同步到clickhouse,因为同步到clickhouse的压力过大,为了不影响主库,所以采用搭建主从的方式,通过从库进行数据同步,为了保证多个从库同步所产生的IO不受影响,我采用每个从库用独立的硬盘,那么硬盘IO就能最大程度减少影响

mysql版本:8.0.18

问题

主从搭建完成后,过几天机器开始报警,存储不够。。。。。。,检测到有一些表的比主库大,有部分还大10倍,这,我们知道如果进行大量增删改过程中,会导致表产生碎片,主从服务器上同张表的碎片率不同也会导致表空间相差很大

那么为什么一致的表结构以及索引等都一样,为啥产生的碎片相差这么大。。。 这是一个值的深思的问题

问题思路

直觉是表碎片,那么要相信直觉,先查看表碎片

SELECT 
       t.TABLE_SCHEMA ,t.TABLE_NAME,t.ENGINE,
       t.TABLE_ROWS,
       CONCAT(ROUND(data_length/( 1024*1024*1024 ), 2), 'G') DATA, 
       CONCAT(ROUND(index_length/( 1024*1024*1024 ), 2), 'G') IDX, 
       CONCAT(ROUND(( data_length + index_length ) / ( 1024*1024*1024 ), 2), 'G') 'TOTAL SIZE', 
       ROUND(index_length/data_length, 2)  IX_FRAC, 
       CONCAT(ROUND(( data_free/1024/1024),2), 'MB') AS data_free 
FROM information_schema.TABLES  t
WHERE t.TABLE_SCHEMA='库名' and t.table_name='表名'
ORDER BY data_length + index_length DESC;

在主库跟从库都执行一次,你会发现,很离谱很过份,我真想说句话MMP的。。。。。。

解决方案

  1. 尽量保障主库跟从库的配置文件一致(最好把主库的mysql程序包复制过去)
  2. 只能自己去整理表碎片了
# 推荐
optimize table 表名 或 optimize table 库名.表名
alter table 表名 engine=innodb 或 alter table 库名.表名 engine=innodb
# 我这边是从库,所以直接停同步执行
# 如果是主库的话,请注意:执行前要先检查有无未结束事务或其他未释放锁

   转载规则


《主从-从库的表比主库的大,表空间相差过大》 江松泉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
TIDB集群搭建 TIDB集群搭建
外题为啥这么久了没怎么更新 开发了几个运维工具,后续会更新相关文章以及上线github 测试并上线TIDB,主要是将mysql转向TIDB,坑点也是不少啊 会有不少的TIDB相关文章上线 设计(必看)采用:3台做为主要的TIDB集群(高
2022-06-21
下一篇 
计算机组成原理-CPU集合篇(持续更新) 计算机组成原理-CPU集合篇(持续更新)
说明||| 代表个人想法 参考学习: ​ 1. 极客时间专栏-深入浅出计算机组成原理 性能指标之 计算机的计时单位 - CPU时钟虽然时间是一个很自然的用来衡量性能的指标,但是用时间来衡量时,有两个问题。 第一个就是时间不“准”。如果
  目录