Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >这个MySQL说“云上自建的MySQL”都是”小垃圾“

这个MySQL说“云上自建的MySQL”都是”小垃圾“

作者头像
AustinDatabases
发布于 2025-04-26 13:07:24
发布于 2025-04-26 13:07:24
2700
代码可运行
举报
文章被收录于专栏:AustinDatabasesAustinDatabases
运行总次数:0
代码可运行

最近越来越多的人知道上云还用ECS自建的MySQL是垃圾,是呀用经济学原理一分析,就知道有多垃圾了。有人问了,你说的那个是价值观,太宏观,你说点干货,怎么自建的MySQL就垃圾了,来来来,今天我给你看一个云原生数据库的功能,你敢说你的自建MySQL不是小垃圾。

故事开头是我们的一个同事在产生一个新的PolarDB for MySQL的时候,发现一些和之前配置不同的地方,并进行询问,我后面也跟了进去。

后面我就发现了一些问题,主要还是云原生数据库的不学习就落后的问题,顺着客服给我的信息,我突然发现一些POALRDB FOR MYSQL之前没有的功能。

在此之前我们使用PolarDB for MySQL的通用功能是通过X-Engine 引擎来进行的数据的归档和压缩的。

x-Engine
x-Engine

x-Engine

最近光忙活MongoDB的升级和PolarDB for PostgreSQL的事情了,一段时间没有去关注PolarDB for MySQL,这个数据库新版本提供了类似 PolarDB for PostgreSQL的冷数据归档的方案。

PolarDB for Mysql 归档新方案
PolarDB for Mysql 归档新方案

PolarDB for Mysql 归档新方案

废话不说,咱们先试试这个PolarDB for MySQL的直接归档表的新功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MySQL [test]> SELECT 
    ->     TABLE_NAME AS `Table`,
    ->     ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `Size (MB)`,
    ->     TABLE_ROWS AS `Rows`
    -> FROM 
    ->     information_schema.TABLES
    -> WHERE 
    ->     TABLE_SCHEMA = 'test'
    -> ORDER BY 
    ->     (DATA_LENGTH + INDEX_LENGTH) DESC;
+------------+-----------+--------+
| Table      | Size (MB) | Rows   |
+------------+-----------+--------+
| text       |     40.58 | 997819 |
| test_table |      0.02 |      0 |
+------------+-----------+--------+
2 rows inset (0.004 sec)

MySQL [test]> 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MySQL [test]> SELECT 
    ->     TABLE_NAME AS `Table`,
    ->     ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `Size (MB)`,
    ->     TABLE_ROWS AS `Rows`
    -> FROM 
    ->     information_schema.TABLES
    -> WHERE 
    ->     TABLE_SCHEMA = 'test'
    -> ORDER BY 
    ->     (DATA_LENGTH + INDEX_LENGTH) DESC;
+------------+-----------+--------+
| Table      | Size (MB) | Rows   |
+------------+-----------+--------+
| text       |     40.58 | 997819 |
| test_table |      0.02 |      0 |
+------------+-----------+--------+
2 rows inset (0.004 sec)

MySQL [test]> alter table text engine = CSV storage OSS;
Query OK, 1000000 rows affected (3.124 sec)
Records: 1000000  Duplicates: 0  Warnings: 0

MySQL [test]> alter table text engine = innodb;
Query OK, 1000000 rows affected (6.440 sec)
Records: 1000000  Duplicates: 0  Warnings: 0

MySQL [test]> alter table text engine = CSV storage OSS;
Query OK, 1000000 rows affected (2.534 sec)
Records: 1000000  Duplicates: 0  Warnings: 0

MySQL [test]> select * from text limit 1;
+----+---------------+
| id | varchar_col   |
+----+---------------+
|  1 | data_00000000 |
+----+---------------+
1 row inset (0.133 sec)

