在我的实时数据库上测试 MySQL 压缩

Testing MySQL compression on my live database

我有巨大的 tables,其中有很多 VARCHARTINYTEXTTEXT 字段。由于我不是 MySQL 数据库方面的专家,我最近通过查看此页面 InnoDB Table Compression.

了解到 MySQL 数据库的压缩功能

我搜索并阅读了多个页面,发现我需要设置以下参数并将这些更改应用到我的 my.cnf:

innodb_file_per_table=1; (this is already set)
innodb_file_format=Barracuda;

和 table 结构:

 ...
 ROW_FORMAT=COMPRESSED
 KEY_BLOCK_SIZE=8; (possibly I need to do a trial-and-error to find a
                    better key_block_size that fits better to my case)

所以,我想初步测试一下,看看这种压缩对 table 大小有何好处,并希望更好地管理我的 space。为了进行此测试,我将生成一个包含数百或数千行原始 table 的样本 table,然后进行试验和性能测量。

因为这将是一个测试过程,而且我没有任何其他服务器可以进行测试,所以我不想冒险。

这是我的问题:

如果我在我当前的服务器上更改我的 my.cnf 文件(通过添加 innodb_file_format=Barracuda;)并重新启动服务器,它会对我现有的 tables/data 有任何影响 ROW_FORMAT=COMPACT

我找不到任何地方answering/mentioning,在此先感谢。

innodb_file_format 适用于新创建的表,而不是现有表。我认为您甚至不需要重新启动。

SET GLOBAL 命令需要 root 权限,但之后,您可以 运行 作为普通用户。

SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_per_table=1;      -- already done
SET GLOBAL innodb_large_prefix=1;        -- optional
logout & login (to get the global values);
ALTER TABLE tbl ROW_FORMAT=COMPRESSED;   -- This assumes table exists
CREATE TABLE tbl ( ...
    )  ROW_FORMAT=COMPRESSED;            -- This assumes creating