Bagaimana cara melihat file log di MySQL?


176

Saya telah membaca bahwa server Mysql membuat file log di mana ia menyimpan catatan semua aktivitas - seperti kapan dan apa yang dieksekusi query.

Adakah yang bisa memberitahu saya di mana itu ada di sistem saya? Bagaimana saya bisa membacanya?

Pada dasarnya, saya perlu membuat cadangan database dengan input berbeda [cadangan antara dua tanggal] jadi saya pikir saya perlu menggunakan file log di sini, itu sebabnya saya ingin melakukannya ...

Saya pikir log ini harus diamankan entah bagaimana karena informasi sensitif seperti nama pengguna dan kata sandi dapat dicatat [jika ada permintaan yang memerlukan ini]; jadi mungkinkah itu diamankan, tidak mudah dilihat?

Saya memiliki akses root ke sistem, bagaimana saya bisa melihat log?

Ketika saya mencoba untuk membuka /var/log/mysql.log itu kosong.

Ini adalah file konfigurasi saya:

[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

Jawaban:


164

Berikut adalah cara sederhana untuk mengaktifkannya. Dalam mysql kita perlu sering melihat 3 log yang paling dibutuhkan selama pengembangan proyek.

  • The Error Log. Ini berisi informasi tentang kesalahan yang terjadi saat server berjalan (juga server mulai dan berhenti)

  • The General Query Log. Ini adalah catatan umum tentang apa yang dilakukan mysqld (hubungkan, lepaskan, pertanyaan)

  • The Slow Query Log. Ini terdiri dari pernyataan SQL "lambat" (seperti yang ditunjukkan oleh namanya).

Secara default tidak ada file log yang diaktifkan di MYSQL. Semua kesalahan akan ditampilkan di syslog ( /var/log/syslog).

Untuk Mengaktifkannya cukup ikuti langkah-langkah di bawah ini:

langkah1: Buka file ini ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) dan hapus atau komentari baris itu.

step2: Buka file conf mysql ( /etc/mysql/my.cnf) dan tambahkan baris berikut

Untuk mengaktifkan log galat tambahkan berikut

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

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

Untuk mengaktifkan log kueri umum tambahkan berikut ini

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

Untuk mengaktifkan Slow Query Log tambahkan berikut ini

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

step3: simpan file dan restart mysql menggunakan perintah berikut

service mysql restart

Untuk mengaktifkan log saat runtime, masuk ke klien mysql ( mysql -u root -p) dan berikan:

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

Akhirnya satu hal yang ingin saya sebutkan di sini adalah saya membaca ini dari sebuah blog . Terima kasih. Ini bekerja untuk saya.

Klik di sini untuk mengunjungi blog


2
Saya pikir daripada Anda 'lupa' untuk menulis beberapa hal. Langkah 1 tidak lengkap dan kalimat tautan 'blog' tidak ada
Athafoud

Hai, @Athafoud, temukan tautannya sekarang.
loyola

3
Artikel blog yang ditautkan menyebutkan memodifikasi /etc/mysql/conf.d/mysqld_safe_syslog.cnfhanya jika log kesalahan harus diaktifkan. Namun, jawaban ini seperti yang saat ini ditulis tampaknya menyarankannya untuk semua log.
Melebius

2
Versi server saya adalah 5.6.35. Jawaban Ross Smith II di sini cocok untuk saya. Saya harus mengatur slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.logdan di long_query_time = 60bawah [mysqld]. Ketika saya mencoba untuk memulai dengan konfigurasi Anda, server mulai, tetapi lambat dan lambat dengan kesalahan. Saya benar-benar mengira versi berbeda dan dalam versi selanjutnya oracle ingin menyatukan variabel-nama. Juga: IMHO 2 detik tidak terlalu lama.
JackLeEmmerdeur

1
Bagaimana dengan izin pada file-file itu? Saya telah melihat dalam banyak kasus file-file log tidak dibuat.
MagePsycho

42

Anda harus mengaktifkan pendataan kueri di mysql.

  1. edit /etc/my.cnf

    [mysqld]
    log = / tmp / mysql.log
    
  2. restart komputer atau layanan mysqld

    service mysqld restart
    
  3. buka phpmyadmin / aplikasi apa pun yang menggunakan mysql / mysql console dan jalankan kueri

  4. cat /tmp/mysql.log (Anda harus melihat kueri)


