AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 15863
Accepted
Katafalkas
Katafalkas
Asked: 2012-03-31 05:41:35 +0800 CST2012-03-31 05:41:35 +0800 CST 2012-03-31 05:41:35 +0800 CST

Configuração de log lento do MySQL

  • 772

Existe uma maneira de fazer logs lentos do MySQL para iniciar um novo arquivo de log todos os dias? No momento, é apenas um único arquivo grande e tem que grep linhas para todos os dias. Seria muito mais conveniente ter arquivos separados para os logs lentos de cada dia.

Eu tenho que configurar um my.cnf ou algum recurso linux?

mysql configuration
  • 3 3 respostas
  • 6598 Views

3 respostas

  • Voted
  1. Derek Downey
    2012-03-31T06:59:42+08:002012-03-31T06:59:42+08:00

    Atualizar Como Aaron aponta, há a chance de copiar e truncar algumas entradas. Portanto, o método mais seguro é mover e FLUSH.

    Original

    Este artigo tem o princípio básico para rotacionar o log de consulta lento que eu uso. Basicamente, você precisa copiar o log lento para um novo arquivo e truncar o conteúdo do slow.log:

    cp log/slow.log log/slow.log.`date +%M`; > log/slow.log
    

    Se você apenas mover o log lento para um novo arquivo e criar um novo 'slow.log', não funcionará porque o arquivo movido ainda possui o mesmo inode e o mysql ainda o mantém aberto. Suponho que mover o arquivo e, em seguida, emitir um FLUSH SLOW LOGScomando funcionaria, pois isso fecha o arquivo e reabre, mas acho que copiar e truncar é igualmente eficaz e não requer login no mysql.

    Seu artigo menciona o uso de logrotate no Linux, mas acabei de fazer um cronjob para executar uma vez por dia à meia-noite para fazer isso por mim.

    Além disso, para resolver o problema de replicação em FLUSH LOGS:

    FLUSH LOGS, FLUSH MASTER, FLUSH SLAVE e FLUSH TABLES WITH READ LOCK (com ou sem uma lista de tabelas) não são gravados no log binário em nenhum caso porque causariam problemas se replicados para um escravo. [origem]

    Portanto, não, como essas instruções não são gravadas no log binário, elas não interferirão na replicação. Para seus propósitos, eu especificaria FLUSH SLOW LOGSapenas fechar/abrir o log de consulta lenta.

    • 5
  2. TechieGurl
    2012-03-31T08:43:24+08:002012-03-31T08:43:24+08:00

    use Logrotate.d para girar diariamente os arquivos e manter quantos dias quiser ou movê-los ... em seguida, emita um flush-logs do mesmo script para fazer o MySQL iniciar um novo arquivo .... tendo isso no log girar, definido como diário deve obter o que você deseja ..

    Espero que algum dia eles implementem algo semelhante a 'expire_log_days' para logs de depuração como genlog e log lento

    • 4
  3. Best Answer
    RolandoMySQLDBA
    2012-03-31T13:11:02+08:002012-03-31T13:11:02+08:00

    Todo mundo está acostumado com este, o bom e velho arquivo de texto.

    Basta executar o seguinte para liberar um log lento todos os dias

    PASSO 01) Desligue o log de consultas lentas

    SET GLOBAL slow_query_log = 'OFF';
    

    PASSO 02) Copie o arquivo de texto

    cat slow-query.log | gzip > /logs/slow-query-`date +"%Y%m%d-%H%M"`.log.gz
    

    PASSO 03) Truncar o arquivo para zero bytes

    echo -n > slow-query.log 
    

    PASSO 04) Ative o log de consultas lentas

    SET GLOBAL slow_query_log = 'ON';
    

    Você pode alternar log-output=TABLEe lidar com isso como uma tabela para consulta.

    PASSO 01) Converter mysql.slow_log de CSV para MyISAM

    ALTER TABLE mysql.slow_log ENGINE = MyISAM;
    

    PASSO 02) Indexar a tabela

    ALTER TABLE mysql.slow_log ADD INDEX (start_time);
    

    PASSO 03) Ativar formato de log para ser TABLE

    [mysqld]
    log-output=TABLE
    

    PASSO 04)service mysql restart

    Depois de inicializar o mysqld, as entradas de log lentas são registradas na tabela MyISAM mysql.slow_log;

    Para rotacionar as entradas antes da meia-noite, você pode fazer algo assim:

    SET GLOBAL slow_query_log = 'OFF';
    SET @dt = NOW();
    SET @dtstamp = DATE_FORMAT(@dt,'%Y%m%d_%H%i%S');
    SET @midnight = DATE(@dt) + INTERVAL 0 SECOND;
    ALTER TABLE mysql.slow_log RENAME mysql.slow_log_old;
    CREATE TABLE mysql.slow_log LIKE mysql.slow_log_old;
    INSERT INTO mysql.slow_log SELECT * FROM mysql.slow_log_old WHERE start_time >= @midnight;
    DELETE FROM mysql.slow_log_old WHERE start_time >= @midnight;
    SET @sql = CONCAT('ALTER TABLE mysql.slow_log_old RENAME mysql.slow_log_',@dtstamp);
    PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; 
    SET GLOBAL slow_query_log = 'ON';
    

    e isso é tudo para logs lentos...

    • 2

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve