Apakah mungkin bagi saya untuk mengaktifkan audit logging pada database mysql saya?
Saya pada dasarnya ingin memantau semua pertanyaan selama satu jam, dan membuang log ke file.
Apakah mungkin bagi saya untuk mengaktifkan audit logging pada database mysql saya?
Saya pada dasarnya ingin memantau semua pertanyaan selama satu jam, dan membuang log ke file.
Jawaban:
Mulai mysql dengan opsi --log:
mysqld --log=log_file_name
atau tempatkan yang berikut ini di my.cnf
file Anda :
log = log_file_name
Salah satu akan mencatat semua permintaan ke log_file_name.
Anda juga dapat mencatat hanya permintaan yang lambat menggunakan --log-slow-queries
opsi --log
. Secara default, kueri yang memakan waktu 10 detik atau lebih lama dianggap lambat, Anda dapat mengubahnya dengan mengatur long_query_time
ke jumlah detik yang harus dijalankan oleh kueri sebelum dicatat.
( Catatan : Untuk mysql-5.6 + ini tidak akan berfungsi. Ada solusi yang berlaku untuk mysql-5.6 + jika Anda gulir ke bawah atau klik di sini .)
Jika Anda tidak ingin atau tidak dapat memulai kembali server MySQL, Anda dapat melanjutkan seperti ini di server Anda yang sedang berjalan:
mysql
database CREATE TABLE `slow_log` (
`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`query_time` time NOT NULL,
`lock_time` time NOT NULL,
`rows_sent` int(11) NOT NULL,
`rows_examined` int(11) NOT NULL,
`db` varchar(512) NOT NULL,
`last_insert_id` int(11) NOT NULL,
`insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log
SET global general_log = 0;
CREATE TABLE
perintah harus (jika tabel belum ada) dieksekusi pada mysql
database, bukan pada database yang dibuat pengguna. Mungkin pernyataan SQL dapat diperbarui untuk mencerminkan hal itu.
SELECT * FROM mysql.general_log order by (event_time) desc
akan lebih baik. hanya mengatakan. :-)
Selain apa yang saya temui di sini, menjalankan berikut ini adalah cara paling sederhana untuk membuang kueri ke file log tanpa memulai ulang
SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;
dapat dimatikan dengan
SET global general_log = 0;
GRANT SUPER ON *.* TO user1@localhost
Jawaban teratas tidak berfungsi di mysql 5.6+. Gunakan ini sebagai gantinya:
[mysqld]
general_log = on
general_log_file=/usr/log/general.log
di file my.cnf / my.ini Anda
Ubuntu / Debian : /etc/mysql/my.cnf
Windows : c: \ ProgramData \ MySQL \ MySQL Server 5.x
wamp : c: \ wamp \ bin \ mysql \ mysqlx.yz \ my.ini
xampp : c: \ xampp \ mysql \ bin \ my.ini.
phpMyAdmin
?
general_log_file=filename.log
Aktifkan log untuk tabel
mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';
Lihat log dengan kueri pemilihan
select * from mysql.general_log
Cara cepat untuk mengaktifkan MySQL General Query Log tanpa memulai ulang.
mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log';
Saya telah menginstal mysql melalui homebrew, versi mysql: mysql Ver 14.14 Distrib 5.7.15, untuk osx10.11 (x86_64) menggunakan EditLine wrapper
Sebagai catatan, general_log dan slow_log diperkenalkan pada 5.1.6:
http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
5.2.1. Memilih Tujuan Umum dan Tujuan Output Log Kueri Lambat
Pada MySQL 5.1.6, MySQL Server menyediakan kontrol fleksibel atas tujuan output ke log kueri umum dan log kueri lambat, jika log tersebut diaktifkan. Tujuan yang mungkin untuk entri log adalah file log atau tabel general_log dan slow_log dalam database mysql
Anda harus menyadari bahwa login mysql benar-benar berdampak pada kinerja, tetapi itu bisa menjadi hal yang bijaksana untuk dilakukan.
Saya biasanya membiarkannya di server dev (kecuali ketika itu membuat kita gila :))
Versi OS / mysql:
$ uname -a
Darwin Raphaels-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 21 20:07:40 PDT 2018; root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64
$ mysql --version
/usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.6.23, for osx10.8 (x86_64) using EditLine wrapper
Menambahkan pencatatan (contoh, saya pikir /var/log/...
ini bukan jalur terbaik di Mac OS tetapi berhasil:
sudo vi ./usr/local/mysql-5.6.23-osx10.8-x86_64/my.cnf
[mysqld]
general_log = on
general_log_file=/var/log/mysql/mysqld_general.log
Restart Mysql
Hasil:
$ sudo tail -f /var/log/mysql/mysqld_general.log
181210 9:41:04 21 Connect root@localhost on employees
21 Query /* mysql-connector-java-5.1.47 ( Revision: fe1903b1ecb4a96a917f7ed3190d80c049b1de29 ) */SELECT @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@collation_server AS collation_server, @@collation_connection AS collation_connection, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS transaction_isolation, @@wait_timeout AS wait_timeout
21 Query SET NAMES latin1
21 Query SET character_set_results = NULL
21 Query SET autocommit=1
21 Query SELECT USER()
21 Query SELECT USER()
181210 9:41:10 21 Query show tables
181210 9:41:25 21 Query select count(*) from current_dept_emp
Jika menggunakan AWS RDS MYSQL, panduan langkah demi langkah di sini.
Ketika ditetapkan sebagai output 'file' Anda dapat melihat log langsung dari AWS RDS "Log" Console.