Yanıtlar:
MySQL> = 5.1.12 ile kutsanmış olanlar için, bu seçeneği global olarak çalışma zamanında kontrol edebilirsiniz:
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
mysql.general_log
Tablo yerine dosyaya çıktı almayı tercih ediyorsanız:
SET GLOBAL log_output = "FILE";
varsayılan .SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
Bu yöntemi .cnf dosyalarını düzenlemeyi tercih ederim çünkü:
my.cnf
dosyayı düzenlemiyorsunuz ve günlük kaydını kalıcı olarak açıyorsunuz/var/log /var/data/log
/opt /home/mysql_savior/var
Daha fazla bilgi için, bkz. MySQL 5.1 Başvuru Kılavuzu - Sunucu Sistemi Değişkenleri - general_log
Bu tür bir teşhis için genel bir sorgu günlüğü etkinleştirebilirsiniz . Genellikle tüm SELECT sorgularını bir üretim sunucusuna kaydetmezsiniz, bu bir performans katilidir.
MySQL yapılandırmanızı düzenleyin, örneğin /etc/mysql/my.cnf - böyle bir çizgi arayın veya ekleyin
[mysqld]
log = /var/log/mysql/mysql.log
Bu değişikliği almak için mysql'i yeniden başlatın, şimdi yapabilirsiniz
tail -f /var/log/mysql/mysql.log
Hey presto, sorguları geldiklerinde izleyebilirsiniz.
Mysql sorgu günlüklerini izlemek için akan şey yapabilirsiniz.
Mysql yapılandırma dosyasını açın my.cnf
sudo nano /etc/mysql/my.cnf
Bir [mysqld]
başlık altında aşağıdaki satırları arayın ve günlüğü etkinleştirmek için bu satırları kaldırın
general_log_file = /var/log/mysql/mysql.log
general_log = 1
Yansımaları değiştirmek için mysql sunucunuzu yeniden başlatın
sudo service mysql start
Terminalde aşağıdaki komutla mysql sunucu günlüğünü izleyin
tail -f /var/log/mysql/mysql.log
1) Genel mysql günlüğü etkinleştirilmişse, yapılandırmada bahsettiklerimize dayanarak günlük dosyasındaki veya tablodaki sorguları kontrol edebiliriz. Aşağıdaki komutla nelerin etkin olduğunu kontrol edin
mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';
Tabloda sorgu geçmişine ihtiyacımız varsa
Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';
Tabloya bir göz atın mysql.general_log
Bir dosyaya çıktı almayı tercih ediyorsanız:
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) .mysql_history dosya cat ~ / .mysql_history dosyasındaki sorguları da kontrol edebiliriz.
Belki bunu sorgu günlüğüne bakarak bulabilirsiniz .
Eğer MySQL binlog kontrol edebilirsiniz etkindir komutları binlog dizini MySQL 'e göz atarak linux konsolunda aşağıdaki komutu yürüterek kullanıcı tarafından koştu
mysqlbinlog binlog.000001 > /tmp/statements.sql
etkinleştirme
[mysqld]
log = /var/log/mysql/mysql.log
veya genel günlük mysql performansı üzerinde bir etkisi olacaktır
MySQL yapılandırmanızı değiştirmek istemiyorsanız, "Neor Profile SQL" gibi bir SQL profili kullanabilirsiniz http://www.profilesql.com .
Paul'un cevabını okuduktan sonra, https://dev.mysql.com/doc/refman/5.7/en/query-log.html hakkında daha fazla bilgi için kazmaya devam ettim.
Bir kişi tarafından gerçekten kullanışlı bir kod buldum. İşte bağlamın özeti.
(Not: Aşağıdaki kod benim değil)
Bu komut dosyası, tablo boyutunu temizlemenize yardımcı olacak tabloyu temiz tutmak için bir örnektir. Bir günden sonra olduğu gibi, yaklaşık 180 bin günlük sorgu olacaktır. (bir dosyada günde 30 MB olur)
Ek bir sütun (event_unix) eklemeniz gerekir ve daha sonra günlüğü temiz tutmak için bu komut dosyasını kullanabilirsiniz ... event_unix ... biraz kafa karıştırıcı, ama harika çalışıyor.
Yeni sütun için komutlar:
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';
Temizleme betiği:
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';
Kredi Sebastian Kaiser'e (Kodun orijinal yazarı) gider.
Umarım biri benim yaptığım gibi yararlı bulur.
Linux'ta aşağıdakilere bakabilirsiniz
cd /root
ls -al
vi .mysql_history
Yardımcı olabilir