it-swarm.asia

OS X'te MySQL girişim nerede?

/ Var/log ve/usr/local/mysql'i kontrol ettim ve günlüğü bulamıyorum. Bir php işlevi ile veritabanı bağlantısı kuran bir hatayı gidermeye çalışıyorum.

74
Tony

Chealion'un belirttiği gibi, mysql'nizin kurulmuş olabileceği birkaç yol vardır. Her biri veri yönünüzü ve/veya günlüklerinizi farklı konumlara yerleştirir. Aşağıdaki komut size (ve bize) nereye bakacağınızı iyi bir şekilde gösterecektir.

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

Bu komutun sonucunu buraya gönderebilir misiniz lütfen? Benimki şöyle:

_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

Bundan sonra benim datadir /opt/local/var/db/mysql Olduğunu görebilirsiniz (çünkü MacPorts üzerinden yükledim). Bu dersi biraz daha ele alalım ...

İlk satırdan, arka plan programımın /opt/local/libexec/mysqld Olduğunu görebilirsiniz. mysqld tüm komut satırı seçeneklerinin bir listesini (ve işte önemli/değerli kısmı!) Ve ardından mysqld'i başlatırsanız kullanılacak değerleri almak için --verbose --help İle çağrılabilir. sadece yardım çıktısını kontrol etmek yerine. Değerler, derleme zamanı yapılandırmanızın, my.cnf Dosyanızın ve tüm komut satırı seçeneklerinin sonucudur. Günlük dosyalarımın tam olarak nerede olduğunu bulmak için bu özellikten yararlanabilirim:

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

Benimki şöyle:

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 VE BEHOLD! dünyadaki tüm tavsiyeler bana yardımcı olmayacaktı çünkü günlük dosyam tamamen standart dışı bir yerde tutuluyor! /tmp/ İçinde benimkini saklıyorum çünkü dizüstü bilgisayarımda, yeniden başlatma sırasında tüm günlüklerimi kaybetmeyi umursamıyorum (aslında tercih ediyorum).

Hepsini bir araya getirelim ve sizi bir oneliner yapalım:

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

Bu komutu çalıştırın ve çalışan mysql örneğiniz için tüm günlüklerin bir listesini alacaksınız.

Zevk almak!

Bu Bash-Fu, Açık Kaynak ile ilgili her şeye olan bağlılığımla size ücretsiz getirdi.

94
Bruno Bronosky

3 tip MySQL/MariaDB günlüğü vardır:

Bu Kabuk komutuyla yukarıdaki günlüklerin ayarlarını ve konumunu kontrol edin:

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

Varsayılan olarak günlükler veri dizininizde saklanır, bu nedenle bu Shell komutuyla konumu kontrol edin:

mysql -se "SELECT @@datadir"

Hata günlüğünüzü görüntülemek için şunları çalıştırabilirsiniz:

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

Genel günlüğü etkinleştirdiyseniz görüntülemek için şunu çalıştırın:

Sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")
13
kenorb

Bu bilgiyi bulmanın başka bir yolu lsof kullanmaktır.

  1. mysql PID'sini bulmak için Etkinlik İzleyicisi'ni kullanın veya ps -ef | grep mysqld bulmak için.

  2. Sudo lsof -p PID_OF_MYSQLD ve MySQL'in hangi dosyaları açtığını görün.

10
tobym

Bunu bulmak için kendime biraz zaman ayırdım ... şu konumu deneyin: '

Sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
6
Mark Shust

Varsayılan olarak, tüm günlük dosyaları mysqld veri dizininde oluşturulur.

Kaynak: MySQL Belgeleri

/ Usr/local/mysql/data/içindeki ikili günlük dosyalarını okumak için mysqlbinlog kullanabilirsiniz (yüklememde hepsi ikili değildi). Bazı hatalar basitçe stderr'a yönlendirilir, bu nedenle /var/log/system.log de.

3
Chealion

Bu günlüğü tutan klasöre Sudo kullanılmadan erişilemeyebilir:

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

Büyük bir günlük dosyası bulursanız ve Time Machine kullanıyorsanız, Sunucu Hatası'nda Time Machine ne yapıyor? okumak isteyebilirsiniz.

0
Arjan

Varsayılan olarak, tüm günlük dosyaları mysqld veri dizininde oluşturulur. Ne yazık ki, birçok kişi günlük dosyalarını (ve programlarını) tipik konumlarına koymaz. Onlardan biriyim!

Ben denedim MySQL için Navicat kadar bu rutin MySQL ile kendim geçti. Daha sonra Navicat Premium sürümüne geçtim. Her ikisinin de kapsamlı bir listede tüm sunucu değişkenlerini içeren bir sekme içeren bir İzleme aracı vardır. İşte log_error sunucu değişkenine sahip bir ekran görüntüsü:

Navicat Sunucu İzleme Aracı'ndaki log_error sunucu değişkeni

log_error server variable in Navicat Server Monitoring Tool

Değişkenleri doğrudan listede de ayarlayabilirsiniz.

Şerefe!

0
Rob Gravelle