1. 程式人生 > >Mysql binlog 無法刪除(purge命令無法刪除)

Mysql binlog 無法刪除(purge命令無法刪除)

1.版本 1)作業系統 cat /etc/issue
CentOS release 6.6 (Final)
Kernel \r on an \m cat /proc/version
Linux version 2.6.32-504.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014 2)mysql資料庫版本 MySQL --version MySQL  Ver 14.14 Distrib 5.6.26, for linux-glibc2.5 (x86_64) using  EditLine wrapper 2. 問題描述 2.1 發現問題   今天研發跟我反映他們有一套測試庫,mysql 的binlog刪除不了(他使用的是purge命令做日誌刪除)。登入發現binlog  佔了將近70個G,儲存了最近一週的日誌:   ls -rlt 3306-bin*
-rw-rw---- 1 mysql mysql 1074477734 Jan  9 19:55 3306-bin.000049
-rw-rw---- 1 mysql mysql 1074023126 Jan  9 21:15 3306-bin.000050.
...........
-rw-rw---- 1 mysql mysql  859308032 Jan 16 19:49 3306-bin.000107
-rw-rw---- 1 mysql mysql       2478 Jan 17 09:19 3306-bin.index 檢視資料庫的expire_logs_days引數,發現是7,然後我設定該引數為1,並進行 flush logs操作(正常情況下,會刪除1天以前的所有binlog)     mysql> set global expire_logs_days=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'expire_logs_days';
+------------------+-------+|
Variable_name    | Value |
+------------------+-------+|
expire_logs_days | 1     |
+------------------+-------+
1 row in set (0.00 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.00 sec) 但是執行後我發現,結果並未像我預想的那樣,所有的binlog都還在,這是怎麼回事?
難道這些binlog沒有記錄在該例項中?查看了3306-bin.index檔案,發現這些binlog檔案都是記錄在 binlog 的index 檔案中的,然後在例項上執行showbinary logs; 發現報如下錯誤:     mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging
報錯說我沒有使用 binlog,但是我檢視引數,該例項確實是打開了binlog:     mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------------------+|
Variable_name                   | Value                                   
|+---------------------------------+------------------------------------------+|
log_bin                         | ON                                       |
| log_bin_basename                | /data/mysql/mysql3306/log/3306-bin       |
| log_bin_index                   | /data/mysql/mysql3306/log/3306-bin.index |
| log_bin_trust_function_creators | ON                                       |
| log_bin_use_v1_row_events       | OFF                                      |
| sql_log_bin                     | ON                                       |
+---------------------------------+------------------------------------------+
6 rows in set (0.00 sec) 看看error 日誌有沒有什麼資訊:     2018-01-16 19:15:41 6886 [Warning] Disk is full writing '/data/mysql/mysql3306/log/3306-bin.000107 ' (Errcode: 28 - No space left on device).
Waiting for someone to free space...2018-01-16 19:15:41 6886 [Warning] Retry in 60 secs. Message reprinted in 600 secs2018-01-16 19:15:44 6886 [ERROR] Error writing file '/data/mysql/mysql3306/log/slow3306.log' (errno: 1 - No space left on device)2018-01-16 19:25:41 6886 [Warning] Disk is full writing '/data/mysql/mysql3306/log/3306-bin.000107' (Errcode: 28 - No space left on device). Waiting for someone to free space...2018-01-16 19:25:41 6886 [Warning] Retry in 60 secs. Message reprinted in 600 secs2018-01-16 19:35:41 6886 [Warning] Disk is full writing '/data/mysql/mysql3306/log/3306-bin.000107' (Errcode: 28 - No space left on device). Waiting for someone to free space...2018-01-16 19:35:41 6886 [Warning] Retry in 60 secs. Message reprinted in 600 secs2018-01-16 19:36:41 6886 [Warning] Disk is full writing '/data/mysql/mysql3306/log/3306-bin.000107' (Errcode: 28 - No space left on device). Waiting for someone to free space...2018-01-16 19:36:41 6886 [Warning] Retry in 60 secs. Message reprinted in 600 secs2018-01-16 19:46:41 6886 [Warning] Disk is full writing '/data/mysql/mysql3306/log/3306-bin.000107' (Errcode: 28 - No space left on device). Waiting for someone to free space...2018-01-16 19:46:41 6886 [Warning] Retry in 60 secs. Message reprinted in 600 secs2018-01-16 19:49:41 6886 [ERROR] An error occured during flushing cache to file. 'binlog_error_action' is set to 'IGNORE_ERROR'. Hence turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it. 我們看到昨天下午7點/data 目錄下磁碟滿了,然後刷資料到磁碟的操作失敗, 並且binlog_error_action引數使用的預設值(IGNORE_ERROR)。
所以自動關閉了binlog(所以 我們上面執行 show binary logs時報錯說 你沒有使用binlog)。
    3.解決方案
