编辑1

编辑1

在我的服务器中,Db 占用了太多空间:

Filesystem       Size  Used Avail Use% Mounted on
/dev/root         58G   58G  461M 100% /
tmpfs            966M     0  966M   0% /dev/shm
tmpfs            387M  856K  386M   1% /run
tmpfs            5.0M     0  5.0M   0% /run/lock
/dev/nvme0n1p15  105M  6.1M   99M   6% /boot/efi
tmpfs            194M  4.0K  194M   1% /run/user/1000

当我调查它时,我发现/var/lib/mysql占据这个空间的人是:

ncdu 1.15.1 ~ Use the arrow keys to navigate, press ? for help                                                                                                                                                                                
--- /var/lib 
   50.6 GiB [##########] /mysql                                                                                                                                                                                                               
  801.2 MiB [          ] /snapd
  138.4 MiB [          ] /apt
   90.1 MiB [          ] /mecab
   39.4 MiB [          ] /dpkg
    3.8 MiB [          ] /ubuntu-advantage

我尝试调查占用太多空间的是什么。所有数据库都为 wordpress 网站提供服务,因此我无法过多地修改架构。

但是我检查了数据库大小:

SELECT table_schema AS "Database", SUM(data_length + index_length) / 1024 / 1024 AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema;
+--------------------+--------------+
| Database           | Size (MB)    |
+--------------------+--------------+
| blog1              | 166.00000000 |
| information_schema |   0.00000000 |
| mysql              |   2.76562500 |
| performance_schema |   0.00000000 |
| blog2              |  31.79687500 |
| sys                |   0.01562500 |
+--------------------+--------------+
6 rows in set (0.35 sec)

它们都是相对较小的数据库。那么,/var/lib/mysql 到底怎么会占用太多空间呢?

该设置只是一个带有 mysql 的 LEMP 堆栈,没有复制。

编辑1

我查看了一下/var/lib/mysql,发现有很多 binlog 记录:

sudo du -sk /var/lib/mysql
53151572    /var/lib/mysql

$ sudo ls -l /var/lib/mysql | wc -l
623
# I susspect 653 lines would be too much if pasted here

$ sudo ls -l /var/lib/mysql | grep binlog | head
-rw-r----- 1 mysql mysql  43170892 Jun  4 00:00 binlog.000233
-rw-r----- 1 mysql mysql  35975939 Jun  5 00:00 binlog.000234
-rw-r----- 1 mysql mysql  36153241 Jun  6 00:00 binlog.000235
-rw-r----- 1 mysql mysql  37148526 Jun  7 00:00 binlog.000236
-rw-r----- 1 mysql mysql  34947871 Jun  8 00:00 binlog.000237
-rw-r----- 1 mysql mysql  34058129 Jun  9 00:00 binlog.000238
-rw-r----- 1 mysql mysql  36786212 Jun 10 00:00 binlog.000239
-rw-r----- 1 mysql mysql  34790230 Jun 11 00:00 binlog.000240
-rw-r----- 1 mysql mysql  37634381 Jun 12 00:00 binlog.000241
-rw-r----- 1 mysql mysql  35801131 Jun 13 00:00 binlog.000242

$ sudo ls -l /var/lib/mysql | grep binlog | wc -l
545

# 545 lines are binlog files therefore I have binlogs

我已经找到了一种缓解该问题的方法:

$ cat /etc/mysql/mysql.conf.d/rj.cnf
# Added by Rick James
[mysqld]
log_bin =                          # turn off
binlog_expire_logs_seconds = 86400  # 1 day
max_binlog_size = 1         # 100M

我做到了:

mysql> SHOW BINARY LOGS;
PURGE BINARY LOGS BEFORE '2023-07-30 00:00:00';
Query OK, 0 rows affected, 1 warning (0.01 sec)

但是文件仍然在不断填满,如果我使用它们或者以某种方式可以告诉 binlog 存储在 /dev/null 中/var/lib/mysql会安全吗?rm -rf

答案1

为了解决此问题,请执行以下操作:

去除/etc/mysql/mysql.conf.d/rj.cnf

rm -rf /etc/mysql/mysql.conf.d/rj.cnf

创建一个新的配置/etc/mysql/mysql.conf.d/no-binlog.cnf并添加以下配置:

[mysqld]
disable_log_bin

然后做:

sudo service mysql restart

然后使用命令连接mysql并运行:

RESET MASTER

这将解决您的问题。假设不使用复制,例如拥有一台具有典型 LAMP 或 LEMP 堆栈的服务器。(例如个人服务器)


之所以

原因是你有一些mysql在复制时使用的日志文件。这些日志文件是从binlog生成的,可以随着时间的推移而累积。

在我们的方法中,我们由于缺乏复制而禁用这种类型的日志记录。

答案2

但是,如果你没有任何复制以及您的备份/恢复计划不依赖于 bin 日志,那么你可以简单地限制历史记录保留或关闭二进制日志总的来说。看来 bin 日志是这个问题的根源。但故事还不止于此。

已删除的记录

根据 MySQL 数据的配置方式,它很少会释放之前用于已删除记录的磁盘空间。它会重新使用该空间来存储新记录。

恢复空间最简单的方法是进行转储/恢复。

WordPress 的

Wordpress 本身还不错。但它确实有一个庞大的插件生态系统,质量参差不齐。我见过很多安装,其中对数据库的写入(数量级)比读取要多。比这些插件存储大量数据更糟糕的是,它们通常使用 Wordpress 表来存储数据 - 因此您可以卸载插件,但永远无法删除数据。

相关内容