tidak masalah, pastikan kueri dijalankan di atas db
danidacar

6
jalan yang salah. Anda memiliki /etc/my.cnf Anda harus /etc/mysql/my.cnf
mystic cola

39

Log MySQL ditentukan oleh variabel global seperti:

Untuk melihat pengaturan dan lokasinya, jalankan perintah shell ini:

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

Untuk mencetak nilai log kesalahan, jalankan perintah ini di terminal:

mysql -e "SELECT @@GLOBAL.log_error"

Untuk membaca konten file log kesalahan secara real time, jalankan:

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

Catatan: Hit Control- Csaat selesai

Ketika log umum diaktifkan, coba:

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

Untuk digunakan mysqldengan akses kata sandi, tambahkan -patau -pMYPASSparameter. Agar tetap diingat, Anda dapat mengkonfigurasinya di ~/.my.cnf, misalnya

[client]
user=root
password=root

Jadi itu akan diingat untuk waktu berikutnya.


1
Atau jika Anda perlu memasukkan kata sandi, coba ini: mysql -p -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log
Paul Chernoch

9

Di file LAMP saya (saya sudah menginstal) / etc / mysql / my.cnf yang saya temukan berikut, berkomentar di bagian [mysqld]:

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

Saya harus membuka file ini sebagai pengguna super, dengan terminal:

sudo geany /etc/mysql/my.cnf

(Saya lebih suka menggunakan Geany daripada gedit atau VI, tidak masalah)

Saya baru saja menghapus komentar mereka & menyimpan file kemudian menata ulang mysql dengan

sudo service mysql restart

Jalankan beberapa query, buka file di atas (/var/log/mysql/mysql.log) dan log ada di sana :)


sementara itu mungkin bekerja untuk Anda, itu tidak untuk saya, bahkan pengecualian besar seperti "Index Corrupted" tidak dicatat. Hanya masalah startup dan shutdown.
user3338098

8

Dari manual referensi MySQL:

Secara default, semua file log dibuat di direktori data.

Periksa /var/lib/mysqlfolder.


1
tetapi saya tidak dapat membuka folder mysql. Saya pikir jalur file log adalah /var/log/mysql/mysql.log tetapi saya tidak dapat membukanya, apa yang harus saya lakukan?
Arjun

2
bagaimana saya membuat diri saya root, saya pikir saya pemilik, saya menginstal server, saya mengatur kata sandi, jadi saya harus menjadi pemilik, masih terkunci untuk saya, bagaimana saya bisa membukanya?
Arjun

1
Saya memaksa cd ke direktori ini (saya harus membuat root user, yang saya hapus kemudian), tetapi ketika saya melihat file ini, saya pikir mereka dienkripsi :) Jadi saya pikir itu bukan cara yang baik.
Jalur

gunakan sudo -skemudian coba buka folder mysql.
Rashedul Islam

manual MySQL dipenuhi dengan banyak inkonsistensi, tidak ada direktori seperti itu di windows.
user3338098

3

Untuk melengkapi jawaban loyola , perlu disebutkan bahwa pada MySQL 5.1 log_slow_queriessudah usang dan diganti denganslow-query-log

Penggunaan log_slow_queriesakan menyebabkan Anda service mysql restartatau service mysql startgagal


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
Selamat datang di stackoverflow. Harap pertimbangkan untuk memberikan lebih banyak penjelasan tentang bagaimana kode dalam jawaban Anda relevan dengan pertanyaan OP. Selain itu, kode harus diindentasi oleh 4 spasi untuk memungkinkan pemformatan yang tepat.
Politank-Z

1

Selain jawaban di atas, Anda dapat mengirimkan parameter baris perintah ke proses mysqld untuk opsi log bukannya mengedit file conf Anda secara manual. Misalnya, untuk mengaktifkan pencatatan umum dan menentukan file:

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

Mengkonfirmasi jawaban lain di atas, mysqld --help --verbosememberi Anda nilai dari file conf (jadi menjalankan dengan opsi baris perintah log umum adalah SALAH); sedangkan mysql -se "SHOW VARIABLES" | grep -e log_error -e general_logmemberi:

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

Gunakan sintaks yang sedikit lebih kompak untuk log kesalahan:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.