Günlük dosyalarını MySQL'de nasıl görebilirim?


176

Mysql sunucusunun, ne zaman ve hangi sorguların yürütülmesi gibi tüm etkinliklerin kaydını tutan bir günlük dosyası oluşturduğunu okudum.

Biri bana sistemimin neresinde olduğunu söyleyebilir mi? Nasıl okuyabilirim?

Temel olarak, ben farklı giriş [iki tarih arasında yedekleme] ile veritabanını yedeklemek gerekir, bu yüzden burada günlük dosyasını kullanmanız gerektiğini düşünüyorum, bu yüzden bunu yapmak istiyorum ...

Kullanıcı adları ve şifre gibi hassas bilgiler [herhangi bir sorgu gerektiriyorsa] kaydedilebilir, çünkü bu günlük bir şekilde güvenli olması gerektiğini düşünüyorum; böylece güvenli bir şekilde görülebilir, kolayca görülemez mi?

Sisteme kök erişimim var, günlüğü nasıl görebilirim?

/Var/log/mysql.log dosyasını açmaya çalıştığımda boş.

Bu benim yapılandırma dosyam:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Yanıtlar:


164

İşte onları etkinleştirmenin basit bir yolu. MySQL'de genellikle herhangi bir proje geliştirme sırasında en çok ihtiyaç duyulan 3 günlük görmeliyiz.

  • The Error Log. Sunucu çalışırken oluşan hatalar hakkında bilgi içerir (ayrıca sunucu başlatma ve durdurma)

  • The General Query Log. Bu mysqld'in ne yaptığının genel bir kaydıdır (bağlantı, bağlantıyı kes, sorgular)

  • The Slow Query Log. "Yavaş" SQL ifadelerinden oluşur (adıyla belirtildiği gibi).

Varsayılan olarak MYSQL'de hiçbir günlük dosyası etkinleştirilmez. Tüm hatalar syslog ( /var/log/syslog) içinde gösterilir .

Bunları etkinleştirmek için aşağıdaki adımları uygulayın:

1. adım : Bu dosyaya gidin ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) ve bu satırı kaldırın veya yorum yapın.

step2: mysql conf dosyasına ( /etc/mysql/my.cnf) gidin ve aşağıdaki satırları ekleyin

Hata günlüğünü etkinleştirmek için aşağıdakileri ekleyin

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

Genel sorgu günlüğü özelliğini etkinleştirmek için aşağıdakileri ekleyin

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Yavaş Sorgu Günlüğünü etkinleştirmek için aşağıdakileri ekleyin

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

step3: dosyayı kaydedin ve aşağıdaki komutları kullanarak mysql'yi yeniden başlatın

service mysql restart

Günlükleri çalışma zamanında etkinleştirmek için mysql client ( mysql -u root -p) 'a giriş yapın ve şunu verin:

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

Son olarak burada bahsetmek istediğim bir şey, bunu bir blogdan okudum . Teşekkürler. Benim için çalışıyor.

Blogu ziyaret etmek için buraya tıklayın


2
Sanırım bazı şeyleri yazmayı unuttun. Adım 1 eksik ve 'blog' bağlantısı cümle eksik
Athafoud

Merhaba, @Athafoud, lütfen şimdi bağlantıyı bulun.
loyola

3
Bağlantılı blog makalesinde /etc/mysql/conf.d/mysqld_safe_syslog.cnfyalnızca hata günlüğü etkinleştirilecekse değişiklik yapılıyor. Ancak, şu anda yazıldığı gibi bu cevap herhangi bir günlük için öneriyor gibi görünüyor.
Melebius

2
Sunucu sürümüm 5.6.35. Burada Ross Smith II'nin cevabı benim için çalışıyor. Ben sete sahip slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.logve long_query_time = 60[mysqld] altında. Yapılandırmanızla başlamaya çalıştığımda, sunucu başlıyor, ancak yavaş ve yavaş. Gerçekten sürümleri farklı sanırım ve sonraki sürümlerde oracle değişken isimlerini birleştirmek istedi. Ayrıca: IMHO 2 saniye o kadar uzun değil.
JackLeEmmerdeur

1
Bu dosyalardaki izin ne olacak? Birçok durumda günlük dosyalarının oluşturulmadığını gördüm.
MagePsycho

42

Mysql'de sorgu günlüğünü etkinleştirmeniz gerekir.

  1. edit /etc/my.cnf

    [Mysqld]
    günlük = / tmp / mysql.log
    
  2. bilgisayarı veya mysqld hizmetini yeniden başlatın

    hizmet mysqld yeniden başlatma
    
  3. phpmyadmin / mysql / mysql konsolunu kullanan herhangi bir uygulamayı açın ve bir sorgu çalıştırın

  4. cat /tmp/mysql.log (sorguyu görmelisiniz)


önemli değil, sadece bir sorgunun db üzerinden çalıştırıldığından emin olun
danidacar

6
geçersiz yol. /Etc/my.cnf, /etc/mysql/my.cnf olmalıdır
mistik kola

39

MySQL günlükleri aşağıdaki gibi global değişkenler tarafından belirlenir:

  • log_error hata mesajı günlüğü için;
  • general_log_filegenel sorgu günlük dosyası için (tarafından etkinleştirildiyse general_log);
  • slow_query_log_fileyavaş sorgu günlük dosyası için (tarafından etkinleştirildiyse slow_query_log);

Ayarları ve konumlarını görmek için bu kabuk komutunu çalıştırın:

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

Hata günlüğü değerini yazdırmak için terminalde şu komutu çalıştırın:

mysql -e "SELECT @@GLOBAL.log_error"

Hata günlüğü dosyasının içeriğini gerçek zamanlı olarak okumak için şunu çalıştırın:

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

Not: İsabet Control- Cbittiğinde

Genel günlük etkinleştirildiğinde şunları deneyin:

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

mysqlŞifre erişimiyle kullanmak için, ekleyin -pveya -pMYPASSparametre ekleyin . Hatırlanacağız tutmak için, sizin de yapılandırabilirsiniz ~/.my.cnf, mesela

[client]
user=root
password=root

Yani bir dahaki sefere hatırlanacak.


1
Veya bir parola girmeniz gerekiyorsa şunu deneyin: mysql -p -se "DEĞİŞKENLERİ GÖSTER" | grep -e log_error -e general_log -e slow_query_log
Paul Chernoch

9

Benim (LAMP yüklü) / etc / mysql /my.cnf dosyasında buldum, [mysqld] bölümünde satırları yorumladı:

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Bu dosyayı terminal ile süper kullanıcı olarak açmak zorunda kaldım:

sudo geany /etc/mysql/my.cnf

(Gedit veya VI yerine Geany kullanmayı tercih ederim, önemli değil)

Ben sadece onları uncommented & dosyayı kaydetmek sonra mysql ile yeniden

sudo service mysql restart

Birkaç sorguyu çalıştırın, yukarıdaki dosyayı açın (/var/log/mysql/mysql.log) ve günlük oradaydı :)


sizin için işe yarayabilir, ancak benim için değil, "Dizin Bozuldu" gibi büyük istisnalar bile kaydedilmez. Yalnızca başlatma ve kapatma sorunları.
user3338098

8

MySQL referans kılavuzundan:

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

/var/lib/mysqlKlasörü kontrol edin .


1
ancak mysql klasörünü açamıyorum. günlük dosyasının yolu /var/log/mysql/mysql.log olduğunu düşünüyorum ama açamıyorum, ne yapmalıyım?
Arjun

2
nasıl kendimi kök yapmak, ben im sahibi düşünüyorum, ben sunucu yüklemek, ben şifre ayarlamak, bu yüzden sahibi olmalı, yine de benim için kilitli, nasıl açabilirim?
Arjun

1
Bu dizine cd zorladım (daha sonra sildiğim kök kullanıcı oluşturmak zorunda kaldım), ama bu dosyaları gördüğümde şifreli olduklarını düşündüm :) Yani bu iyi bir yol değil.
Hat

kullanmak sudo -smysql klasörüne gidin deneyin.
Rashedul İslam

MySQL kılavuzu çok sayıda tutarsızlık ile doludur, her iki şekilde de pencerelerde böyle bir dizin yoktur.
user3338098

3

Loyola'nın cevabını tamamlamak için MySQL 5.1'den itibaren log_slow_querieskullanımdan kaldırıldığını ve onunla değiştirildiğini belirtmek gerekir.slow-query-log

Kullanılması log_slow_queriesAmacınızı olur service mysql restartya service mysql startbaşarısız


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
Stackoverflow'a hoş geldiniz. Lütfen cevabınızdaki kodun OP sorusu ile nasıl ilişkili olduğuna dair daha fazla açıklama yapmayı düşünün. Ayrıca, uygun biçimlendirmeyi sağlamak için kodun 4 boşlukla girintili olması gerekir.
Politank-Z

1

Yukarıdaki yanıtlara ek olarak, komut dosyanızı değiştirerek conf dosyanızı el ile düzenlemek yerine mysqld günlük kaydı işlemine geçebilirsiniz. Örneğin, genel günlük kaydını etkinleştirmek ve bir dosya belirtmek için:

mysqld --general-log --general-log-file=/var/log/mysql.general.log

Yukarıdaki diğer yanıtları onayladığınızda mysqld --help --verbose, conf dosyasındaki değerleri verir (böylece general-log komut satırı seçenekleriyle çalışmak FALSE olur); oysa mysql -se "SHOW VARIABLES" | grep -e log_error -e general_logverir:

general_log     ON
general_log_file        /var/log/mysql.general.log

Hata günlüğü için biraz daha kompakt sözdizimi kullanın:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.