Вопрос

Есть ли вдали, чтобы MySQL сбрасывал свой журнал на удаленный сервер MySQL?

Я хотел бы проверить подключения MySQL, но я не хочу, чтобы сервер хранил всю информацию локально на своем собственном оборудовании.

Это было полезно?

Решение

У меня хорошие новости и плохие новости об этом.

ХОРОШИЕ НОВОСТИ

Вы можете использовать общий журнал в качестве таблицы, которую вы можете запросить

Шаг 01) Добавьте это в /etc/my.cnf

[mysqld] 
log
log-output=TABLE 

Шаг 02) service mysql restart

ОК Mysqld не записывает каждый запрос в таблице mysql.general_log. Анкет Проблема: посмотрите на начальную планировку 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) 

Что хорошего в общем журнале как таблица CSV

Шаг 03) сделать mysql.general_log таблица myisam и указать его

 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; 

Теперь это похоже на это:

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>

Значения пользователя и хоста добавляются вместе в полях user_host.

Как вы поверните общий журнал?

Вот пример того, как выпустить 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; 

Вот пример того, как сохранить последние 3 дня записей:

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; 

ПЛОХИЕ НОВОСТИ

Все, что вы собрали в версии Text File The General Log, не придет для поездки. Вы можете собрать новые записи в будущем.

Другие советы

Вы можете настроить монтирование NFS на ваш целевой сервер и просто указать на общий путь журнала на это крепление.

Вместо перезапуска MySQL вы можете сделать это:

SET GLOBAL log_output = 'TABLE';

Сервер немедленно начнет регистрировать `mysql`.`general_log`.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top