Mysql – the.cnf parameters to enable binary logging theSQL 4.1.20

MySQL

I'm having problems enabling binary logging on mySQL 4.1.20

After adding

log-bin=/var/log/mysql/tts_db

to my.cnf, mysql fails to restart, with the following error in mysqld.log:

091112 03:36:37  mysqld started
/usr/libexec/mysqld: File '/var/log/mysql/tts_db.000001' not found (Errcode: 13)
091112  3:36:37 [ERROR] Could not use /var/log/mysql/tts_db for logging (error 13). 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.
091112  3:36:37 [ERROR] Aborting

091112  3:36:37 [Note] /usr/libexec/mysqld: Shutdown complete

091112 03:36:37  mysqld ended

Whilst looking at it to ask this question, I may have stumbled on the answer, but I'll check anyway – I can't restart the server until tomorrow morning.
The mysql directory (/var/log/mysql) is owned by root. Is this problem because the mysql user that the server runs as doesn't have the correct privileges for creating a file in the directory?

Here's the complete my.cnf ( i know the log-bin is commented out – this is the current one)

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

set-variable=local-infile=0

set-variable = max_connections=130

long_query_time = 1
log-slow-queries =/var/log/mysql/mysql-slow.log

# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

skip-bdb

# We can't skip networking because the phpList server is on a different server.
#skip-networking
set-variable = innodb_thread_concurrency=2

table_cache = 512
query_cache_size = 20M
key_buffer_size = 64M
thread_cache_size = 10
tmp_table_size = 48M
# Added 11 Nov 2009 to enable binary logging for replication
server-id = 1
#log-bin=/var/log/mysql/tts_db
#expire-logs-days = 2
#max_binlog_size = 500M
#binlog-do-db=tts_db

#==============================================================================
# mysql.server section
#==============================================================================
#
[mysql.server]
user=mysql
basedir=/var/lib

#==============================================================================
# mysqd_safe section
#==============================================================================
#
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
skip-bdb

set-variable = innodb_thread_concurrency=2

table_cache = 512
query_cache_size = 20M
key_buffer_size = 64M
thread_cache_size = 10
tmp_table_size = 48M

open-files-limit = 4096

Best Answer

In general on Linux systems, an Errno 13 means Permissions Denied or Access Denied.

What's the output of

# ls -ld /var/log/mysql
# ls -l /var/log/mysql

Does this match with your MySQL user?

If not, suggested solution (providing mysql is your mysql user and mysql is your group):

chown -R mysql:mysql /var/log/mysql