mysqlでbinlogファイル名が桁あふれたらどうなるか検証してみた

binlogは以下のように生成されていく。

* test-bin.001
* test-bin.002
* test-bin.003
* ..
* test-bin.999

で、999を越えたらどうなるかについて検証してみた。

# binlogのmax_binlog_sizeを小さくしておく

```mysql:/etc/my.cnf
[client]
default-character-set = sjis

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
default-character-set = sjis
log-bin         = /var/lib/mysql/logs/test-bin
log-bin-index   = /var/lib/mysql/logs/test-bin.index
max_binlog_size = 500000

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set = sjis
```

```bash:binlogを生成するためにdumpを取り込む
set -eu
for i in `seq 1 1000`
do
  mysql -uroot test < test.dump
  ls -ltrh /var/lib/mysql/logs/ | tail -n 6
done
```

# 結果

```bash:
-rw-rw---- 1 mysql mysql 1043859  8月  9 06:52 test-bin.994
-rw-rw---- 1 mysql mysql 1043972  8月  9 06:52 test-bin.995
-rw-rw---- 1 mysql mysql 1044168  8月  9 06:52 test-bin.996
-rw-rw---- 1 mysql mysql 1044011  8月  9 06:52 test-bin.997
-rw-rw---- 1 mysql mysql 1043918  8月  9 06:52 test-bin.998
-rw-rw---- 1 mysql mysql 1044144  8月  9 06:52 test-bin.999
-rw-rw---- 1 mysql mysql 1361005  8月  9 06:52 test-bin.1000
-rw-rw---- 1 mysql mysql 1045470  8月  9 06:52 test-bin.1001
-rw-rw---- 1 mysql mysql 1045659  8月  9 06:52 test-bin.1002
-rw-rw---- 1 mysql mysql 1045517  8月  9 06:52 test-bin.1003
-rw-rw---- 1 mysql mysql 1391170  8月  9 06:52 test-bin.1004
-rw-rw---- 1 mysql mysql 1045406  8月  9 06:52 test-bin.1005
-rw-rw---- 1 mysql mysql 1324502  8月  9 06:52 test-bin.1006
-rw-rw---- 1 mysql mysql  513199  8月  9 06:52 test-bin.1007
-rw-rw---- 1 mysql mysql 1275667  8月  9 06:52 test-bin.1008
-rw-rw---- 1 mysql mysql 1027143  8月  9 06:52 test-bin.1009
-rw-rw---- 1 mysql mysql 1027162  8月  9 06:52 test-bin.1010
-rw-rw---- 1 mysql mysql  704515  8月  9 06:52 test-bin.1011
-rw-rw---- 1 mysql mysql   38073  8月  9 06:52 test-bin.index
drwxr-xr-x 2 mysql mysql    4096  8月  9 06:24 ibdata
-rw-r--r-- 1 mysql mysql    3923  8月  9 06:28 mysql.err
```

ファイル名の桁が増えた！


# HDDの空きが許す限りどこまでいけるか試してみた


```bash:
    -rw-rw---- 1 mysql mysql 1004K  8月 10 07:18 test-bin.363889
    -rw-rw---- 1 mysql mysql 1004K  8月 10 07:18 test-bin.363888
    -rw-rw---- 1 mysql mysql  1.3M  8月 10 07:18 test-bin.363887
    -rw-rw---- 1 mysql mysql   14M  8月 10 07:18 test-bin.index
    -rw-rw---- 1 mysql mysql   13K  8月 10 07:18 test-bin.363891
    -rw-rw---- 1 mysql mysql  689K  8月 10 07:18 test-bin.363890
    ERROR 3 (00000) at line 1668: Error writing file '/var/lib/mysql/logs/db2/test-bin.363912' (Errcode: 28)
    [root@binlogtest ~]# df -h .
    Filesystem          サイズ  使用  残り 使用% マウント位置
    /dev/mapper/VolGroup00-LogVol00
                          386G  366G     0 100% /
    [root@binlogtest ~]# ps -ef | grep mysql
    root      2453     1  0 Aug09 ?        00:00:00 /bin/sh /opt/mysql/bin/mysqld_safe --user=mysql
    mysql     2483  2453 15 Aug09 ?        14:53:40 /opt/mysql/libexec/mysqld --basedir=/opt/mysql --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --socket=/var/lib/mysql/mysql.sock
    root      6176  2744  0 05:43 pts/1    00:00:00 grep mysql
    [root@binlogtest ~]# mysql
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 11016
    Server version: 4.0.27-log
    
    Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
    
    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>
```