tail -f equivalent for MySQL logging database
Solution 1:
Turn on MySQL binary logging. Then you can use the mysqlbinlog
command to see all data-modifying statements.
Solution 2:
I don't think some people understand the question (or I don't). You don't want to log the queries against the DB; rather a log from an application is going into a DB. If it were a file you could tail the log. How do you tail a table so that when a new row is added it is output?
It shouldn't be to hard to write a simple loop to handle this, assuming you have a unique field that monotonically increases over time (e.g., a sequence number).
current_pos = select max(seq) from table
while true
new_pos = select max(seq) from table
if new_pos > current_pos
select * from table where seq > current_pos
current_pos = new_pos
endif
sleep 1
endwhile
Solution 3:
It appears that many of us don't quite understand your question. What do you mean by "logging database", which isn't a standard MySQL term.
Use the MySQL General Query Log, which logs each statement received from a client.
You can then set log_output = TABLE in your my.cnf . The file will be written to $mysql_data_directory/general_log.CSV . You can tail -f
this file to view queries in real time.
Solution 4:
Here's what I use. Seems the simplest solution, though it's not very efficient:
watch "mysql db_name -e '(SELECT * FROM my_table ORDER BY id DESC LIMIT 10) ORDER BY id ASC;'"