Question

est-il loin d'avoir MySQL vider son journal à un serveur MySQL?

Je voudrais les connexions MySQL de vérification, mais je ne veux pas que le serveur pour stocker toutes les informations locales sur son propre matériel.

Était-ce utile?

La solution

J'ai de bonnes nouvelles et de mauvaises nouvelles sur celui-ci.

BONNES NOUVELLES

Vous pouvez utiliser le journal général comme une table, vous pouvez interroger

Étape 01) Ajouter à ce /etc/my.cnf

[mysqld] 
log
log-output=TABLE 

Étape 02) service mysql restart

OK mysqld n'enregistre toutes les requêtes dans le tableau mysql.general_log. Problème: regard sur la mise en page initiale de mysql.general_log:

mysql> show create table mysql.general_log\G 
*************************** 1. row *************************** 
       Table: general_log 
Create Table: CREATE TABLE `general_log` ( 
  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
  `user_host` mediumtext NOT NULL, 
  `thread_id` int(11) 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' 
1 row in set (0.09 sec) 

A quoi bon est le journal général comme une table CSV

Étape 03) Faire mysql.general_log une table MyISAM et indexer

 SET @old_log_state = @@global.general_log; 
 SET GLOBAL general_log = 'OFF'; 
 ALTER TABLE mysql.general_log ENGINE = MyISAM; 
 ALTER TABLE mysql.general_log ADD INDEX (event_time); 
 SET GLOBAL general_log = @old_log_state; 

Maintenant, il ressemble à ceci:

mysql> show create table general_log\G
*************************** 1. row ***************************
       Table: general_log
Create Table: CREATE TABLE `general_log` (
  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_host` mediumtext NOT NULL,
  `thread_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `command_type` varchar(64) NOT NULL,
  `argument` mediumtext NOT NULL,
  KEY `event_time` (`event_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.00 sec)

mysql>

Les valeurs de l'utilisateur et l'hôte sont annexés ainsi que dans les champs de user_host.

Comment vous faites pivoter le journal général?

Voici un exemple de blanc sur mysql.general_log:

SET @old_log_state = @@global.general_log; 
SET GLOBAL general_log = 'OFF'; 
CREATE TABLE mysql.general_log_new LIKE mysql.general_log; 
DROP TABLE mysql.general_log; 
ALTER TABLE mysql.general_log_new RENAME mysql.general_log; 
SET GLOBAL general_log = @old_log_state; 

Voici un exemple de la façon de garder les 3 derniers jours d'entrées:

SET @old_log_state = @@global.general_log; 
SET GLOBAL general_log = 'OFF'; 
CREATE TABLE mysql.general_log_new LIKE mysql.general_log; 
INSERT INTO mysql.general_log_new 
SELECT * FROM mysql.general_log WHERE event_time > NOW() - INTERVAL 3 DAY; 
DROP TABLE mysql.general_log; 
ALTER TABLE mysql.general_log_new RENAME mysql.general_log; 
SET GLOBAL general_log = @old_log_state; 

BAD NOUVELLES

Tout ce que vous avez recueilli dans la version du fichier texte du journal général ne viendra pas pour le trajet. Vous pouvez collecter de nouvelles entrées à l'avenir.

Autres conseils

Vous pouvez configurer un montage NFS sur votre serveur cible et il suffit de pointer le chemin du journal général de cette montagne.

Au lieu de redémarrer MySQL, vous pouvez faire ceci:

SET GLOBAL log_output = 'TABLE';

Le serveur commencera immédiatement à l'enregistrement à `mysql`.`general_log`.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top