I‘m using Red Hat Enterprise Linux server version 4.0+ and MySQL version 4.20+. Monit has recently notified me following error:
mysqld’ failed to start.
A detailed log from /var/log/mysqld.log file:
/usr/libexec/mysqld: Can’t create/write to file ‘/tmp/ibCfJwf1’ (Errcode: 13)
070420 10:07:58 InnoDB: Error: unable to create temporary file; errno: 13
070420 10:07:58 [ERROR] Can’t init databases
070420 10:07:58 [ERROR] Aborting
070420 10:07:58 [Note] /usr/libexec/mysqld: Shutdown complete
/etc/init.d/mysql start command returned following output:
Initializing MySQL database: [ OK ]
Timeout error occurred trying to start MySQL Daemon.
Starting MySQL: [FAILED]
How do I fix this problem on Linux or Unix-like systems?
This error means, MySQL server is not able to access your /tmp directory, to write and create temporary files. Make sure /tmp directory is owned by root user and sticky bit is set on /tmp directory. Type the following commands to fix this error. You must be login as root user and type:
# chown root:root /tmp
# chmod 1777 /tmp
## test it ##
# /etc/init.d/mysqld start
Now, your mysql server should start without a problem.
A note about SELinux and AppArmor security policies
If you are using SELinux or AppArmor with customized data directory for database, you need to modify polices to allow MySQL to read and write to the data directory.