首页 > 数据库 >踩坑了,MySQL数据库生成大量奇怪的大文件

踩坑了,MySQL数据库生成大量奇怪的大文件

时间:2024-02-05 12:32:02浏览次数:33  
标签:bin 文件 OFF log 数据库 MySQL 生成 mysql

作者:田逸(formyz)


一大早就收到某个数据库服务器磁盘满的报警信息,其中数据盘使用率超过90%,如下图所示。

踩坑了,MySQL数据库生成大量奇怪的大文件_MySQL



这是一台刚上线不久的MySQL从库服务器,数据盘的总容量是300G。先登录系统,查看主从同步是否正常,幸运的是主从同步正常;再看看磁盘空间的使用情况,执行的命令及输出如下。

df -h

[root@MySQL-S-200-169 mysql_db]# df -h

Filesystem Size Used Avail Use% Mounted on

devtmpfs 4.0M 0 4.0M 0% /dev

tmpfs 16G 0 16G 0% /dev/shm

tmpfs 6.3G 8.6M 6.3G 1% /run

/dev/mapper/rl-root 33G 3.4G 30G 11% /

/dev/sda1 1014M 220M 795M 22% /boot

/dev/sdb1 300G 271G 29G 91% /data

tmpfs 3.2G 0 3.2G 0% /run/user/0


分区“/data”为MySQL数据库用户数据存储的空间,初步判定多半是日志文件之类的给塞满了。进入用户数据目录(选项文件”/etc/my.cnf”设定的数据目录为”/data/mysql_db”),发现大量以“OFF”为前缀的文件(如下图所示),感觉莫名其妙呢!

踩坑了,MySQL数据库生成大量奇怪的大文件_二进制日志_02



这些文件大小在1G左右,从经验上感觉可能是日志文件。不确定是“OFF”做前缀(眼神不好),还是“0FF”做前缀?可用如下命令进行鉴别。

ls -al OFF*|more
ls -al 0FF*|more

[root@MySQL-S-200-169 mysql_db]# ls -al 0FF*|more

ls: cannot access '0FF*': No such file or directory

[root@MySQL-S-200-169 mysql_db]# ls -al 0FF*

ls: cannot access '0FF*': No such file or directory

[root@MySQL-S-200-169 mysql_db]# ls -al OFF*|more

-rw-r----- 1 mysql mysql 1073743407 Feb 3 14:13 OFF.000001

-rw-r----- 1 mysql mysql 1073742872 Feb 3 14:16 OFF.000002

-rw-r----- 1 mysql mysql 1073741885 Feb 3 14:20 OFF.000003

………………省略………………………………………………..


从输出可知,是大写字母“O”而不是数字“0”。对比其它运行正常的MySQL数据库,都没有这样的文件存在,问题在哪里呢?


因为这个数据库系统上线不久,做了哪些操作应该还有些印象。回顾一下最近所做的操作,突然想起上周主从不同步,延迟特别大(4万多秒),为了处理这个主从不同步的麻烦,对MySQL的选项文件“/etc/my.cnf”做了修改,因为是从库,就决定将数据库的二进制日志记录给关闭,将文本行“log-bin = mysql-bin”变更成“log-bin = OFF”(还增加了其它的项,这里不做展开)。修改完毕,MySQL主从同步的延迟问题得以解决。


当MySQL数据库二进制日志设定为“log-bin=mysql-bin”时,启动MySQL服务以后,会在数据目录下生成以“mysql-bin.”为前缀,后紧跟一串数字结尾的二进制日志文件,并且按数字顺序生成,形如“mysql-bin.000001、mysql-bin.0000012”。通过对比,发现这些以“OFF.”为前缀的大文件,也是同样的规律。排查到这里,我幡然醒悟:“MySQL选项文件my.cnf设定的log-bin=OFF并不能关闭二进制日志的生成,而是生成以OFF为前缀的二进制文件而已”。


通过查询资料,MySQL这个版本要关闭“binlog”二进制日志记录,需在选项文件(注意,不要认为是配置文件)“/etc/my.cnf”中设置文本行“disable-log-bin”或者“skip-log-bin”。更改好选项文件之后,重启MySQL服务,确保主从复制正常的情况下,检查二进制日志生成的状况,具体的操作是,MySQL客户端登录MySQL,执行下列操作进行验证。

mysql> show variables like'log_%';
mysql> show binary logs;

mysql> show variables like'log_%';

+----------------------------------------+----------------------------------------+

| Variable_name | Value |

+----------------------------------------+----------------------------------------+

| log_bin | OFF |

| log_bin_basename | |

| log_bin_index | |

| log_bin_trust_function_creators | OFF |

| log_bin_use_v1_row_events | OFF |

| log_error | /data/mysql_db/error.log |

| log_error_services | log_filter_internal; log_sink_internal |

| log_slave_updates | OFF |

| log_slow_admin_statements | OFF |

| log_slow_extra | OFF |

| log_slow_replica_statements | OFF |

| log_slow_slave_statements | OFF |

