Função PHP mysqli_refresh()
Aprenda como a função mysqli_refresh() do PHP libera caches do MySQL, tabelas, logs e privilégios. Flags de atualização, sintaxe OOP e procedural.
Introdução
MySQLi é a extensão PHP para comunicação com bancos de dados MySQL. A função mysqli_refresh() permite solicitar ao servidor que libere recursos internos — caches, definições de tabelas, logs ou as tabelas de concessão que armazenam os privilégios do usuário. É o equivalente programático de executar uma instrução SQL FLUSH.
Esta página explica o que mysqli_refresh() faz, as flags que aceita, como chamá-la tanto em código procedural quanto orientado a objetos, e a armadilha de privilégios que pega a maioria dos usuários de primeira viagem.
Sintaxe
mysqli_refresh() recebe a conexão aberta e uma máscara de bits com flags de atualização, e retorna true em caso de sucesso ou false em caso de falha.
mysqli_refresh(mysqli $mysql, int $flags): bool| Parâmetro | Descrição |
|---|---|
$mysql | Um link de conexão retornado por mysqli_connect() ou new mysqli(...). |
$flags | Uma ou mais constantes MYSQLI_REFRESH_* combinadas com o operador OR bit a bit (|). |
No estilo orientado a objetos, a mesma chamada é escrita como $mysqli->refresh($flags).
Privilégio necessário. Liberar recursos é uma operação privilegiada. A conta MySQL com a qual você se conecta precisa do privilégio
RELOAD(historicamente o privilégioSUPER). Um usuário de aplicação padrão receberá um erro de "acesso negado" emysqli_refresh()retornaráfalse.
Flags de atualização
O argumento $flags seleciona o que liberar. As constantes mais comuns são:
| Flag | O que libera |
|---|---|
MYSQLI_REFRESH_GRANT | Recarrega as tabelas de concessão (equivalente a FLUSH PRIVILEGES). |
MYSQLI_REFRESH_LOG | Libera os logs de erros, consultas e binários (rotação de logs). |
MYSQLI_REFRESH_TABLES | Libera todas as tabelas abertas e fecha seus arquivos (FLUSH TABLES). |
MYSQLI_REFRESH_HOSTS | Limpa o cache interno de hosts. |
MYSQLI_REFRESH_STATUS | Redefine as variáveis de status de sessão/servidor. |
MYSQLI_REFRESH_THREADS | Libera o cache de threads. |
MYSQLI_REFRESH_REPLICA | Redefine a réplica (anteriormente MYSQLI_REFRESH_SLAVE). |
Combine flags com | para realizar várias ações em uma única ida e volta:
mysqli_refresh($conn, MYSQLI_REFRESH_TABLES | MYSQLI_REFRESH_LOG);Como usar mysqli_refresh()
Abra uma conexão, chame mysqli_refresh() com a flag desejada e verifique o valor booleano retornado. Veja um exemplo procedural completo:
<?php
// Create a connection to the MySQL server
$conn = mysqli_connect("localhost", "username", "password", "database");
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Flush server tables and caches
// Requires SUPER or FLUSH privilege
if (mysqli_refresh($conn, MYSQLI_REFRESH_TABLES)) {
echo "Tables flushed successfully.";
} else {
echo "Refresh failed: " . mysqli_error($conn);
}
// To fetch updated data, re-execute the query
$result = mysqli_query($conn, "SELECT * FROM table");
if (!$result) {
die("Query failed: " . mysqli_error($conn));
}
// Process the results
if ($result) {
while ($row = mysqli_fetch_assoc($result)) {
// Process each row of data
}
mysqli_free_result($result);
}
// Close the connection
mysqli_close($conn);
?>A conexão é estabelecida com mysqli_connect(). mysqli_refresh() então libera as tabelas abertas, o resultado é verificado, e os dados são lidos novamente com mysqli_query() e mysqli_fetch_assoc(). Por fim, o link é liberado com mysqli_close().
Estilo orientado a objetos
Se você preferir a interface OOP, a conexão é um objeto mysqli e refresh() é um método nele:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Connection failed: " . $mysqli->connect_error);
}
if ($mysqli->refresh(MYSQLI_REFRESH_TABLES | MYSQLI_REFRESH_LOG)) {
echo "Tables and logs flushed successfully.";
} else {
echo "Refresh failed: " . $mysqli->error;
}
$mysqli->close();
?>Ambos os estilos se comportam de forma idêntica; a versão OOP simplesmente lê o error e connect_error da conexão como propriedades do objeto em vez de usar mysqli_error().
Casos de uso da função MySQLi Refresh
A função mysqli_refresh() é valiosa para uma variedade de cenários, incluindo:
1. Gerenciamento de cache de tabelas
A função mysqli_refresh() pode ser usada para liberar caches de tabelas. Isso é útil quando as estruturas das tabelas foram alteradas e você precisa que o servidor recarregue as definições.
2. Gerenciamento de logs
A função pode liberar logs gerais, lentos ou binários. Isso é útil para manutenção do banco de dados e para garantir que os arquivos de log sejam corretamente rotacionados.
3. Recarga de privilégios
Os desenvolvedores podem usá-la para recarregar as tabelas de concessão após fazer alterações nos privilégios do usuário, garantindo que as atualizações de permissões entrem em vigor imediatamente.
Vantagens da função MySQLi Refresh
A função mysqli_refresh() oferece várias vantagens para desenvolvedores PHP:
1. Gerenciamento eficiente de cache
A função permite que os desenvolvedores limpem os caches do servidor sob demanda. Isso é útil em aplicações que requerem atualizações imediatas nas definições de tabelas ou caches de consulta.
2. Manutenção aprimorada do banco de dados
A função garante que logs e caches sejam gerenciados adequadamente, o que pode levar a melhor desempenho do servidor e solução de problemas mais fácil.
3. Atualizações imediatas de privilégios
A função é valiosa no gerenciamento de permissões de usuários. Ao recarregar as tabelas de concessão, a aplicação pode garantir que todos os usuários trabalhem com os direitos de acesso mais atualizados.
Armadilhas comuns
- Acesso negado. A surpresa mais frequente: uma conta de aplicação regular não possui o privilégio
RELOAD/SUPER, então a chamada retornafalse. Sempre verifique o valor retornado e leiamysqli_error(). - Não é o "refresh" do HTTP.
mysqli_refresh()não tem nada a ver com recarregar uma página web. Ela libera o estado MySQL no lado do servidor. Para buscar dados novamente no seu script, você deve executar a consulta novamente — liberar não retorna linhas. - Constantes renomeadas.
MYSQLI_REFRESH_SLAVE/MYSQLI_REFRESH_MASTERforam renomeadas paraMYSQLI_REFRESH_REPLICA/MYSQLI_REFRESH_SOURCEem versões mais recentes do MySQL/PHP; prefira os novos nomes em configurações modernas. - Prefira SQL quando possível. A maioria do código pode simplesmente executar
FLUSH TABLES(ouFLUSH PRIVILEGES) através demysqli_query();mysqli_refresh()é um wrapper de conveniência em torno dos mesmos comandos de liberação.
Conclusão
A função mysqli_refresh() fornece uma maneira direta de enviar comandos FLUSH ao servidor MySQL, ajudando os desenvolvedores a gerenciar recursos e recarregar definições após alterações estruturais ou tarefas de manutenção. Com suporte a múltiplas flags de atualização e efeito imediato em caches, logs e privilégios, ela permanece uma ferramenta prática para administração de banco de dados em aplicações PHP.
Esperamos que este guia tenha esclarecido como usar a função mysqli_refresh() de forma eficaz. Seguindo os passos e as melhores práticas descritas aqui, os desenvolvedores podem manter o desempenho e a segurança ideais do banco de dados.