Bagaimana cara mengaktifkan fungsi MySQL yang mencatat setiap pernyataan kueri SQL yang diterima dari klien dan waktu yang dikirimkan pernyataan kueri? Bisakah saya melakukannya di phpmyadmin atau NaviCat? Bagaimana cara menganalisis log?
Bagaimana cara mengaktifkan fungsi MySQL yang mencatat setiap pernyataan kueri SQL yang diterima dari klien dan waktu yang dikirimkan pernyataan kueri? Bisakah saya melakukannya di phpmyadmin atau NaviCat? Bagaimana cara menganalisis log?
Jawaban:
Pertama, Ingat bahwa file log ini dapat tumbuh sangat besar di server yang sibuk.
Untuk mysql <5.1.29:
Untuk mengaktifkan log query, menempatkan ini di /etc/my.cnf
dalam [mysqld]
bagian
log = /path/to/query.log #works for mysql < 5.1.29
Juga, untuk mengaktifkannya dari konsol MySQL
SET general_log = 1;
Lihat http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Untuk mysql 5.1.29+
Dengan mysql 5.1.29+, log
opsi ini tidak digunakan lagi. Untuk menentukan file log dan mengaktifkan logging, gunakan ini di my.cnf di [mysqld]
bagian:
general_log_file = /path/to/query.log
general_log = 1
Sebagai alternatif, untuk mengaktifkan pencatatan log dari konsol MySQL (juga harus menentukan lokasi file log, atau menemukan lokasi default):
SET global general_log = 1;
Perhatikan juga bahwa ada opsi tambahan untuk mencatat hanya permintaan yang lambat, atau yang tidak menggunakan indeks.
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
Lihatlah jawaban ini untuk pertanyaan terkait lainnya. Ini menunjukkan cara mengaktifkan, menonaktifkan, dan melihat log di server langsung tanpa memulai ulang.
Berikut ini ringkasannya:
Jika Anda tidak ingin atau tidak dapat memulai kembali server MySQL, Anda dapat melanjutkan seperti ini di server Anda yang sedang berjalan:
Buat tabel log Anda (lihat jawaban )
Aktifkan Pencatatan kueri pada basis data (Perhatikan bahwa string 'tabel' harus diletakkan secara harfiah dan tidak diganti dengan nama tabel apa pun. Terima kasih Nicholas Pickering )
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log;
SET global general_log = 0;
Saya menggunakan metode ini untuk mencatat ketika saya ingin mengoptimalkan berbagai halaman dengan cepat. Ini sedikit tip ...
Masuk ke TABEL
SET global general_log = 1;
SET global log_output = 'table';
Anda kemudian dapat memilih dari menu saya mysql.general_log
meja untuk mengambil pertanyaan terbaru.
Saya kemudian dapat melakukan sesuatu yang mirip dengan tail -f
di mysql.log, tetapi dengan lebih banyak perbaikan ...
select * from mysql.general_log
where event_time > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> ""
and argument <> "SET NAMES 'UTF8'" and argument <> "SHOW STATUS"
and command_type = "Query" and argument <> "SET PROFILING=1"
Ini membuatnya mudah untuk melihat pertanyaan saya yang dapat saya coba dan kurangi. Saya menggunakan interval 8 detik untuk hanya mengambil kueri yang dieksekusi dalam 8 detik terakhir.
Ini sudah ada di komentar, tetapi pantas jawabannya sendiri: Tanpa mengedit file konfigurasi: di mysql, sebagai root, lakukan
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
Jangan lupa untuk mematikannya setelah itu:
SET global general_log = off;
/tmp/
, mungkin berakhir di suatu tempat seperti/tmp/systemd-private-...-mariadb.service-.../tmp/
Anda dapat menonaktifkan atau mengaktifkan log kueri umum (yang mencatat semua kueri)
SET GLOBAL general_log = 1 # (or 0 to disable)
Saya juga ingin mengaktifkan file log MySQL untuk melihat kueri dan saya telah menyelesaikan ini dengan instruksi di bawah ini
/etc/mysql/mysql.conf.d
dan mengaktifkan garis di bawah ini
general_log_file = /var/log/mysql/mysql.log
general_log = 1
/etc/init.d/mysql restart
/var/log/mysql/
dan periksa log// To see global variable is enabled or not and location of query log
SHOW VARIABLES like 'general%';
// Set query log on
SET GLOBAL general_log = ON;
Di Windows Anda bisa langsung ke
C:\wamp\bin\mysql\mysql5.1.53\my.ini
Masukkan baris ini di my.ini
general_log_file = c:/wamp/logs/mysql_query_log.log
File my.ini akhirnya terlihat seperti ini
...
...
...
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...
Ada bug di versi MySQL 5.6. Bahkan mysqld tampil sebagai:
Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
Pengaturan sebenarnya membaca dalam urutan berikut:
Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
Periksa file: "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"
Semoga ini bisa membantu seseorang.
untuk mysql> = 5,5 hanya untuk permintaan lambat (1 detik dan lebih) my.cfg
[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
Untuk mengaktifkan log kueri di Mesin MAC:
Buka file berikut:
vi /private/etc/my.cnf
Setel url log kueri di bawah bagian 'mysqld' sebagai berikut:
[mysqld]
general_log_file=/Users/kumanan/Documents/mysql_query.log
Beberapa mesin tidak mencatat kueri dengan benar, sehingga Anda dapat mengaktifkannya dari konsol MySQL
mysql> SET global general_log = 1;
Bukan jawaban yang tepat untuk pertanyaan itu karena pertanyaan itu sudah memiliki jawaban yang bagus. Ini adalah info sampingan. Mengaktifkan general_log benar-benar mengurangi kinerja MySQL. Saya meninggalkan general_log =1
server produksi secara tidak sengaja dan menghabiskan waktu berjam-jam mencari tahu mengapa kinerja tidak sebanding dengan pengaturan serupa di server lain. Kemudian saya menemukan ini yang menjelaskan dampak mengaktifkan log umum. http://www.fromdual.com/general_query_log_vs_mysql_performance .
Intinya, jangan dimasukkan ke general_log=1
dalam .cnf
file. Alih-alih gunakan set global general_log =1
untuk jangka waktu singkat hanya untuk mencatat cukup untuk mencari tahu apa yang Anda cari dan kemudian mematikannya.
Di phpMyAdmin 4.0, Anda pergi ke Status> Monitor. Di sana Anda dapat mengaktifkan log kueri lambat dan log umum, melihat monitor langsung, pilih sebagian grafik, lihat kueri terkait dan menganalisisnya.
Saya harus menjatuhkan dan membuat ulang log umum pada satu titik. Selama rekreasi, rangkaian karakter menjadi kacau dan saya akhirnya mengalami kesalahan ini dalam log:
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
Jadi, jika jawaban standar "centang untuk memastikan penebangan aktif" tidak berfungsi untuk Anda, periksa untuk memastikan bidang Anda memiliki rangkaian karakter yang tepat.