I have tried several commands (FLUSH LOGS, PURGE MASTER) but none deletes the log files (when previously activated) or the log tables (mysql/slow_log.CSV and mysql/general_log.CSV and their .frm and .CSM counterparts).
SHOW BINARY LOGS returns «You are not using binary logging».
Edit: I found this simple solution to clear the table logs (but not yet the file logs using a mysql command):
TRUNCATE mysql.general_log;
TRUNCATE mysql.slow_log;
braX
11.4k5 gold badges20 silver badges33 bronze badges
asked Sep 11, 2011 at 21:19
Erwin MayerErwin Mayer
17.7k9 gold badges85 silver badges123 bronze badges
FLUSH LOGS just closes and reopens log files. If the log files are large, it won’t reduce them. If you’re on Linux, you can use mv
to rename log files while they’re in use, and then after FLUSH LOGS, you know that MySQL is writing to a new, small file, and you can remove the old big files.
Binary logs are different. To eliminate old binlogs, use PURGE BINARY LOGS. Make sure your slaves (if any) aren’t still using the binary logs. That is, run SHOW SLAVE STATUS to see what binlog file they’re working on, and don’t purge that file or later files.
Also keep in mind that binlogs are useful for point-in-time recovery in case you need to restore from backups and then reapply binlogs to bring the database up to date. If you need to use binlogs in this manner, don’t purge the binlogs that have been written since your last backup.
answered Sep 12, 2011 at 0:25
Bill KarwinBill Karwin
526k85 gold badges654 silver badges815 bronze badges
2
В MySQL на данный момент существуют 4 вида журнала (лога) и при достаточно серьёзной работе с базами на MySQL необходимо за ними следить. Например, бинарный лог у нас за сутки набирает около гигабайта, а размер жёсткого диска на сервере ограничен и за ними надо следить. Однако следить следует не только за бинарным логом, так как логи (журналы) в MySQL могут принести немалую пользу.
Итак, какие логи ведёт MySQL? Это:
1. бинарный лог (binary log)
2. лог ошибок (error log)
3. лог медленный запросов (slow query log)
4. лог запросов (general query log)
5. лог репликаций (relay log)
Каждый из них по-своему полезен.
Бинарный лог
В первую очередь полезен с точки зрения репликаций. Можно его бэкапить, можно использовать для восстановления данных на более точное время при использовании бэкапов. Лог содержит все команды изменений базы данных, выборки (select, show) не сохраняет, для таблиц, поддерживающих транзакции (BDB, InnoDB) запись в лог выполняется только после выполнения команды COMMIT
. Для лога можно указывать список баз данных, которые надо логировать и список баз данных, которые не надо логировать. В более ранних версиях вместо бинарного лога использовался лог обновлений. Использование бинарного лога снижает производительность базы данных, однако его польза настолько велика, что крайне не рекомендуется его отключать. Рекомендуется защищать бинарный лог паролем, так как он может данные также о паролях пользователей. При достижении максимально разрешённого размера (1 гиг по умолчанию) создаётся следующий файл. Каждый новый файл имеет порядковый номер после имени.
Содержание бинарного лога можно посмотреть с помощью утилиты mysqlbinlog.
Основные настройки в my.cnf
Местоположение лога:
log_bin = /var/log/mysql/mysql-bin.log
Максимальный размер, минимум 4096 байт, по умолчанию 1073741824 байт (1 гигабайт):
max_binlog_size= 500M
Сколько дней хранится:
expire_logs_days = 3
Наиболее часто использующиеся команды
Повторение действий после операции восстановления:
shell> mysqlbinlog log_file | mysql -h server_name
Удаление логов до определённого файла:
PURGE BINARY LOGS TO 'mysql-bin.000';
Удаление логов до определённой даты:
PURGE BINARY LOGS BEFORE 'YYYY-MM-DD hh:mm:ss';
Лог ошибок
Особенно полезен в случаях сбоев. Лог содержит информацию об остановках, запусках сервера, а также сообщения о критических ошибках. Может содержать сообщения с предупреждениями (warnings).
Основные настройки в my.cnf
Местоположение лога:
log_error = /var/log/mysql/mysql.err
Флаг, указывающий стоит ли записывать в лог в том числе предупреждения (записываются, если значение больше нуля):
log_warnings = 1
Наиболее часто использующиеся команды
Переход к новому файл лога:
shell> mysqladmin flush-logs
Копирование старой части лога (необходимо, так как в случае повторного выполнения fluch он будет удалён):
shell> mv host_name.err-old backup-directory
Лог медленных запросов
Если есть подозрение, что приложение работает медленно из-за неэффективных запросов к базе, то в первую очередь следует проверить лог медленных запросов. В случае оптимизации запросов этот лог поможет выяснить, что необходимо оптимизировать в первую очередь.
Основные настройки в my.cnf
Местоположение лога:
log_slow_queries = /var/log/mysql/mysql_slow.log
Со скольки секунд выполнения запрос считается медленным, минимальное значений — 1 секунда, по умолчанию 10 секунд:
long_query_time = 10
Если надо логировать запросы, которые не используют индексы, надо добавить строку:
log-queries-not-using-indexes
Если надо вести лог медленных команд, таких как OPTIMIZE TABLE
, ANALYZE TABLE
и ALTER TABLE
:
log-slow-admin-statements
Лог запросов
Лог содержит информацию о подключениях и отключениях клиентов, а также все SQL запросы, которые были получены. Фактически, это временный лог. Обычно лог удаляется автоматически сразу после выполнения всех команд (т.е. как только он стал ненужным). Лог ведётся в соответствии с очередность поступления запросов. Этот лог содержит все запросы к базе данных (независимо от приложений и пользователей). Так что если есть желание (или необходимость) проанализировать, какие необходимы индексы, какие запросы могли бы оптимизированы, то этот лог как раз может помочь в таких целях. Лог полезен не только для случаев, когда необходимо знать, какие запросы выполняются с базой данных, но и в случаях, когда ясно, что возникла ошибка с базой данных, но неизвестно, какой запрос был отправлен к базе данных (например, в случае генерации динамического SQL-а). Рекомендуется защищать лог запросов паролем, так как он может данные также о паролях пользователей.
Основные настройки в my.cnf
Местоположение лога:
log = /var/log/mysql/mysql.log
Наиболее часто использующиеся команды
В отличии от других логов, перезагрузка сервера и команда fluch не инициирует создание нового лога. Но это можно сделать вручную:
shell> mv host_name.log host_name-old.log
shell> mysqladmin flush-logs
shell> mv host_name-old.log backup-directory
Лог репликаций
Здесь логируются изменения, выполненные по инициации сервера репликаций. Как и бинарный лог, состоит из файлов, каждый из которых пронумерован.
Основные настройки в my.cnf
Местоположение лога:
relay-log = /var/log/mysql/mysql-relay-bin.log
Максимальный размер:
max_relay_log_size = 500М
Наиболее часто использующиеся команды
Начать новый файл лога можно только при остановленном дополнительном (slave) сервере:
shell> cat new_relay_log_name.index >> old_relay_log_name.index
shell> mv old_relay_log_name.index new_relay_log_name.index
Команда fluch logs инициирует ротацию лога.
Имея собственный сервер, где установлен mysql, мы иногда замечаем, что место куда-то уходит. После недолгих поисков обнаруживаем в папке /var/lib/mysql (CentOS, RHEL) или в подобной, где установлен mysql файлы mysql-bin.000010, mysql-bin.000001, mysql-bin.000002, размер которых достигает до гигабайта.
Попробуем разобраться с этой ситуацией
Это бинарные логи операций в mysql, которые имеют две функции. Обратимся к документации mysql:
The binary log also contains information about how long each statement took that updated data. The binary log has two important purposes:For replication, the binary log on a master replication server provides a record of the data changes to be sent to slave servers. The master server sends the events contained in its binary log to its slaves, which execute those events to make the same data changes that were made on the master.
Certain data recovery operations require use of the binary log. After a backup has been restored, the events in the binary log that were recorded after the backup was made are re-executed. These events bring databases up to date from the point of the backup.
Т.е. 1 применение — для репликации БД, когда у нас есть несколько баз данных, настроенных на репликацию. И 2 применение — для восстановления данных в случае сбоя.
Меня волновал по крайней мере 2 пункт, поэтому полностью удалять эти логи не стоит. Рассмотрим разные способы:
-
Выставление ротации бинарных логов
Прописать в my.conf (my.cnf) строчку expire_logs_days = 5, которая гласит, что время хранения логов — 5 дней. После выставления этого параметра и перезагрузки mysqld сервера устаревшие файлы были удалены.
-
Ручное удаление
PURGE BINARY LOGS TO ‘mysql-bin.010’;
PURGE BINARY LOGS BEFORE ‘2014-02-02 22:46:26’;
В данном случае мы удаляем конкретный бинарный лог или по дате.
-
Ручное удаление с проверкой используемых бинарных логах на slave серверах
Чтобы репликация успешно завершилась до удаления логов, необходимо проверить — какие данные уже реплицировались на slave сервера
Для просмотра состояния репликации и какой файл еще используется подсмотрим действия в документации.To safely purge binary log files, follow this procedure:
1. On each slave server, use SHOW SLAVE STATUS to check which log file it is reading.
2. Obtain a listing of the binary log files on the master server with SHOW BINARY LOGS.
3. Determine the earliest log file among all the slaves. This is the target file. If all the slaves are up to date, this is the last log file on the list.
4.Make a backup of all the log files you are about to delete. (This step is optional, but always advisable.)
5.Purge all log files up to but not including the target file.Т.е. проверяем состояния репликации на slave серверах, просматриваем бинарные логи на master сервере, определить самый ранний файл, который используется на slave сервере и удалить более старые способом из п.2.
Но обычно, хватает способа из п.1, если не ставить слишком малые значения.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Can I Remove MySQL Binary Log Yes, as long as the data is replicated to Slave server, it’s safe to remove the file. It’s recommend only remove MySQL Binary Log older than 1 month. | |
Besides, if Recovery of data is the main concern, it’s recommend to archive MySQL Binary Log. | |
There are several ways to remove or clean up MySQL Binary Log, it’s not recommend to clean up the file manually, manually means running the remove command. | |
Remove MySQL Binary Log with RESET MASTER Statement Reset Master statement is uses for new database start up during replication for Master and Slave server. This statement can be used to remove all Binary Log. | |
To clean up Binary Log on Master Server | |
«` | |
shell> mysql -u username -p | |
mysql> RESET MASTER; | |
«` | |
To clean up Binary Log on Slave Server | |
«` | |
mysql -u username -p | |
mysql> RESET SLAVE; | |
«` | |
Remove MySQL Binary Log with PURGE BINARY LOGS Statement PURGE BINARY LOGS statement can remove Binary Log base on date or up to a Binary Log sequence number | |
Base on the binary logs example shown above, I would like to remove binary up to mysql-bin.000015 | |
«` | |
shell> mysql -u username -p | |
mysql>PURGE BINARY LOGS TO ‘mysql-bin.000015’; | |
«` | |
Alternatively, you can remove the binary older than a specific date. | |
«` | |
shell> mysql -u username -p | |
mysql> PURGE BINARY LOGS BEFORE ‘2009-05-01 00:00:00’; | |
«` | |
Remove MySQL Binary Log with mysqladmin flush-logs Command Another method is running mysqladmin flush-logs command, it will remove binary logs more than 3 days old. | |
«` | |
shell> mysqladmin -u username -p flush-logs | |
«` | |
Keep MySQL Binary Log for X Days All of the methods above required monitoring on disk usage, to “rotate” and keep the binary logs for x number of day. The option below can be configured on MySQL’s config file, my.cnf | |
«` | |
expire_logs_days = 7 | |
«` | |
Consider turning off MySQL Binary Log if MySQL Replication is not deploy on the database server and recovery is not the main concern. | |
I have additional 15GB if disk space now |