解決方案其實上面error log中已經給我們,我們需要重啟例項,來重新啟用binlog,然後再刪除binlog(purge 或者 flush logs)。當然做這些操作時我們資料目錄磁碟是不能被佔滿的,需要有一定的空間(可以通過刪除或者清空一些無關緊要的檔案來釋放一些空間),否則資料庫例項可能停不掉(因為沒有空間寫日誌) 重啟例項後我們執行 show binary logs; ,我們看到此時能夠正常看到當前例項下所有未被刪除的binlog   mysql> show binary logs;+-----------------+------------+| Log_name        | File_size  |+-----------------+------------+| 3306-bin.000054 | 1073745018 || 3306-bin.000055 | 1073741931 || 3306-bin.000056 | 1073742629 || 3306-bin.000057 | 1073742391 || 3306-bin.000058 | 1073741974 || 3306-bin.000059 | 1073742197 || 3306-bin.000060 | 1074293707 || 3306-bin.000061 | 1074318524 || 3306-bin.000062 | 1074196194 || 3306-bin.000063 | 1073957987 || 3306-bin.000064 | 1074045715 || 3306-bin.000065 | 1074456116 || 3306-bin.000066 | 1074352906 || 3306-bin.000067 | 1073745429 || 3306-bin.000068 | 1089211613 || 3306-bin.000069 | 3264774138 || 3306-bin.000070 | 1073743716 || 3306-bin.000071 | 1074132057 || 3306-bin.000072 | 1074296041 || 3306-bin.000073 | 1073865674 || 3306-bin.000074 | 1074128306 || 3306-bin.000075 | 1693579796 || 3306-bin.000076 | 1073918285 || 3306-bin.000077 | 1074052487 || 3306-bin.000078 | 1074118960 || 3306-bin.000079 | 1074426059 || 3306-bin.000080 | 1092942370 || 3306-bin.000081 | 1073817857 || 3306-bin.000082 | 1074191946 || 3306-bin.000083 | 1074310368 || 3306-bin.000084 | 1073810038 || 3306-bin.000085 | 1074093671 || 3306-bin.000086 | 1074359248 || 3306-bin.000087 | 1073741978 || 3306-bin.000088 | 1074433324 || 3306-bin.000089 | 1073839559 || 3306-bin.000090 | 1074001883 || 3306-bin.000091 | 1074115966 || 3306-bin.000092 | 1074141865 || 3306-bin.000093 | 1074028550 || 3306-bin.000094 | 1074057515 || 3306-bin.000095 | 1074384113 || 3306-bin.000096 | 1073786087 || 3306-bin.000097 | 1074062101 || 3306-bin.000098 | 1074039304 || 3306-bin.000099 | 1073871663 || 3306-bin.000100 | 1074377569 || 3306-bin.000101 | 1367597993 || 3306-bin.000102 | 3076703855 || 3306-bin.000103 | 2959674341 || 3306-bin.000104 | 2960788209 || 3306-bin.000105 | 2960786610 || 3306-bin.000106 | 1073742076 || 3306-bin.000107 |  859308032 || 3306-bin.000108 |        120 |+-----------------+------------+ 執行 purge logs 或者 flush logs(要先設定expire_logs_days引數)命令刪除日誌
 
---------------------
原文:https://blog.csdn.net/shaochenshuo/article/details/79081452