/var/log/mysql - Can I delete it?

Question: Is it safe to delete the files in /var/log/mysql ? Also, is there some way I can disable logging so that this folder does not get filled up again?

Explanation:

Last night I started running a Perl script to process the data contained in some files, and then do a series of INSERTs to put them in a MySQL database. When I checked on it this morning, I found that it was very close to being done, but had locked up. I had trouble doing anything at all, actually, until I realized that 100% of the disk space on my hard drive had now been used. I went to investigate, and I quickly realized that my /var/log/mysql folder was over 120GB!

My intuition tells me that this folder is just used to store logs of what MySQL is doing. However, I have no need for these logs, and seeing as they are (unnecessarily) using over 120GB of my hard drive space, I would like to delete everything in that folder. But I’m still fairly new to Linux, and I’m not sure if this is safe. Can I just delete these files? And also, to prevent this from happening again, is there some way I can disable MySQL from creating such enormous log files?

a) Yes, it is safe to delete it.

b) Please find my.cnf (could be located in /etc/ oder /usr/local/etc/), search for a line reading

log = /var/log/mysql.log

and remove it.

I wouldn’t disable all logging. Logs will save your life one day. Instead you should route the offending log to dev/null. It will simply cease to exists if you do that.

		 				log = /dev/null

Well, I deleted every file in /var/log/mysql (without deleting the folder itself), and I commented out the line about logging to that folder in my.cnf. And that appears to have broken MySQL, because try as I might it will no longer start. I’m going to be re-installing Linux altogether when my new hard drive arrives in the mail, which will fix the problem, but I suspect that there was, in fact, some critical file stored in that /var/log/mysql directory that I unwittingly deleted causing it to break.

And tbase, I had no intention of disabling logging forever; I only wanted to turn it off while I’m doing this initial massive import, and then when that’s finished, turn it back on. I assume that’s an OK thing to do?

did you restart the mysql instance?

I tried to several times; I even physically restarted the machine itself several times. Everytime I press “start” it gives me errors. I’m not too worried, as I’ll be wiping everything clean with the new hard drive anyway. But this does teach me that it isn’t always safe just to delete things.

It ist very odd to have a FOLDER in /var/log.

Usually you will find misc text files containing the logs (like /var/log/messages). Could it be, that for some reason the database itself was placed there?

No idea. I was just using the default installation with Ubuntu 7.04 Server Edition.

It is not unusual at all. Many distros separate logs into folders…

Paste your my.cnf here, the mySQL error log will show why it’s not starting but for the log to be that size I would suspect you are using binary logging (bin-log in your cnf).

Well I reformatted/reinstalled Linux, so of course MySQL is working once again. But just for the curious, here’s my /etc/mysql/my.cnf file anyway…

#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# 
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port		= 3306
socket		= /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket		= /var/run/mysqld/mysqld.sock
nice		= 0

[mysqld]
#
# * Basic Settings
#
user		= mysql
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
port		= 3306
basedir		= /usr
datadir		= /var/lib/mysql
tmpdir		= /tmp
language	= /usr/share/mysql/english
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address		= 127.0.0.1
#
# * Fine Tuning
#
key_buffer		= 16M
max_allowed_packet	= 16M
thread_stack		= 128K
thread_cache_size	= 8
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10
#
# * Query Cache Configuration
#
query_cache_limit       = 1M
query_cache_size        = 16M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
#log		= /var/log/mysql/mysql.log
#
# Error logging goes to syslog. This is a Debian improvement :)
#
# Here you can see queries with especially long duration
#log_slow_queries	= /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
#server-id		= 1
log_bin			= /var/log/mysql/mysql-bin.log
# WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian!
expire_logs_days	= 10
max_binlog_size         = 100M
#binlog_do_db		= include_database_name
#binlog_ignore_db	= include_database_name
#
# * BerkeleyDB
#
# Using BerkeleyDB is now discouraged as its support will cease in 5.1.12.
skip-bdb
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
# You might want to disable InnoDB to shrink the mysqld process by circa 100MB.
#skip-innodb
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem



[mysqldump]
quick
quote-names
max_allowed_packet	= 16M

[mysql]
#no-auto-rehash	# faster start of mysql but no tab completition

[isamchk]
key_buffer		= 16M

#
# * NDB Cluster
#
# See /usr/share/doc/mysql-server-*/README.Debian for more information.
#
# The following configuration is read by the NDB Data Nodes (ndbd processes)
# not from the NDB Management Nodes (ndb_mgmd processes).
#
# [MYSQL_CLUSTER]
# ndb-connectstring=127.0.0.1


#
# * IMPORTANT: Additional settings that can override those from this file!
#
!includedir /etc/mysql/conf.d/

So as you can see the “log” variable was already disabled by default, but “log_bin” was not. This time around I’m going to try my import with both disabled, and then re-enable “log_bin” afterwards.

If you don’t do replication, I don’t think you even need to turn on log_bin