I have one free ticket to give away to RailsConf next week in Baltimore! Post a comment to win, and if you aren’t the winner, I’ll give you a discount code for Percona Live as a consolation prize.
Here’s the catch: you have to find at least one thing wrong with the following typical logrotate configuration for MySQL. This should be easy even if you’re not a MySQL expert
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# This logname can be set in /etc/my.cnf # by setting the variable "err-log" # in the [safe_mysqld] section as follows: # # [safe_mysqld] # err-log=/var/lib/mysql/mysqld.log # # If the root user has a password you have to create a # /root/.my.cnf configuration file with the following # content: # # [mysqladmin] # password = <secret> # user= root # # where "<secret>" is the password. # # ATTENTION: This /root/.my.cnf should be readable ONLY # for root ! /var/lib/mysql/mysqld.log { create 600 mysql mysql notifempty daily rotate 3 missingok compress postrotate # just if mysqld is really running if test -x /usr/bin/mysqladmin && /usr/bin/mysqladmin ping &>/dev/null then /usr/bin/mysqladmin flush-logs fi endscript } |
Everything. Finding things wrong with it is like shooting fish in a barrel. I’ll blog about it someday.
Baron,
What are the correct answers to the questions? What is busted with syslog logging?
Hmm. If I remember logrotate correctly, the compress gets executed before the flush-logs; so you run the risk of adding lines to an already-compressed logfile – and maybe lines added *during* compression will be lost depending on the compression utility’s behaviour.
Not withstanding you should never roll your log file. See my views at http://ronaldbradford.com/blog/the-correct-approach-to-rolling-mysql-logs-2010-02-22/.
aron perhaps you should expand on your post to the readers about issues with how to roll the slow query log, and about changes in log file writing in MySQL 5.5 that affects historical processes.
When you run “flush logs”, the mysqld.log will be rename to mysqld.log-old
Sweet/thanks! Should I find you guys down here tomorrow or Tu?
Vitaly, I either confused you, or you are extremely clever and funny
I’ll write a blog post sometime about what’s wrong with the default logrotate scripts for MySQL. The free ticket goes to John!
* It’s a bit harder to ‘rotate’ mysql databases then a text files;
* InnoDB row will not exceed 8000 bytes under some conditions;
* MySQL is an additional point of failure;
Is it enough?
For bonus points (but no bonus tickets), tell me what’s busted about logging to syslog with MySQL, too!
You don’t want the “create 600 mysql mysql” line — it’s commented out in the default config.
But the real problem is you’re logging to a file and not syslog