O MySQL possui um comando OPTIMIZE TABLE que pode ser usado para recuperar espaço não utilizado em uma instalação do MySQL. Existe uma maneira (comando interno ou procedimento armazenado comum) de executar essa otimização para todas as tabelas no banco de dados e / ou instalação do servidor, ou é algo que você precisaria fazer para criar um script?
245
OPTIMIZE TABLE
foi útil para o MyISAM. Agora que esse mecanismo está desaparecendo, a necessidadeOPTIMIZE TABLE
está desaparecendo, especialmente a necessidade de otimizar periodicamente todas as tabelas.Respostas:
Você pode usar
mysqlcheck
isso na linha de comando.Um banco de dados:
Todos os bancos de dados:
fonte
mysqlcheck -u [username] -p[password] -o [database name]
OPTIMIZE TABLE
comando: dev.mysql.com/doc/refman/5.5/en/optimize-table.html . Por exemplo, otimizar uma tabela como esta:OPTIMIZE TABLE <your_schema>.<your_table>;
, otimizar todas as tabelas em um determinado esquema como este:select concat('OPTIMIZE NO_WRITE_TO_BINLOG TABLE ',table_schema,'.',table_name,';') into outfile '/tmp/optimize_all_tables.sql' from information_schema.tables where table_schema = 'pabeta' and table_type = 'base table'; source /tmp/optimize_all_tables.sql;
Eu fiz esse script 'simples':
Para executá-lo, basta colá-lo em qualquer IDE SQL conectado ao seu banco de dados.
Nota: este código NÃO funciona no phpmyadmin.
Como funciona
Ele executa uma
show tables
declaração e a armazena em uma declaração preparada. Em seguida, executa aoptimize table
no conjunto selecionado.Você pode controlar quais tabelas otimizar definindo um valor diferente na var
@tables_like
(por exemplo :)set @tables_like = '%test%';
.fonte
bd
partir do @b Código de erro: 1064. Você tem um erro na sintaxe do SQL; verifique o manual que corresponde ao seu servidor MySQL versão para o direito de utilizar sintaxe próximo a 'NULL' at line 1O exemplo de script php a seguir pode ajudá-lo a otimizar todas as tabelas em seu banco de dados
fonte
Execute todos os procedimentos necessários para corrigir todas as tabelas em todos os bancos de dados com um simples script de shell:
fonte
para todos os bancos de dados:
Para uma otimização de banco de dados:
fonte
mysqlcheck -Aos
não requer usuário + senha.No phpMyAdmin e em outras fontes, você pode usar:
Em seguida, você pode copiar e colar o resultado em uma nova consulta ou executá-lo a partir de sua própria fonte. Se você não vir a declaração completa:
fonte
Se você deseja analisar, reparar e otimizar todas as tabelas em todos os bancos de dados em seu servidor MySQL, você pode fazer isso de uma só vez na linha de comando. Você precisará de raiz para fazer isso.
Depois de executar isso, você será solicitado a digitar sua senha root do MySQL. Depois disso, ele começará e você verá resultados à medida que está acontecendo.
Exemplo de saída:
Se você não souber a senha raiz e estiver usando o WHM, poderá alterá-la no WHM, acessando: Página inicial> Serviços SQL> Senha raiz do MySQL
fonte
Na linha de comando:
então digite a senha
fonte
Você pode otimizar / verificar e reparar todas as tabelas do banco de dados, usando o cliente mysql.
Primeiro, você deve obter toda a lista de tabelas, separada por ',':
Agora, quando você tiver todas as listas de tabelas para otimização:
fonte
O
MySQL Administrator
(parte do MySQL GUI Tools) pode fazer isso por você no nível do banco de dados.Basta selecionar seu esquema e pressionar o
Maintenance
botão no canto inferior direito.Como as Ferramentas da GUI atingiram o status de Fim de vida útil, elas são difíceis de encontrar na página do mysql. Encontrei-os pelo Google: http://dev.mysql.com/downloads/gui-tools/5.0.html
Não sei se o novo MySQL Workbench também pode fazer isso.
E você pode usar a
mysqlcheck
ferramenta de linha de comando que também poderá fazer isso.fonte
Se você estiver acessando o banco de dados diretamente, poderá escrever a seguinte consulta:
fonte
Esse script bash aceita a senha root como opção e a otimiza uma a uma, com saída de status:
fonte
Um script bash inicial para listar e executar uma ferramenta nos DBs ...
fonte
my 2cents: comece com a tabela com maior fragmentação
fonte