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 管理逻辑卷。
确认后,参考该文档进行 扩容:
停留在世界边缘,与之惜别