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 / 35395
Accepted
giorgio79
giorgio79
Asked: 2013-02-26 11:33:07 +0800 CST2013-02-26 11:33:07 +0800 CST 2013-02-26 11:33:07 +0800 CST

Existe uma reinicialização graciosa ou segura para o mysql como para o apache httpd?

  • 772

Eu gostaria de reiniciar o mysql graciosamente como httpd onde os threads são servidos antes da reinicialização. Eu não gostaria de quebra de consultas.

mysql
  • 2 2 respostas
  • 46732 Views

2 respostas

  • Voted
  1. Best Answer
    Michael - sqlbot
    2013-02-26T17:43:55+08:002013-02-26T17:43:55+08:00

    Qualquer sequência de desligamento "solicitada" no MySQL (abreviação de kill -9) é um pouco graciosa , uma vez que as transações em andamento (em tabelas transacionais) são revertidas, mas aqui estão algumas maneiras de fazer uma reinicialização o mais limpa possível.

    Observação: se você estiver desligando o servidor para uma atualização, não use esse processo; em vez disso, siga o processo detalhado nesta resposta .

    Caso contrário, se você estiver apenas reiniciando um servidor íntegro para poder alterar uma variável global somente leitura ou algo semelhante, aqui está um caminho simples:

    Primeiro, habilite innodb_fast_shutdownse ainda não estiver. Isso não está diretamente relacionado à graça do desligamento, mas deve trazer seu servidor de volta mais rapidamente.

    mysql> SHOW VARIABLES LIKE 'innodb_fast_shutdown';
    +----------------------+-------+
    | Variable_name        | Value |
    +----------------------+-------+
    | innodb_fast_shutdown | 0     |
    +----------------------+-------+
    1 row in set (0.00 sec)
    
    mysql> SET GLOBAL innodb_fast_shutdown = 1;
    Query OK, 0 rows affected (0.01 sec)
    

    Em seguida, instrua o servidor a fechar todas as tabelas abertas assim que nenhuma consulta em execução estiver fazendo referência a elas. Esta etapa também não tem nada a ver com o desligamento normal, mas fará com que a etapa subsequente seja mais rápida:

    mysql> FLUSH LOCAL TABLES;
    Query OK, 0 rows affected (41.12 sec)
    

    A FLUSH TABLESinstrução (com a LOCALpalavra-chave opcional, que evita uma liberação desnecessária, mas inofensiva de quaisquer escravos) será bloqueada e seu prompt não retornará até que todas as tabelas possam ser fechadas. Depois que cada tabela for "limpa" (fechada), se uma consulta fizer referência subsequente à tabela, ela será reaberta automaticamente, mas tudo bem. O que estamos conseguindo com esta etapa é dar menos trabalho para a etapa final:

    mysql> FLUSH TABLES WITH READ LOCK;
    Query OK, 0 rows affected (13.74 sec)
    
    mysql>
    

    Essa instrução libera todas as tabelas (daí a vantagem de eliminar algumas delas de maneira menos perturbadora com a etapa anterior) e adquire um bloqueio somente leitura global (em todo o servidor).

    Você não pode ter um bloqueio de leitura global até que todas as consultas de "gravação" em execução (ou seja, praticamente tudo, exceto SELECT) sejam concluídas. A emissão da solicitação de bloqueio permitirá que as consultas existentes sejam concluídas, mas não permitirá que novas sejam iniciadas.

    Seu prompt não retorna até que você mantenha esse bloqueio global, portanto, todas as consultas que estão em andamento quando você solicita o bloqueio podem ser concluídas e você sabe que elas terminaram, porque você recebe o prompt de volta. Quaisquer consultas subsequentes que tentarem escrever qualquer coisa em qualquer tabela irão parar, sem alterar nenhum dado, esperando indefinidamente pelo bloqueio, até que...

    • você muda de ideia sobre a reinicialização e libera o bloqueio manualmente ( UNLOCK TABLES;)
    • você reinicia o servidor ou
    • você acidentalmente ou intencionalmente desconecta o cliente de linha de comando deste segmento (portanto, não faça isso). Mantenha esta janela conectada e sentada no prompt do mysql:

    Resista à tentação de fechar isso.

    mysql>
    

    Este prompt do console ocioso é o que está mantendo o bloqueio global para você. Perca isso, perca o cadeado.

    De outra janela do console, reinicie o MySQL da maneira que você faria normalmente, seja com scripts de inicialização (por exemplo, sua variante local de service mysql.server restart) ou com mysqladmin shutdownseguido de uma reinicialização manual.

    • 43
  2. Moll
    2016-11-22T13:49:04+08:002016-11-22T13:49:04+08:00

    Resumindo, algumas das melhores práticas que devem ser consideradas antes de encerrar o MySQL são:

    1. Confirme a instância que você encerrará para evitar interromper outra instância por engano.
    2. Pare a replicação se você for desligar um escravo mysql> STOP SLAVE;.
    3. Lave as páginas sujas com antecedência para reduzir o tempo de desligamento mysql> SET GLOBAL innodb_max_dirty_pages_pct = 0;.
    4. Verifique as consultas de longa duração mysql> SHOW PROCESSLIST;, mate-as mysql> kill thread_id;ou espere até que terminem.
    5. Despeje o buffer pool no encerramento mysql> SET GLOBAL innodb_buffer_pool_dump_at_shutdown = ON;e recarregue-o na inicialização # vi /etc/my.cnf innodb_buffer_pool_load_at_startup = ON para aquecer o buffer pool.

    Então, depois de confirmar os pontos anteriores, você pode reiniciar o MySQL com segurançashell$ service mysql restart

    Para mais detalhes, veja meu post Verifique isso antes de desligar o MySQL!

    • 3

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 fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 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

    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
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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

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