88

I checked /var/log and /usr/local/mysql and i can't seem to find the log. I am trying to troubleshoot an error establishing a database connection with a php function.

0

11 Answers 11

105

As Chealion mentioned, there are several ways that your mysql could have been installed. Each of which will place your data dir and/or logs in different locations. The following command will give you (and us) a good indication of where to look.

ps auxww|grep [m]ysqld # Putting brackets around the first char is a `grep`+`ps` trick # to keep it from matching its own process. # Note: For zsh compatibility put quotes around the grep regex 

Can you post the result of that command here please? Mine looks like this:

_mysql 101 0.0 0.3 112104 13268 ?? S 12:30AM 0:13.20 /opt/local/libexec/mysqld --basedir=/opt/local --datadir=/opt/local/var/db/mysql --user=mysql --pid-file=/opt/local/var/db/mysql/rbronosky-mbp.pid root 76 0.0 0.0 600172 688 ?? S 12:30AM 0:00.02 /bin/sh /opt/local/lib/mysql/bin/mysqld_safe --datadir=/opt/local/var/db/mysql --pid-file=/opt/local/var/db/mysql/rbronosky-mbp.pid 

From that you can see that my datadir is /opt/local/var/db/mysql (because I installed via MacPorts). Let's take this lesson a bit further...

From the first line you can see the my daemon is /opt/local/libexec/mysqld. The mysqld can be called with --verbose --help to get a list of all command line options (and here is the important/valuable part!) followed by the values that would be used if you were launching mysqld instead of just checking the help output. The values are the result of your compile time configuration, my.cnf file, and any command line options. I can exploit this feature to find out EXACTLY where my log files are, like so:

/opt/local/libexec/mysqld --verbose --help|grep '^log' 

Mine looks like this:

log /tmp/mysql.log log-bin /tmp/mysql-bin log-bin-index (No default value) log-bin-trust-function-creators FALSE log-bin-trust-routine-creators FALSE log-error /tmp/mysql.error.log log-isam myisam.log log-queries-not-using-indexes FALSE log-short-format FALSE log-slave-updates FALSE log-slow-admin-statements FALSE log-slow-queries (No default value) log-tc tc.log log-tc-size 24576 log-update (No default value) log-warnings 1 

LO AND BEHOLD! all of the advice in the world was not going to help me because my log file is kept in a completely non-standard location! I keep mine in /tmp/ because on my laptop, I don't care (actually I prefer) to loose all of my logs on reboot.

Let's put it all together and make you a oneliner:

$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* \([^ ]*mysqld\) .*/\1/;p;}') --verbose --help|grep '^log' 

Execute that one command and you will get a list of all of the logs for your running instance of mysql.

Enjoy!

This Bash-Fu brought to you for free by my commitment to all things Open Source.

5
  • 3
    mysqladmin variables is now the preferred command for getting the current value instead of directly using mysqld Commented May 2, 2017 at 15:46
  • @JohnCummings, Source? Commented Nov 1, 2017 at 18:00
  • 1
    Today I got a down vote with no comments. I maintain all my answers. Even the ones that are 10 years old. You're not helping anyone by down voting. Leave a comment! Commented Jun 29, 2018 at 17:41
  • @jm3 care to elaborate? I no longer have access to MacOS. Commented Sep 27, 2018 at 15:37
  • 1
    upvoted for all the efforts and the oneliner command Commented Apr 13, 2021 at 9:09
16

There are 3 types of MySQL/MariaDB logs:

Check the settings and location of above logs by this shell command:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log 

By default the logs are stored in your data dir, so check location by this shell command:

mysql -se "SELECT @@datadir" 

To view your error log, you can run:

sudo tail -f $(mysql -Nse "SELECT @@log_error") 

If you've general log enabled, to view it, run:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)") 
11

Another way to find this information is to use lsof.

  1. Use Activity Monitor to find the PID of mysql, or use ps -ef | grep mysqld to find it.

  2. sudo lsof -p PID_OF_MYSQLD and see which files MySQL has open.

1
  • this is the only method that worked for me. Mysql totally ignores what is in my 'my.cnf' files. Commented Dec 8, 2020 at 0:56
9

Took myself a while to find this... try this location:'

sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err 
1
  • 5
    Mine was in /usr/local/var/mysql/<USERNAME>.local.err Commented Aug 31, 2018 at 17:53
4

By default, all log files are created in the mysqld data directory.

Source: MySQL Documentation

You can use mysqlbinlog to read the binary log files in /usr/local/mysql/data/ (in my installation not all were binary). Some errors are simply directed to stderr so you may want to check /var/log/system.log as well.

2
  • i don't have a data directory in the mysql dir. i have looked all over the /usr/local/mysql/ directory and can't find the log. there is no way to view the mysql configuration? like a phpinfo() Commented Jul 19, 2009 at 20:40
  • How did you install MySQL? The pre-installed MySQL with Mac OS X Server, MacPorts, or the official MySQL package? Commented Jul 19, 2009 at 23:29
0

The folder holding that log may not be accessible to you without using sudo:

sudo ls -l "/usr/local/mysql-5.0.51a-osx10.5-x86" [..] drwxr-x--- 4 _mysql wheel 136 Jul 10 23:06 data 

If you happen to find a large log file and when you're using Time Machine, you may want to read What is Time Machine doing? on Server Fault.

1
  • i have no data dir in /usr/local/mysql Commented Jul 19, 2009 at 21:56
0

By default, all log files are created in the mysqld data directory. Unfortunately, many people don't put their log files (and programs) in their typical locations. I'm one of them!

I went through this routine myself with MySQL until I tried out Navicat for MySQL. Later I upgraded to Navicat Premium. Both have a Monitoring tool that contains a tab with all of the server variables in one comprehensive list. Here's a screenshot with the log_error server variable:

log_error server variable in Navicat Server Monitoring Tool

log_error server variable in Navicat Server Monitoring Tool

You can also set the variables right there in the list.

Cheers!

0
  1. Open System Preferences

enter image description here

  1. Select MySQL -> Configuration

Your Path to Error Log should be visible:

enter image description here

0

Try to locate your mysql (or mariadb) log folder by this command:

locate local.err 
0

The approved answer from Bruno didn't work for me on MacOS Monterey, and in any case, it won't help you if your problem is that there is no mysqld process because it failed during startup.

However, following some of the others here enabled me to find the error log:

$ ls -l /usr/local/mysql lrwxr-xr-x 1 root wheel 26 18 Jul 13:39 /usr/local/mysql -> mysql-8.0.29-macos12-arm64 $ sudo ls -l /usr/local/mysql-8.0.29-macos12-arm64/data|grep err -rw-r----- 1 _mysql _mysql 3308 18 Jul 15:01 mysqld.local.err 
-2

/Library/Logs/MySQL.log

2
  • i see other logs in there, but not mysql Commented Jul 19, 2009 at 20:41
  • What version of Mac OS X Server is this? In general, you'll want to look in /var/log/ & /Library/Logs/ under Mac OS X Server. More specific to this issue, watch /var/log/system.log, there may be something of use in /var/mysql (like the .err log files), but I (on Leopard Server's default config) also have the aforementioned /Library/Logs/MySQL.log. Are you trying to connect via the socket or a network connection? If the latter, did you "Enable network connections" in Server Admin (on Leopard; In Tiger it was a separate app in /Applications/Utilities)? Commented Jul 20, 2009 at 16:37

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.