MySQL [test]> select * from text limit 1000;
+------+---------------+
| id   | varchar_col   |
+------+---------------+
|    1 | data_00000000 |
|    2 | data_00000001 |
|    3 | data_00000002 |
|    4 | data_00000003 |
|    5 | data_00000004 |
|    6 | data_00000005 |
|    7 | data_00000006 |
|    8 | data_00000007 |
|    9 | data_00000008 |
|   10 | data_00000009 |
|   11 | data_00000010 |
|   12 | data_00000011 |
|   13 | data_00000012 |
|   14 | data_00000013 |
|   15 | data_00000014 |
|  979 | data_00000978 |
|  980 | data_00000979 |
|  981 | data_00000980 |
|  982 | data_00000981 |
|  983 | data_00000982 |
|  984 | data_00000983 |
|  985 | data_00000984 |
|  986 | data_00000985 |
|  987 | data_00000986 |
|  988 | data_00000987 |
|  989 | data_00000988 |
|  990 | data_00000989 |
|  991 | data_00000990 |
|  992 | data_00000991 |
|  993 | data_00000992 |
|  994 | data_00000993 |
|  995 | data_00000994 |
|  996 | data_00000995 |
|  997 | data_00000996 |
|  998 | data_00000997 |
|  999 | data_00000998 |
| 1000 | data_00000999 |
+------+---------------+
1000 rows inset (0.107 sec)

归档后
归档后

归档后

image
image
把数据重新提出归档系统
把数据重新提出归档系统

把数据重新提出归档系统

归档后对应界面中的表已经消失
归档后对应界面中的表已经消失

归档后对应界面中的表已经消失

看来这功能是有点意思!! 这以后归档表那不是太方便了吗,还需要 mysqldump 吗? 还需要导入导出数据节省成本,在节省成本能有 OSS成本低,几分钱的成本,如果你嫌弃这个还高,那你把这些数据存到纸上都的几十块钱。

在查看文档的时候,我还发现,他不光可以把表存储成 csv方式进行归档,还可以存储成 ibd 文件

这里需要说一下,这两种方式的不同

1 将MySQL的表转为CSV的方式的意义在于只要归档了这个表就不可以变化了,数据就是死的,只能读

2 将MySQL的表转为idb文件的归档方式的好处是归档的表还可以进行DML的操作,但不能进行DDL的操作。

这个功能一出,我想都能想的到一些企业的需求马上就能被满足,尤其Saas 企业。一些企业的数据归档后,客户不知道那天冒出来,还要数据,你还没发拒绝,这功能可以支持数据归档后,在归档中将文件进行变更,这太牛了。

马上试一下,What F 我的天,这功能可以呀!!!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                                                                                                   
MySQL [test]> SELECT                                                                               
    ->     TABLE_NAME AS `Table`,
    ->     ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `Size (MB)`,
    ->     TABLE_ROWS AS `Rows`
    -> FROM 
    ->     information_schema.TABLES
    -> WHERE 
    ->     TABLE_SCHEMA = 'test'
    -> ORDER BY 
    ->     (DATA_LENGTH + INDEX_LENGTH) DESC;
+------------+-----------+--------+
| Table      | Size (MB) | Rows   |
+------------+-----------+--------+
| text       |     40.58 | 997819 |
| test_table |      0.02 |      0 |
+------------+-----------+--------+
2 rows inset (0.004 sec)

MySQL [test]> alter table text storage_type oss;
Query OK, 0 rows affected (1.007 sec)
Records: 0  Duplicates: 0  Warnings: 0

MySQL [test]> select * from text limit 1;
+----+---------------+
| id | varchar_col   |
+----+---------------+
|  1 | data_00000000 |
+----+---------------+
1 row inset (0.003 sec)

