释放“mysql\data”中的磁盘空间

rhu*_*hes 4 mysql

我正在尝试释放MySQL实例使用的一些空间,但我对MySQL.

我注意到mysql\data文件夹中有很多localhost-bin.0001**文件,如下面的屏幕截图所示:

在此处输入图片说明

这些是什么?它们可以备份/移动/删除吗?

编辑

这里看,这些文件是日志文件,可以删除。

帖子提到:

As long as you do not have mysql replication installed, then [you can delete the files].
Run Code Online (Sandbox Code Playgroud)

我如何检查这个?

Rol*_*DBA 5

首先,您应该运行以下命令:

SELECT COUNT(1) ReplicationUserCount
FROM mysql.user WHERE Repl_slave_priv = 'Y';
Run Code Online (Sandbox Code Playgroud)

如果ReplicationUserCount> 0,则 DB Server 可以用作 Master。询问您的系统管理员或 DBA 是否有任何活动或休眠的 Slave。

如果ReplicationUserCount= 0,则 DB 服务器是独立的。然后,您可以使用以下方法删除全部或部分二进制日志:

方法#1

RESET MASTER;
Run Code Online (Sandbox Code Playgroud)

运行此命令时,所有二进制日志都将被删除并localhost-bin.000001创建。

替代方法:关闭 mysql,删除localhost-bin.*,然后启动 mysql。

方法#2

PURGE BINARY LOGS TO 'localhost-bin.000190';
Run Code Online (Sandbox Code Playgroud)

运行此命令时,之前的所有二进制日志localhost-bin.000190都将被删除。

方法#3

PURGE BINARY LOGS BEFORE DATE(NOW());
PURGE BINARY LOGS BEFORE DATE(NOW()) + INTERVAL 0 SECOND - INTERVAL 3 DAY;
PURGE BINARY LOGS BEFORE '2014-03-26 15:30:00';
Run Code Online (Sandbox Code Playgroud)

当你运行这些时,这就是他们所做的

  • 今天之前的所有二进制日志都被删除了
  • 3 天前午夜之前的所有二进制日志都被删除
  • 2014 年 3 月 26 日下午 3:30 之前的所有 binlog 被删除

警告 #1

如果方法 2 或 3 失败,则表明文件localhost-bin.index. 它保留一个带有 bin 日志列表的文本文件。如果文件不同步,请使用METHOD #1. 它将重新创建localhost-bin.index.

警告#2

不要使用rmWindows 资源管理器或从 Windows 资源管理器从 Linux 命令行擦除二进制日志。这样做会导致localhost-bin.index不同步。如果这样做,只需执行方法 #1,mysqld 就会将其全部清理干净。

警告 #3

如果你expire_logs_days = 7在你的my.cnf(或my.ini) 中设置,它会自动运行这个

PURGE BINARY LOGS BEFORE DATE(NOW()) - INTERVAL 7 DAY;
Run Code Online (Sandbox Code Playgroud)

在每次日志轮换或 mysql 重启时。

结语

由于您对恢复空间感兴趣,请选择三种方法之一。如果需要expire_logs_days = 7,您可以放置在您的my.cnf(或my.ini) 中。如果您不希望它增长过去 2 或 3 个 binlog,请在您的配置文件中进行设置:

[mysqld]
expire_logs_days=1
Run Code Online (Sandbox Code Playgroud)

并运行

SET GLOBAL expire_logs_days=1;
Run Code Online (Sandbox Code Playgroud)

将二进制日志的数量限制为一天。

请记住,如果不同步,设置expire_logs_days 将不起作用localhost-bin.index