AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1135525
Accepted
Dimitrios Desyllas
Dimitrios Desyllas
Asked: 2023-07-03 19:42:04 +0800 CST2023-07-03 19:42:04 +0800 CST 2023-07-03 19:42:04 +0800 CST

为什么 /var/lib/mysql 占用太多空间而实际数据库却足够小

  • 772

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

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

回答,当我调查它时,我看到那个/vae/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

mysql
  • 2 2 个回答
  • 72 Views

2 个回答

  • Voted
  1. Best Answer
    Dimitrios Desyllas
    2023-07-04T16:00:51+08:002023-07-04T16:00:51+08:00

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

    去除/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生成的,并且可以随着时间的推移而累积。

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

    • 1
  2. symcbean
    2023-07-04T22:00:54+08:002023-07-04T22:00:54+08:00

    然而,如果您没有任何复制,并且您的备份/恢复计划不依赖于 bin 日志,那么您可以简单地限制保留的历史记录或完全关闭二进制日志记录。看来 bin 日志是这里问题的根源。但这个故事还有更多内容。

    已删除的记录

    根据 MySQL 数据的配置方式,它很少会释放以前用于现在已删除的记录的磁盘空间。它将重新使用该空间来创建新记录。

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

    WordPress

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

    • 0

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve