8种MySQL数据库空间优化方案

1. 清理无用数据

​ 通过删除不再需要的数据来释放存储空间。确保备份数据之后,可以使用TRUNCATE命令来完成此操作。从数据库中删除不需要的表、行或列。这将减少数据库的大小并释放存储空间。

2.数据归档:

​ 可通过 创建 table_name 新的表,保持与原表结构一致。然后重命名成旧表,或把需要数据进行筛选创建保留,导出存储,再对整个表进行删除,

#把新表重名名为 table_name先将整个表的结构和数据导出来,
create table new_table_name like table_name;
alter table table_name rename old_table_name;
alter table new_table_name rename table_name;

3. 清理binlog日志

当前通过确认对服务器binlog日志统计,大致占用 进入 MySQL 命令行后,运行以下命令查看当前的二进制日志文件列表:

SHOW BINARY LOGS;

这将显示当前正在使用的二进制日志文件列表,以及每个日志文件的名称和大小。

根据需要,可以决定删除旧的二进制日志文件。可以使用以下命令删除指定的二进制日志文件:

PURGE BINARY LOGS TO '日志文件名称';

替换 '日志文件名称' 为要保留的最新的二进制日志文件的名称。这将删除指定日志文件之前的所有日志文件。

例如,如果要保留最新的两个日志文件,并删除旧的日志文件,可以运行以下命令:

PURGE BINARY LOGS TO 'mysql-bin.0000XX';

其中 'mysql-bin.0000XX' 是要保留的最新的二进制日志文件的名称。

完成后,可以使用以下命令退出 MySQL 命令行客户端:

EXIT;

4. 优化表:

MySQL提供了优化表的命令,可以重新组织表的物理存储,从而减少存储空间的占用。使用OPTIMIZE TABLE语句来优化表。例如,要优化名为your_table的表,可以执行以下命令:

OPTIMIZE TABLE your_table;

​ 优化表将重新组织数据并释放未使用的空间,该命令会优化表,并整理数据文件的碎片。重新生成未使用的空间。该命令将会整理表数据和相关的索引数据的物理存储空间,用来减少占用的磁盘空间,并提高访问表时候的IO性能。该命令对视图无效。该命令目前只对MyISAM、InnoDB,ARCHIVE的表起作用,其余引擎的不起作用。该命令执行时会将表锁住,所以不要在高峰期使用。

5. 压缩表:

当前表采用了InnoDB存储引擎,可以使用InnoDB的行压缩功能来减少存储空间的占用。行压缩可以通过在表上启用压缩来实现。使用ALTER TABLE语句并指定COMPRESSION选项来压缩表。例如,要压缩名为your_table的表,可以执行以下命令:

ALTER TABLE your_table COMPRESSION='COMPRESSED';

这将启用行压缩并减少存储空间的使用。

6. 优化存储引擎:

不同的存储引擎在存储空间使用方面可能有所不同。如果表使用的是MyISAM存储引擎,可以尝试将其转换为InnoDB引擎,因为InnoDB在存储空间方面通常更有效。可以使用ALTER TABLE语句将表转换为InnoDB引擎。例如:

ALTER TABLE your_table ENGINE=InnoDB;

这将把名为your_table的表从MyISAM引擎转换为InnoDB引擎。

7. 数据库备份重建:

新建新数据库实例,进行数据同步,迁移至新实例。

8.磁盘无损扩容

确认磁盘是否为LVM逻辑卷管理

sudo yum install lvm2

sudo lvdisplay

看到类似 --- Logical volume ----的输出新信息,表明服务器上纯在一个逻辑卷,其中vg_name就是卷组(Vlolume Group)的名称,lv_name 是逻辑卷的名称,

如果没有任何输出或出西安错误的消息,那么服务器可能没有使用LVM 管理逻辑卷。

确认后,参考该文档进行 扩容:

https://help.aliyun.com/document_detail/131143.html