MySQL 文件目录空间长满问题处理

Posted A洋槐树

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 文件目录空间长满问题处理相关的知识,希望对你有一定的参考价值。

已用了4年MariaDB,也就是有4年没用mysql,所以有的新特性已不在我的记忆范围内。比如本文的innodb_file_per_table参数已经是MySQL 默认开启的了......


言归正传,今天碰到的一个小问题,真相就是:

1.restart MySQL后tmp 表空间可以自动收缩。腾出一点空间

2.移走部分Datafile腾出一点空间,你可以认为用到了MySQL的冷备和恢复。


具体:

MySQL datafile 所在目录空间满了用户想要truncate 相关数据库的大表无法truncate,


1.错误提示:


ERROR  [HY000][3]: Error writing file '/tmp/MYbEd05t' (Errcode: 28)


2. df -h 


Filesystem Size Used Avail Use% Mounted on

/dev/mapper/cl-root 50G 50G 50G 100% /


/dev/mapper/cl-home  121G   61G   60G  51% /home


逐步判定为mysql 数据库目录空间占用最大


cd /  


du -sh *


3.mysql -uroot -p  后show variables like '%bin%'  查看是否binlog 开启,引起磁盘空间不足。结论为:


| log_bin                                 | OFF                  |


4.mysql -uroot -p 后show variables like '%per%' 查看数据库数据文件是否为per table的


| innodb_file_per_table                                    | ON    |


5.拟定解决方案为:


1)将相应数据库mv 到有空间的home目录下,待truncate 相关大表数据后再mv 回该数据库。


2)重启mysql 数据库释放tmp表空间空间。


a.先备份目标数据库


mkdir backup20210219


mysqldump -uroot -p --databases tcms>/home/backup20210219/tcms.sql


b. systemctl stop mysqld  报错


Failed to stop mysqld.service: Unit mysqld.service not loaded.  –  待处理


故:cd /usr/local/mysql/support-files   后 ./mysql.server stop


c.mv database


mv /usr/local/mysql/data/tcms /home/backup20210219/


d.  cd /usr/local/mysql/support-files 后 ./mysql.server start


e.请用户truncate 相关大表。可执行。


f.用户truncate 完后


cd /usr/local/mysql/support-files   后 ./mysql.server stop


g.


mv /home/backup20210219/tcms /usr/local/mysql/data/


h. cd /usr/local/mysql/support-files   后 ./mysql.server start


i. 登录 mysql 检查mv的数据库是否可用。


mysql -uroot -p


mysql> use tcms

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A


Database changed

mysql> select count(*) from uom;

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

| count(*) |

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

| 118 |

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

1 row in set (0.00 sec)

-- 若show database 查不到tcms则需要在OS检查一下文件夹权限,改为mysql:mysql即可。但此次mv没碰到该问题。

g. 删除home 下个人建的backup20210219

rm -rf backup20210219

综上问题已处理。

但restart mysql 数据库可以释放tmp 表空间的空间:ibtmp1 ,也是一个有效的解决办法。另外,可以mv 数据库datafile 的前提是 : innodb_file_per_table =ON (mysql5.7.16 默认为on)


以上是关于MySQL 文件目录空间长满问题处理的主要内容,如果未能解决你的问题,请参考以下文章

zabbix数据库占用磁盘空间较大的处理方法

MySQL存储引擎

MySQL存储引擎

mysql

Ubuntu20.04根目录占满处理方法

求助 linux系统根目录空间突然满了?