MySQL [test]> update text set varchar_col = '11111'where id = 1;
Query OK, 1 row affected (0.006 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MySQL [test]> select * from text limit 1;                        
+----+-------------+
| id | varchar_col |
+----+-------------+
|  1 | 11111       |
+----+-------------+
1 row inset (0.094 sec)

MySQL [test]> 

写到这里,我对比了一下两种的归档方式的文件大小

1 ibd 大小是 60MB 2 csv 大小事 27MB左右

ibd文件大小
ibd文件大小

ibd文件大小

那么这里我总结,如果是真正归档,那么我们选择CSV的格式,这里数据不能再变动,但如果是我刚才说的那个需求,不定什么时间客户还要数据,还要改这个数据,那么把数据文件变成 ibd就是最优选。

最后我们说一下数据的清理,在MySQL中如果删除一张表我们通过drop table命令来进行,而在PolarDB中,将表归档到OSS 后删除表需要两个步骤。

删除归档表的注意事项
删除归档表的注意事项

删除归档表的注意事项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

MySQL [test]> select * from text limit 1;
+----+---------------+
| id | varchar_col   |
+----+---------------+
|  1 | data_00000000 |
+----+---------------+
1 row inset (0.003 sec)

MySQL [test]> update text set varchar_col = '11111'where id = 1;
Query OK, 1 row affected (0.006 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MySQL [test]> select * from text limit 1;                        
+----+-------------+
| id | varchar_col |
+----+-------------+
|  1 | 11111       |
+----+-------------+
1 row inset (0.094 sec)

MySQL [test]> call dbms_oss.delete_table_file('test','text');
ERROR 8079 (HY000): [INNODB OSS] Operation failed. OSS files are still in use.
MySQL [test]> drop table text;
Query OK, 0 rows affected (0.010 sec)

MySQL [test]> call dbms_oss.delete_table_file('test','text');
Query OK, 0 rows affected (0.783 sec)

MySQL [test]> 

通过上面的演示,POALRDB FOR MYSQL 的数据归档表的方式我已经写清楚了,通过这样的方式,归档将只在库内进行,而不用再库外进行,或者在导出数据,对于一些Saas类的企业,这样的功能简直是到了心坎里面。

同时对于PolarDB for MySQL的数据归档的性能有相关的说明,我们在使用的过程中也发现时间比我们想的要快,甚至我们都想把一些冷库都转成归档IBD的形式,这是不是太鸡贼了,为了省钱我们是什么都敢干!!

归档参数
归档参数
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
小弟问我:为什么MySQL不建议使用delete删除数据?
我负责的有几个系统随着业务量的增长,存储在MySQL中的数据日益剧增,我当时就想现在的业务方不讲武德,搞偷袭,趁我没反应过来把很多表,很快,很快啊都打到了亿级别,我大意了,没有闪,这就导致跟其Join的表的SQL变得很慢,对的应用接口的response time也变长了,影响了用户体验。
敖丙
2020/11/24
4.5K0
小弟问我:为什么MySQL不建议使用delete删除数据?
MySQL案例:各类临时文件的存放位置
在MySQL中,存在各种各样的临时文件,其存放位置是五花八门,且不同版本也不尽相同,主要包括以下:
brightdeng@DBA
2020/09/02
6.6K1
MySQL案例:各类临时文件的存放位置
小白学习MySQL - MySQL会不会受到“高水位”的影响?
前两天碰到了一个问题,MySQL的一张表,1220万数据量,需要删除1200万数据,仅存储20万数据,讨论了三种方案,
bisal
2021/09/06
2.1K0
小白学习MySQL - MySQL会不会受到“高水位”的影响?
MySQL 线上2个小案例
今天在线上遇到2个很有意思的MySQL案例,都是比较经典的问题,拿出来跟大家分享一下。为了对库表名称进行脱敏,我把问题抽象出来两个小的例子,且看分享。
AsiaYe
2022/12/07
4430
技术分享 | MySQL 表空间碎片整理方法
MySQL 的表在进行了多次 delete 、update 和 insert 后,表空间会出现碎片。定期进行表空间整理,消除碎片可以提高访问表空间的性能。
爱可生开源社区
2021/07/16
1.5K0
数据生命周期管理的初步设计
之前做了一个初版的生命周期设计,导致对于实现的难度低估,在实际设计的时候,碰到了一些意料之外的边界问题。
jeanron100
2019/06/04
8340
数据生命周期管理的初步设计
MySQL 表和列的注释深入理解
像代码一样,可以为表以及表中的列添加注释,方便其他人知晓其功能。对于一些字段,在经过一定时间后,创建者未必也能想起其具体的含意,所以注释显得尤为重要。
星哥玩云
2022/08/17
2.1K0
MySQL命令统计的库大小和物理文件大小差异
存储引擎是myisam, 在data目录下会看到3类文件:.frm、.myi、.myd (1)*.frm--表定义,是描述表结构的文件。 (2)*.MYD--"D"数据信息文件,是表的数据文件。 (3)*.MYI--"I"索引信息文件,是表数据文件中任何索引的数据树
Power
2025/02/28
1840
MySQL的insert会阻塞update?
某银行客户在从Oracle迁移到MySQL的开发中,MySQL在READ-COMMITTED隔离级别下,出现了insert阻塞update的情况,但同样的情况下,Oracle的insert则不会阻塞update。本文通过复现该问题,分析MySQL的锁信息,确认是MySQL与Oracle在并发事务处理上的差异,在进行数据库迁移改造的程序开发应予以关注。
bisal
2023/04/06
2.1K0
技术译文 | 为什么 MySQL 添加一个简单索引后表大小增长远超预期?
本文和封面来源:https://www.percona.com/,爱可生开源社区翻译。
爱可生开源社区
2024/02/21
2500
技术译文 | 为什么 MySQL 添加一个简单索引后表大小增长远超预期?
执行update语句,用没用到索引,区别大吗?
我们都知道,当执行 select 查询语句时,用没用到索引区别是很大的,若没用到索引,一条 select 语句可能执行好几秒或更久,若使用到索引则可能瞬间完成。那么当执行 update 语句时,用没用到索引有什么区别呢,执行时间相差大吗?本篇文章我们一起来探究下。
MySQL技术
2021/09/17
1.3K0
MySQL create table as与create table like对比
      在MySQL数据库中,关于表的克隆有多种方式,比如我们可以使用create table ..as .. ,也可以使用create table .. like ..方式。然而这2种不同的方式还是有些差异的,他的差异到底在哪里呢,本文通过演示对此展开描述。
Leshami
2018/08/13
4.5K0
Innodb页合并和页分裂
如果您遇到全球少数的MySQL顾问之一,请他审核您的SQL语句和表结构设计,我相信他会告诉您一些有关好的主键设计的重要性。特别是对InnoDB,我相信他已经想您解释了索引合并和页分裂。这两个概念与性能密切相关,在设计任意索引(不仅仅是主键)时都应该考虑这方面因素。
老叶茶馆
2020/07/06
3.1K0
Innodb页合并和页分裂
Mysql空间回收总结
MySQL 5.6中开始支持把undo log分离到独立的表空间,并放到单独的文件目录下;这给我们部署不同IO类型的文件位置带来便利,对于并发写入型负载,我们可以把undo文件部署到单独的高速存储设备上。增加了如下几个参数来控制该行为。
mingjie
2022/05/12
9850
MySQL count知多少
统计一个表的数据量是经常遇到的需求,但是不同的表设计及不同的写法,统计性能差别会有较大的差异,下面就简单通过实验进行测试(大家测试的时候注意缓存的情况,否则影响测试结果)。
俊才
2020/04/13
3.5K0
MySQL的实战系列:大字段如何优化
除特别注明外,本站所有文章均为慕白博客原创,转载请注明出处来自https://geekmubai.com/programming/747.html
慕白
2018/09/21
5.3K0
MySQL的实战系列:大字段如何优化
理解MySQL——架构与概念
写在前面:最早接触的MySQL是在三年前,那时候MySQL还是4.x版本,很多功能都不支持,比如,存储过程,视图,触发器,更别说分布式事务等复杂特性了。但从5.0(2005年10月)开始,MySQL渐渐步入企业级数据库的行列了;复制、集群、分区、分布式事务,这些企业级的特性,使得现在的MySQL,完全可以应用于企业级应用环境(很多互联网公司都用其作为数据库服务器,尽管节约成本是一个因素,但是没有强大功能作后盾,则是不可想象的)。虽然,MySQL还有很多不足,比如,复制、分区的支持都十分有限、查询优化仍需要改进,但是MySQL已经是一个足够好的DBMS了,更何况它是opensource的。这段时间没有事,出于好奇,略微的研究了一下MySQL,积累了一些资料,欲总结出来。这些资料打算分为两部分,上部主要讨论MySQL的优化,其中主要参考了《MySQL Manual》和《High Performance MySQL》,如果有时间,以后在下部分析一下MySQL的源码。如果你是MySQL高手,希望你不吝赐教;如果你是新手,希望对你有用。
哲洛不闹
2018/09/19
4610
理解MySQL——架构与概念
MySQL 全文索引实现简单版搜索引擎
用MATCH() ... AGAINST 方式来进行搜索 match()表示搜索的是那个列,against表示要搜索的是那个字符串
星哥玩云
2022/08/18
1.3K0
mysql只有information_schema_validationquery not set
在MySQL8.0以前,通常会通过infomation_schema的表来获取一些元数据,例如从tables表中获取表的下一个auto_increment值,从indexes表获取索引的相关信息等。
全栈程序员站长
2022/09/30
8020
MySQL之视图
一张虚表,和真实的表一样。视图包含一系列带有名称的行和列数据。视图是从一个或多个表中导出来的,我们可以通过insert,update,delete来操作视图。当通过视图看到的数据被修改时,相应的原表的数据也会变化。同时原表发生变化,则这种变化也可以自动反映到视图中。
小手冰凉
2020/05/12
1.8K0
相关推荐
小弟问我:为什么MySQL不建议使用delete删除数据?
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验