/ 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.
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.
3 tip MySQL/MariaDB günlüğü vardır:
log_error
hata mesajı günlüğü için;general_log_file
genel sorgu günlük dosyası için (general_log
);slow_query_log_file
yavaş sorgu günlük dosyası için (slow_query_log
);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)")
Bu bilgiyi bulmanın başka bir yolu lsof
kullanmaktır.
mysql
PID'sini bulmak için Etkinlik İzleyicisi'ni kullanın veya ps -ef | grep mysqld
bulmak için.
Sudo lsof -p PID_OF_MYSQLD
ve MySQL'in hangi dosyaları açtığını görün.
Bunu bulmak için kendime biraz zaman ayırdım ... şu konumu deneyin: '
Sudo vi /usr/local/mysql/data/YOUR-USERNAME.local.err
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.
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.
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
Değişkenleri doğrudan listede de ayarlayabilirsiniz.
Şerefe!