mysqlのバイナリログが削除できないときにやったこと

はじめに

Dockerで開発中に以下のエラーに遭遇

General error: 3 Error writing file '/tmp/MYtPTBrC' (OS errno 28 - No space left on device) 

はじめましてのエラーだったから解決方法の備忘録

発生環境

Docker / mysql:8.0.26

OS

# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

MySQL

# mysql --version
mysql  Ver 8.0.26 for Linux on x86_64 (MySQL Community Server - GPL)

原因調査

ググった感じmysqlのバイナリログの肥大化が原因っぽい
mysqlに入ってログの確認

mysql> show master logs;
+---------------+------------+-----------+
| Log_name      | File_size  | Encrypted |
+---------------+------------+-----------+
| binlog.000001 |    3117966 | No        |
| binlog.000002 | 1073800265 | No        |
| binlog.000003 | 1073776277 | No        |
| binlog.000004 |  862945125 | No        |
+---------------+------------+-----------+
4 rows in set (0.00 sec)

ログを削除する

mysql> purge master logs to 'binlog.000001';
ERROR 3 (HY000): Error writing file './binlog.index_crash_safe' (OS errno 28 - No space left on device)

消えないんだが〜〜〜?????

てかmysqlのデータって/var/lib/mysql/の中にあるんじゃね と思いながら確認

# ls /var/lib/mysql/ | grep binlog
binlog.000001
binlog.000002
binlog.000003
binlog.000004

いた・・・!
後は削除してあげればOK

rm /var/lib/mysql/binlog.*

(開発環境は削除でいいけど本番環境は退避とかのほうがいいかも)