Gdzie jest mój dziennik MySQL w systemie OS X?

74

Sprawdziłem / var / log i / usr / local / mysql i nie mogę znaleźć dziennika. Próbuję rozwiązać problem z nawiązaniem połączenia z bazą danych za pomocą funkcji php.

Tony
źródło

Odpowiedzi:

95

Jak wspomniano Chealion, istnieje kilka sposobów na zainstalowanie mysql. Każdy z nich umieści katalog danych i / lub dzienniki w różnych lokalizacjach. Poniższe polecenie da ci (i nam) dobrą wskazówkę, gdzie szukać.

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

Czy możesz tutaj opublikować wynik tego polecenia? Mój wygląda następująco:

_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

Z tego widać, że mój datadir to /opt/local/var/db/mysql(ponieważ zainstalowałem przez MacPorts). Weźmy tę lekcję trochę dalej ...

Z pierwszego wiersza widać, że jest mój demon /opt/local/libexec/mysqld. mysqldMoże być wywołana --verbose --help, aby uzyskać listę wszystkich opcji wiersza poleceń (i tu jest ważny / wartościowy część!), A następnie przez wartości, które będą stosowane, jeśli zostały uruchomienie mysqld zamiast po prostu sprawdzając wyjście pomocy. Wartości są wynikiem konfiguracji czasu kompilacji, my.cnfpliku i wszystkich opcji wiersza poleceń. Mogę wykorzystać tę funkcję DOKŁADNIE, aby dowiedzieć się, gdzie są moje pliki dziennika, na przykład:

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

Mój wygląda następująco:

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! wszystkie porady na świecie mi nie pomogły, ponieważ mój plik dziennika jest przechowywany w zupełnie niestandardowej lokalizacji! Trzymam mój, /tmp/ponieważ na moim laptopie nie dbam (właściwie wolę), aby stracić wszystkie logi przy ponownym uruchomieniu.

Złóżmy to wszystko razem i sprawmy, że będziesz oneliner:

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

Wykonaj to jedno polecenie, a otrzymasz listę wszystkich dzienników dla działającej instancji mysql.

Cieszyć się!

Ten Bash-Fu przyniósł ci za darmo poprzez moje zaangażowanie we wszystkie rzeczy Open Source.

Bruno Bronosky
źródło
2
mysqladmin variablesjest teraz preferowanym poleceniem do pobierania bieżącej wartości zamiast bezpośredniego użyciamysqld
John Cummings
@JohnCummings, Source?
Pacerier
Dzisiaj otrzymałem głos negatywny bez komentarzy. Zachowuję wszystkie moje odpowiedzi. Nawet te, które mają 10 lat. Nikomu nie pomagasz, głosując w dół. Zostaw komentarz!
Bruno Bronosky
@ jm3 chcesz opracować? Nie mam już dostępu do MacOS.
Bruno Bronosky,
12

Istnieją 3 typy dzienników MySQL / MariaDB:

  • log_error dla dziennika komunikatów o błędach;
  • general_log_filedla ogólnego pliku dziennika zapytań (jeśli włączony przez general_log);
  • slow_query_log_filedla pliku dziennika powolnego zapytania (jeśli włączone przez slow_query_log);

Sprawdź ustawienia i lokalizację powyższych dzienników za pomocą tego polecenia powłoki:

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

Domyślnie dzienniki są przechowywane w katalogu danych, więc sprawdź lokalizację za pomocą tego polecenia powłoki:

mysql -se "SELECT @@datadir"

Aby wyświetlić dziennik błędów, możesz uruchomić:

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

Jeśli masz włączony dziennik ogólny, aby go wyświetlić, uruchom:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")
kenorb
źródło
10

Innym sposobem na znalezienie tych informacji jest użycie lsof.

  1. Użyj Monitora aktywności, aby znaleźć PID mysql, lub użyj, ps -ef | grep mysqldaby go znaleźć.

  2. sudo lsof -p PID_OF_MYSQLD i zobacz, które pliki MySQL ma otwarte.

tobym
źródło
6

Zajęło mi to trochę czasu, aby to znaleźć ... wypróbuj tę lokalizację: '

sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
Mark Shust
źródło
3
Mój był w/usr/local/var/mysql/<USERNAME>.local.err
jonnysamps
3

Domyślnie wszystkie pliki dziennika są tworzone w katalogu danych mysqld.

Źródło: Dokumentacja MySQL

Możesz użyć mysqlbinlogdo odczytu binarnych plików dziennika w / usr / local / mysql / data / (w mojej instalacji nie wszystkie były binarne). Niektóre błędy są po prostu kierowane do stderr, więc możesz również chcieć to sprawdzić /var/log/system.log.

Chealion
źródło
nie mam katalogu danych w katalogu mysql. przejrzałem katalog / usr / local / mysql / i nie mogę znaleźć dziennika. nie ma sposobu, aby wyświetlić konfigurację mysql? jak phpinfo ()
Tony,
Jak zainstalowałeś MySQL? Preinstalowany MySQL z systemem Mac OS X Server, MacPorts czy oficjalny pakiet MySQL?
Chealion
0

Folder zawierający ten dziennik może być niedostępny dla Ciebie bez użycia sudo:

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

Jeśli zdarzy ci się znaleźć duży plik dziennika i podczas korzystania z Time Machine, możesz przeczytać Co robi Time Machine? na błąd serwera.

Arjan
źródło
nie mam katalogu danych w katalogu / usr / local / mysql
Tony,
0

Domyślnie wszystkie pliki dziennika są tworzone w katalogu danych mysqld. Niestety wiele osób nie umieszcza plików dziennika (i programów) w typowych lokalizacjach. Jestem jednym z nich!

Sam przeszedłem tę procedurę z MySQL, dopóki nie wypróbowałem Navicat dla MySQL . Później zaktualizowałem do Navicat Premium . Oba mają narzędzie do monitorowania, które zawiera kartę ze wszystkimi zmiennymi serwera na jednej obszernej liście. Oto zrzut ekranu ze zmienną serwera log_error:

log_error zmienna serwera w Navicat Server Monitoring Tool

log_error zmienna serwera w Navicat Server Monitoring Tool

Możesz także ustawić zmienne bezpośrednio na liście.

Twoje zdrowie!

Rob Gravelle
źródło
-2

/Library/Logs/MySQL.log

morgant
źródło
Widzę tam inne dzienniki, ale nie mysql
Tony,
Jaka jest wersja Mac OS X Server? Ogólnie rzecz biorąc, będziesz chciał zajrzeć do katalogu / var / log / & / Library / Logs / pod Mac OS X Server. Bardziej konkretnie na ten problem, patrz /var/log/system.log, może być coś przydatnego w / var / mysql (jak pliki dziennika .err), ale ja (w domyślnej konfiguracji Leopard Server) mam również wspomniane / Biblioteka / Logi / MySQL.log. Czy próbujesz połączyć się przez gniazdo lub połączenie sieciowe? Jeśli to drugie, czy „Włączono połączenia sieciowe” w Administratorze serwera (w systemie Leopard; W Tiger była to osobna aplikacja w / Aplikacje / Narzędzia)?
morgant