| log_statements_unsafe_for_binlog | ON |

| log_throttle_queries_not_using_indexes | 0 |

| log_timestamps | UTC |

+----------------------------------------+----------------------------------------+

21 rows in set (0.01 sec)


mysql> show binary logs;

ERROR 1381 (HY000): You are not using binary logging


为确保手动删除MySQL从数据库服务器占用大量磁盘空间的二进制文件不引起新的风险,在操作前必须对数据库进行全量备份或者整个操作系统备份(Proxmox VE虚拟机的优势所在,操作如下图所示),停止MySQL服务,删除所有以“OFF.”为前缀的大文件,然后重启MySQL服务。

踩坑了,MySQL数据库生成大量奇怪的大文件_MySQL_03



经验证,磁盘空间释放,MySQL服务运行正常,主从复制也正常。

标签:bin,文件,OFF,log,数据库,MySQL,生成,mysql
From: https://blog.51cto.com/sery/9604981

相关文章

  • SQL数据库入门03:数据库表的完整性约束、索引与视图的操作
      本文介绍基于MicrosoftSQLServer软件,实现数据库表完整性约束、索引与视图的创建、编辑与删除等操作的方法。(数据库基础(三):完整性约束、索引、视图)  系列文章中示例数据来源于《SQLServer实验指导(2005版)》一书。依据本系列文章的思想与对操作步骤、代码的详细解释,大家用......
  • mysql模糊查询如何能用到索引?
    mysql模糊查询%我就不多说了。想要%不在左边也能用到索引,可以选择加全文索引假设我的表是wa_log记录日志的,url是访问的路径,想要查询url路径中包含admin的数据ALTERTABLEwa_logADDFULLTEXT(url);EXPLAINSELECT*FROMwa_logWHEREMATCH(url)AGAINST('admin'INBOOLEAN......
  • .net通过共享文件方式读取SQLLite数据库整理两种方案
    项目环境:win10,框架.net6.0问题描述:客户现场有一台测量设备,测量数据存放在测量设备本地SQLLite中,应用服务器存在另一台电脑上,客户希望通过共享文件方式读取SQLLite中的数据定时同步到应用服务器上进行查询展示。解决方案:网上搜了一下资料整理了一下大概两种方法:1.没有账号密......
  • 数据库 模式
    外模式:指的是数据库(database)的视图,数据库表的数据范围、字段多少的一个抽取到一个虚拟表的定义。创建一个外模式(视图)CREATEVIEWview_nameASSELECTcolumn1,column2,...FROMtable_nameWHEREcondition;书本上概念跟实际情况不一样,叫法也不一样,应用程序大多数操作的都是表(......
  • mysql如何实现左连接、右连接
    学生表 students学生ID学生姓名1张三2李四3王五4小六5小七成绩表 grades学生ID课程学生成绩1数学862语文793数学914英语881、查询所有学生的id、姓名、成绩用左连接可以实现:SELECTstudents.学生ID,students.学生姓名,grades.成绩FROMstudentsLEFTJOINgradesONstudents.......
  • mysql-自定义函数
    0、结构delimiter$$--修改语句结束符,mysql默认的结束符是分号,为了在函数体中避免遇到分号就结束,重新定义结束符createfunction函数名(形参)returns返回值类型begin//函数体return返回值数据;end$$delimiter;--将语句结束符修改回来1、变......
  • vue的scoped中的class data-v-xxx生成规则为什么是按照文件的路径?
    Vue.js中,当在单文件组件(.vue文件)的<style>标签上使用scoped属性时,VueLoader会为组件中的CSS添加一个唯一的属性选择器,以确保样式只作用于当前组件内的元素。这个独特的属性通常格式为data-v-xxx,其中xxx是一个根据文件内容和路径生成的哈希值。生成规则基于文件内容和......
  • 【数据库】PostgreSQL中的DISTINCT ON和DISTINCT的区别
    深入理解PostgreSQL中的DISTINCTON和DISTINCT在数据库查询中,我们经常会遇到需要去除重复数据的情况。在PostgreSQL中,我们可以使用DISTINCT和DISTINCTON来实现这个目标。那么,它们之间有什么区别呢?本文将详细介绍这两种方法的用法、区别以及适用场景。DISTINCT的基本用法DISTIN......
  • 第22天:安全开发-PHP应用&留言板功能&超全局变量&数据库操作&第三方插件引用
    #数据库操作-mysqli函数&增删改查PHP函数:连接,选择,执行,结果,关闭等参考:https://www.runoob.com/php/php-ref-mysqli.html常用:mysqli_connect()打开一个到MySQL的新的连接。mysqli_select_db()更改连接的默认数据库。mysqli_query()执行某个针对数据库的查询。mysqli_fetch......
  • centos系统安装mysql并开放端口外部使用
    查看安装包:https://dev.mysql.com/downloads/repo/yum/下载MySQL源:wgethttp://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装MySql源yum-yinstallmysql57-community-release-el7-11.noarch.rpm查看一下安装效果yumrepolistenabled|grepmysq......