在Mysql环境下,常常由于数据磁盘满而导致Mysql故障。下面整理了如何在Mysql(5.7)环境下做好Mysql的空间清理。
一、日志文件清理
Mysql的日志日积月累,占用的磁盘空间越来越大,磁盘可用空间越来越少,需要自动清理或者手动清理
1.查看文件磁盘占用
1.1 查看磁盘空间占用
使用下面命令查看:df -Th或者df -lh
root@SJC1010:~# df -Th
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 4.9G 0 4.9G 0% /dev
tmpfs tmpfs 995M 496K 994M 1% /run
/dev/vda1 ext4 98G 42G 52G 45% /
tmpfs tmpfs 4.9G 16K 4.9G 1% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 995M 0 995M 0% /run/user/0
root@SJC1010:~#
root@SJC1010:~# df -lh
Filesystem Size Used Avail Use% Mounted on
udev 4.9G 0 4.9G 0% /dev
tmpfs 995M 496K 994M 1% /run
/dev/vda1 98G 42G 52G 45% /
tmpfs 4.9G 16K 4.9G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 995M 0 995M 0% /run/user/0
root@SJC1010:~#
1.2 查看目录空间占用
# du -sh /opt
41G /opt
1.3 查看文件空间占用
# ll -h /mysql/data/binlog/binlog/mysql-bin.000175
-rw------- 1 mysql oinstall 110M Nov 8 09:15 /mysql/data/binlog/binlog/mysql-bin.000175
2.Binlog日志清理
2.1定时自动清理Binlog日志
登录数据库,查看当前日志保存天数:
root@SJC1010:~# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 50462
Server version: 5.7.44-log Source distribution
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql> show variables like '%expire_logs_days%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 7 |
+------------------+-------+
1 row in set (0.00 sec)
mysql>
这个默认是0,也就是logs不过期,可通过设置全局的参数,使他临时生效:
mysql> set global expire_logs_days=7;
设置了只保留7天BINLOG, 下次重启mysql这个参数默认会失败,所以需在my.cnf中设置
expire_logs_days = 7
这样在下次重启mysql的时候,expire_logs_days也一样是7;
2.2 手动删除Binlog日志
第一步:登陆进入mysql,并使用 show binary logs; 查看日志文件。
mysql>show binary logs;
±-----------------±----------+
| Log_name | File_size |
±-----------------±----------+
| mysql-bin.000001 | 234592362 |
| mysql-bin.000002 | 425234342 |
| mysql-bin.000003 | 425345345 |
| mysql-bin.000004 | 234234222 |
| mysql-bin.000005 | 425994852 |
±-----------------±----------+
1 row in set (0.00 sec)
第二步:查看正在使用的日志文件:show master status;
mysql>show master status;
±-----------------±----------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±-----------------±----------±-------------±-----------------±------------------+
| mysql-bin.000005 | 425994852 | | | |
±-----------------±----------±-------------±-----------------±------------------+
1 row in set (0.00 sec)
当前正在使用的日志文件是mysql-bin.000005,那么删除日志文件的时候应该排除掉该文件。
删除日志文件的命令:purge binary logs to ‘mysql-bin.000005’;
mysql>purge binary logs to 'mysql-bin.000005';
删除除mysql-bin.000005以外的日志文件,也可以指定其他文件名,例如mysql-bin.000003。
删除后就能释放大部分空间。