[mysql] How can I view live MySQL queries?

strace

The quickest way to see live MySQL/MariaDB queries is to use debugger. On Linux you can use strace, for example:

sudo strace -e trace=read,write -s 2000 -fp $(pgrep -nf mysql) 2>&1

Since there are lot of escaped characters, you may format strace's output by piping (just add | between these two one-liners) above into the following command:

grep --line-buffered -o '".\+[^"]"' | grep --line-buffered -o '[^"]*[^"]' | while read -r line; do printf "%b" $line; done | tr "\r\n" "\275\276" | tr -d "[:cntrl:]" | tr "\275\276" "\r\n"

So you should see fairly clean SQL queries with no-time, without touching configuration files.

Obviously this won't replace the standard way of enabling logs, which is described below (which involves reloading the SQL server).

dtrace

Use MySQL probes to view the live MySQL queries without touching the server. Example script:

#!/usr/sbin/dtrace -q
pid$target::*mysql_parse*:entry /* This probe is fired when the execution enters mysql_parse */
{
     printf("Query: %s\n", copyinstr(arg1));
}

Save above script to a file (like watch.d), and run:

pfexec dtrace -s watch.d -p $(pgrep -x mysqld)

Learn more: Getting started with DTracing MySQL

Gibbs MySQL Spyglass

See this answer.

Logs

Here are the steps useful for development proposes.

Add these lines into your ~/.my.cnf or global my.cnf:

[mysqld]
general_log=1
general_log_file=/tmp/mysqld.log

Paths: /var/log/mysqld.log or /usr/local/var/log/mysqld.log may also work depending on your file permissions.

then restart your MySQL/MariaDB by (prefix with sudo if necessary):

killall -HUP mysqld

Then check your logs:

tail -f /tmp/mysqld.log

After finish, change general_log to 0 (so you can use it in future), then remove the file and restart SQL server again: killall -HUP mysqld.