Jawaban:
Bagi mereka yang diberkati dengan MySQL> = 5.1.12, Anda dapat mengontrol opsi ini secara global saat runtime:
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
mysql.general_log
Jika Anda lebih memilih untuk menampilkan file daripada tabel:
SET GLOBAL log_output = "FILE";
default .SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
Saya lebih suka metode ini daripada mengedit file .cnf karena:
my.cnf
file dan berpotensi mengaktifkan pencatatan secara permanen/var/log /var/data/log
/opt /home/mysql_savior/var
Untuk informasi lebih lanjut, lihat Manual Referensi MySQL 5.1 - Variabel Sistem Server - general_log
Anda dapat mengaktifkan log kueri umum untuk diagnostik semacam itu. Namun, umumnya Anda tidak mencatat semua kueri SELECT pada server produksi, itu adalah pembunuh kinerja.
Edit konfigurasi MySQL Anda, mis. /Etc/mysql/my.cnf - cari, atau tambahkan, baris seperti ini
[mysqld]
log = /var/log/mysql/mysql.log
Mulai ulang mysql untuk mengambil perubahan itu, sekarang Anda bisa
tail -f /var/log/mysql/mysql.log
Hai presto, Anda dapat menonton pertanyaan saat mereka masuk.
Anda dapat melakukan hal yang mengalir untuk memantau log kueri mysql.
Buka file konfigurasi mysql my.cnf
sudo nano /etc/mysql/my.cnf
Cari baris berikut di bawah [mysqld]
judul dan batalkan komentar pada baris ini untuk mengaktifkan log
general_log_file = /var/log/mysql/mysql.log
general_log = 1
Mulai ulang server mysql Anda untuk mencerminkan perubahan
sudo service mysql start
Pantau log server mysql dengan perintah berikut di terminal
tail -f /var/log/mysql/mysql.log
1) Jika logging mysql umum diaktifkan maka kita dapat memeriksa pertanyaan dalam file log atau tabel berdasarkan apa yang telah kita sebutkan dalam konfigurasi. Periksa apa yang diaktifkan dengan perintah berikut
mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';
Jika kita membutuhkan histori query dalam tabel maka
Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';
Lihatlah tabel mysql.general_log
Jika Anda lebih memilih untuk menghasilkan file:
SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
2) Kami juga dapat memeriksa kueri di file .mysql_history cat ~ / .mysql_history
Jika mysql binlog diaktifkan, Anda dapat memeriksa perintah yang dijalankan oleh pengguna dengan menjalankan perintah berikut di konsol linux dengan menelusuri ke direktori mysql binlog
mysqlbinlog binlog.000001 > /tmp/statements.sql
memungkinkan
[mysqld]
log = /var/log/mysql/mysql.log
atau log umum akan berpengaruh pada kinerja mysql
Jika Anda tidak ingin mengubah konfigurasi MySQL, Anda dapat menggunakan profiler SQL seperti "Neor Profile SQL" http://www.profilesql.com .
Setelah membaca jawaban Paul, saya terus menggali informasi lebih lanjut tentang https://dev.mysql.com/doc/refman/5.7/en/query-log.html
Saya menemukan kode yang sangat berguna oleh seseorang. Inilah ringkasan konteksnya.
(Catatan: Kode berikut bukan milik saya)
Script ini adalah contoh untuk menjaga tabel tetap bersih yang akan membantu Anda mengurangi ukuran tabel Anda. Seperti setelah sehari, akan ada sekitar 180 ribu permintaan log. (dalam file, itu akan menjadi 30MB per hari)
Anda perlu menambahkan kolom tambahan (event_unix) dan kemudian Anda dapat menggunakan skrip ini untuk menjaga log tetap bersih ... itu akan memperbarui timestamp menjadi timest-Unix, menghapus log lebih tua dari 1 hari dan kemudian memperbarui event_time ke Timestamp dari event_unix ... kedengarannya agak membingungkan, tapi ini bekerja dengan baik.
Perintah untuk kolom baru:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
Skrip pembersihan:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
Penghargaan diberikan kepada Sebastian Kaiser (Penulis asli kode).
Semoga seseorang akan merasakan manfaatnya seperti saya.
Anda dapat melihat yang berikut ini di linux
cd /root
ls -al
vi .mysql_history
Ini mungkin membantu