XOOPS Brasil

 

4.8. Utilitários e Scripts do Lado do Servidor MySQL

4.8.1. Visão Geral dos Scripts e Utilitários do Lado Servidor

Todos os programas MySQL possuem várias opções diferentes, entretanto, todo programa MySQL fornece uma opção --help que pode ser usada para obter uma descrição completa das diferentes opções do programa. Por exemplo, experimente mysql --help.

Você pode sobrepor ignorar as opções padrões para todos os programas clientes com um arquivo de opções. Seção 4.1.2, “Arquivo de Opções my.cnf.

A lista abaixo descreve brevemente os programas MySQL.

  • myisamchk

    Utilitário para descrever, conferir, otimizar e reparar tabelas MySQL. Como o myisamchk tem muitas funções, eles são descritos em seu próprio capítulo. Veja mais informações sobre isto na Capítulo 4, Administração do Bancos de Dados MySQL.

  • make_binary_distribution

    Cria uma edição binária de um MySQL compilado. Isto pode ser enviado por FTP para /pub/mysql/Incoming em support.mysql.com para a conveniência de outros utilizadores MySQL.

  • mysqlbug

    O script para relatar erros no MySQL. Este script deve sempre ser utilizado quando for necessário preencher um relatório de erros para a lista do MySQL.

  • mysqld

    O servidor (daemon) SQL. Deve sempre estar em execução.

  • mysql_install_db

    Cria as tabelas de permissões do MySQL com os privilégios padrões. Este comando normalmente é executado somente na primeira vez quando o MySQL é instalado em um sistema.

4.8.2. mysqld-safe, o wrapper do mysqld

mysqld_safe é a maneira recomendada para iniciar um daemon mysqld no Unix. mysqld_safe adiciona alguns recursos de segurança tais como reiniciar o servidor quando um erro ocorrer e log de informações de tempo de execução a um arquivo log.

Note: Antes do MySQL 4.0, mysqld_safe é chamado safe_mysqld. Para preservar a compatibilidade com versões anteriores, a distribuição binária do MySQL para algumas vezes incluirá safe_mysqld como um link simbólico para mysqld_safe.

Se você não utilizar --mysqld=# ou --mysql-version=# o mysqld_safe irá utilizar um executável chamado mysqld-max se ele existir. Se não, mysqld_safe irá iniciar o mysqld. Isto torna muito fácil utilizar o mysql-max no lugar do mysqld; basta copiar mysqld-max no mesmo diretório do mysqld e ele será utillizado.

Normalmente o script mysqld_safe nunca deve ser editado, em vez disto, coloque as opções para o mysqld_safe na seção [mysqld_safe] no arquivo my.cnf. O mysqld_safe irá ler todas as opções das seções [mysqld], [server] e [mysqld_safe] dos arquivos de opções. (Para compatibilidade com versões anteriores, ele também lê as seções [safe_mysqld].) Veja mais informações sobre isto na Seção 4.1.2, “Arquivo de Opções my.cnf.

Note que todas as opções na linha de comando para o mysqld_safe são passadas para o mysqld. Se você deseja usar algumas opções no mysqld_safe que o mysqld não suporte, você deve especificá-las no arquivo de opções.

A maioria das opções para mysqld_safe são as mesmas que as do mysqld. Veja mais informações sobre isto na Seção 4.1.1, “Opções de Linha de Comando do mysqld.

mysqld_safe suporta as seguintes opções:

  • --basedir=caminho, --core-file-size=#

    Tamanho do arquivo core que o mysqld poderá criar. Passado para ulimit -c.

  • --datadir=caminho, --defaults-extra-file=caminho, --defaults-file=caminho, --err-log=caminho, --log-error=caminho

    Gava o log de erro no caminho acima. Veja mais informações sobre isto na Seção 4.10.1, “O Log de Erros”.

  • --ledir=caminho

    Caminho para mysqld

  • --log=caminho, --mysqld=versão_do_mysqld

    Nome da versão do mysqld no diretório ledir que você deseja iniciar.

  • --mysqld-version=versão

    Similar ao --mysqld= mas aqui você só fornece o sufixo para o mysqld. Por exemplo, se você utiliza --mysqld-version=max, o mysqld_safe irá iniciar a versão ledir/mysqld-max. Se o argumento para --mysqld-version estiver vazio, ledir/mysqld será usado.

  • --nice=# (adicionado no MySQL 4.0.14), --no-defaults, --open-files-limit=#

    Número de arquivos que o mysqld poderá abrir. Passado para ulimit -n. Perceba que será necessário iniciar mysqld_safe como root para isto funcionar corretamente!

  • --pid-file=caminho, --port=#, --socket=caminho, --timezone=#

    Configura a variável de fuso horário (TZ) para o valor deste parâmetro.

  • --user=#

O script mysqld_safe é gravável, portanto ele deve estar apto para iniciar um servidor que foi instalado de uma fonte ou uma versão binária do MySQL, mesmo se o servidor estiver instalado em localizações um pouco diferentes. mysqld_safe espera uma destas condições ser verdadeira:

  • O servidor e o banco de dados pode ser encontrado relativo ao diretório de onde o mysqld_safe foi chamado. mysqld_safe procura dentro de seu diretório de trabalho pelos diretórios bin e data (para distribuições binárias) ou pelos diretórios libexec e var (para distribuições baseadas em código fonte). Esta condição deve ser satisfeita se você executar o mysqld_safe a partir do seu diretório da instalação do MySQL (por exemplo, /usr/local/mysql para uma distribuição binária).

  • Se o servidor e os bancos de dados não forem encontrados relativos ao diretório de trabalho, mysqld_safe tenta localizá-lo utilizando caminhos absolutos. Localizações típicas são /usr/local/libexec e /usr/local/var. As localizações atuais foram determinadas quando a distribuição foi construída da qual vem o mysqld_safe. Eles dever estar corretas se o MySQL foi instalado na localização padrão.

Como o mysqld_safe tentará encontrar o servidor e o banco de dados relativo a seu diretório de trabalho, você pode instalar uma distribuição binária do MySQL em qualquer lugar, desde de que o mysqld_safe seja iniciado a partir do diretório da instalação:

shell> cd diretório_instalação_mysql
shell> bin/mysqld_safe &

Se o mysqld_safe falhar, mesmo se invocado a partir do diretório de instalação do MySQL, você pode modificá-lo para usar o caminho para o mysqld e as opções de caminho que seriam corretas para seu sistema. Perceba que se você atualizar o MySQL no futuro, sua versão modificada de mysqld_safe será sobrescrita, portanto, você deve fazer uma cópia de sua versão editada para que você a possa reinstalar.

4.8.3. mysqld_multi, programa para gerenciar múltiplos servidores MySQL

mysqld_multi gerencia vários processos mysqld executando em diferentes sockets UNIX e portas TCP/IP.

O programa irá pesquisar pelos grupos chamados [mysqld#] no my.cnf (ou no arquivo fornecido no parâmetro --config-file=...), onde # pode ser qualquer número positivo a partir de 1. Este número é referenciado a seguir como número do grupo de opções ou GNR. Números de grupos distinguem grupos de opções para um outro e são usados como argumentos para mysqld_multi para especificar quais servidores você deseja iniciar, parar ou obter status. Opções listadas nestes grupos devem ser a mesma que você usaria para iniciar o mysqld. (see Seção 2.4.3, “Inicializando e parando o MySQL automaticamente.”). No entanto, para o mysqld_multi, esteja certo que cada grupo inclui opções de valores tais como a porta, socket, etc., para ser usado para cada processo mysqld individual.

Uso: mysqld_multi [OPÇÕES] {start|stop|report} [GNR,GNR,GNR...]
ou mysqld_multi [OPÇÕES] {start|stop|report} [GNR-GNR,GNR,GNR-GNR,...]

O GNR acima significa o número do grupo. Você pode iniciar, parar ou relacionar qualquer GNR ou vários deles ao mesmo tempo. (Veja --example). A lista dos GNR podem ser separadas por vírgulas, ou pelo sinal sinal de menos (-), sendo que o ultimo significa que todos os GNRS entre GNR1-GNR2 serão afetados. Sem o argumento GNR todos os grupos encontrados serão iniciados, parados ou listados. Perceba que você não deve ter nenhum espaço em branco na lista GNR. Qualquer coisa depois de um espaço em branco é ignorado.

mysqld_multi suporta as seguintes opções:

  • --config-file=...

    Arquivo de configuração alternativo. NOTA: Isto não irá afetar as próprias opções do programa (grupo [mysqld_multi]), mas somente grupos [mysqld#]. Sem esta opção tudo será procurado a partir do arquivo my.cnf.

  • --example

    Fornece um exemplo de um arquivo de configuração.

  • --help

    Exibe esta ajuda e sai.

  • --log=...

    Arquivo Log. Deve ser informado o caminho completo e o nome do arquivo log. NOTA: se o arquivo existir, tudo será anexado.

  • --mysqladmin=...

    Binário mysqladmin a ser usado para o desligamento do servidor.

  • --mysqld=...

    Binário mysqld a ser usado. Lembre-se que você também pode fornecer mysqld_safe a esta opção. As opções são passadas ao mysqld. Apenas tenha certeza que o mysqld está localizado na sua variável de ambiente PATH ou corrija o mysqld_safe.

  • --no-log

    Imprime na saída padrão em vez do arquivo log. Por padrão o arquivo log sempre fica ligado.

  • --password=...

    Senha do utilizador para o mysqladmin.

  • --tcp-ip

    Conecta ao(s) servidor(es) MySQL através de porta TCP/IP no lugar de socket UNIX. Isto afeta a ação de desligar e relatar. Se um arquivo socket estiver faltando, o servidor pode ainda estar executando, mas só pode ser acessado através da porta TCP/IP. Por padrão a conexão é feita através de socket UNIX.

  • --user=...

    Utilizador MySQL para o mysqladmin.

  • --version

    Exibe o número da versão e sai.

Algumas notas sobre mysqld_multi:

  • Tenha certeza que o utilizador MySQL, que finalizar os serviços mysqld (e.g. utilizando o mysqladmin) tem a mesma senha e utilizador para todos os diretórios de dados acessados (para o banco de dados 'mysql'). E tenha certeza que o utilizador tem o privilégio 'Shutdown_priv'! Se você possui diversos diretórios de dados e vários bancos de dados 'mysql' com diferentes senhas para o utilizador 'root' do MySQL, você pode desejar criar um utilizador comum 'multi-admin' para cada um que utilize a mesma senha (veja abaixo). Exemplo de como fazer isto:

    shell> mysql -u root -S /tmp/mysql.sock -psenha_root -e
    "GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'multipass'"
    Veja mais informações sobre isto na Seção 4.3.6, “Como o Sistema de Privilégios Funciona”.
    

    Você deve fazer isto para cada servidor mysqld executando em cada diretório de dados, que você tem (Apenas altere o socket, -S=...)

  • pid-file é muito importante, se você estiver utilizando mysqld_safe para iniciar o mysqld (ex. --mysqld=mysqld_safe) Todos os mysqld devem ter seus próprios pid-file. A vantagem de utilizar o mysqld_safe no lugar de executar diretamente o mysqld é que mysqld_safe guarda todos os processos e irá reiniciá-los, se um processo do mysqld falhar devido a um sinal kill -9, ou similar. (Como um falha de segmentação, que nunca pode acontecer com o MySQL.) Por favor note que pode ser necessário executar o script mysqld_safe de um lugar específico. Isto significa que você pode ter que alterar o diretório atual para um diretório específico antes de iniciar o mysqld_multi. Se você tiver problemas ao iniciar, por favor veja o script mysqld_safe. Verifique especialmente as linhas:

    --------------------------------------------------------------------------
    MY_PWD=`pwd` Check if we are starting this relative (for the binary
    release) if test -d /data/mysql -a -f ./share/mysql/english/errmsg.sys
    -a -x ./bin/mysqld
    --------------------------------------------------------------------------
    

    Veja mais informações sobre isto na Seção 4.8.2, “mysqld-safe, o wrapper do mysqld. O teste acima deve ser bem sucedido, ou você pode encontrar problemas.

  • Esteja certo do perigoso de iniciar múltiplos mysqlds no mesmo diretório de dados. Utilize diretórios de dados diferentes, a menos que você realmente SAIBA o que está fazendo!

  • O arquivo de socket e a porta TCP/IP devem ser diferentes para cada mysqld.

  • O primeiro e quinto grupo mysqld foram intencionalmente deixados de lado no exemplo. Você pode ter lacunas no arquivo de configuração. Isto lhe permite mais flexibilidade. A ordem na qual os mysqlds são iniciados ou desligados depende da ordem em que eles aparecem no arquivo de configuração.

  • Quando você desejar referenciar a um grupo específico utilizando GNR com este programa, basta utilizar o número no fim do nome do grupo ([mysqld# <==).

  • Você pode desejar utilizar a opção '--user' para o mysqld, mas para isto você precisa ser o utilizador root quando iniciar o script mysqld_multi. Não importa se a opção existe no arquivo de configuração; você receberá apenas um alerta se você não for o superutilizador e o mysqlds for iniciado com a SUA conta no Unix. IMPORTANTE: Tenha certeza que o pid-file e o diretório de dados é acessível para leitura e escrita (+execução para o diretório) para ESTE utilizador UNIX que iniciará o processo mysqld. NÃO utilize a conta de root para isto, a menos que você SAIBA o que está fazendo!

  • MAIS IMPORTANTE: Tenha certeza que você entendeu os significados das opções que são passadas para os mysqlds e porque VOCÊ PRECISARIA ter processos mysqld separados. Iniciando múltiplos mysqlds em um diretório de dados NÃO IRÁ melhorar a performance em um sistema baseado em threads.

Veja mais informações sobre isto na Seção 4.2, “Executando Múltiplos MySQL Servers na Mesma Máquina”.

Este é um exemplo do arquivo de configuração para o funcionamento do mysqld_multi.

# Este arquivo provavelmente deve estar em seu diretório home (~/.my.cnf) ou /etc/my.cnf
# Version 2.1 by Jani Tolonen
[mysqld_multi]
mysqld = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user = multi_admin
password = multipass
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/hostname.pid2
datadir = /usr/local/mysql/var2
language = /usr/local/share/mysql/english
user = john
[mysqld3]
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/hostname.pid3
datadir = /usr/local/mysql/var3
language = /usr/local/share/mysql/swedish
user = monty
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/var4/hostname.pid4
datadir = /usr/local/mysql/var4
language = /usr/local/share/mysql/estonia
user = tonu
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/var6/hostname.pid6
datadir = /usr/local/mysql/var6
language = /usr/local/share/mysql/japanese
user = jani

Veja mais informações sobre isto na Seção 4.1.2, “Arquivo de Opções my.cnf.

4.8.4. myisampack, O Gerador de Tabelas Compactadas de Somente Leitura do MySQL

myisampack é usado para compactar tabelas MyISAM, e pack_isam é usado para compactar tabelas ISAM. Como as tabelas ISAM estão ultrapassadas, nós iremos discutir aqui somente sobre o myisampack, mas tudo dito sobre myisampack também pode ser verdadeiro para o pack_isam.

myisampack trabalha compactando cada coluna na tabela separadamente. A informação necessária para descompactar colunas é lida em memória quando a tabela é aberta. Isto resulta em uma performance muito melhor quando estiver acessando registros individuais, porque você precisará descompactar somente um registro, não um bloco muito maior do disco como faz o Stacker no MS-DOS. Normalmente, myisampack compacta o arquivo de dados 40%-70%.

O MySQL utiliza mapeamento de memória (nmap()) em tabelas compactadas e retorna ao uso normal de leitura e escrita se nmap() não funcionar.

Por favor, note o seguinte:

  • Depois de comapctada, a tabela é somente-leitura. Isto é, normalmente, pretendido (como quando acessamos tabelas compactadas em um CD). Permitir que se faça gravação em uma tabela compactada também está em nossa lista TODO, mas com baixa prioridade.

  • myisampack também pode compactar colunas BLOB ou TEXT. O antigo pack_isam (para tabelas ISAM) não pode fazer isto.

myisampack é chamado desta forma:

shell> myisampack [opções] nome_arquivo ...

Cada nome_arquivo deve ter o nome de um arquivo de índice (.MYI). Se você não se encontra em um diretório de bancos de dados, você deve especificar o caminho completo para o arquivo. Pode-se omitir a extensão .MYI.

myisampack suporta as seguintes opções:

  • -b, --backup

    Realiza um backup da tabela como nome_tabela.OLD.

  • -#, --debug=debug_options

    Log da saída de depuração. A string debug_options geralmante é 'd:t:o,nome_arquivo'.

  • -f, --force

    Força a compactação da tabela mesmo se ela se tornar maior ou se o arquivo temporário existir. myisampack cria um arquivo temporário chamado nome_tabela.TMD enquanto ele compacta a tabela. Se você matar o myisampack o arquivo .TMD não pode ser removido. Normalmente, myisampack sai com um erro se ele descobrir que nome_tabela.TMD existe. Com --force, myisampack compacta a tabela de qualquer maneira.

  • -?, --help

    Exibe uma mensagem de ajuda e sai.

  • -j nome_tabela_grande, --join=nome_tabela_grande

    Une todas as tabelas nomeadas na linha de comando em uma única tabela nome_tabela_grande. Todas tabelas que forem combinadas DEVEM ser idênticas (mesmos nomes de colunas e tipos, alguns índices, etc.).

  • -p #, --packlength=#

    Especifica o comprimento do tamanho de armazenamento, em bytes. O valor deve ser 1, 2 ou 3. (myisampack armazena todas as linhas com ponteiros de tamanhos 1, 2 ou 3 bytes. Na maioria dos casos normais, myisampack pode determinar o valor correto do tamanho antes de começar a compactar o arquivo, mas ele pode notificar durante o processo de compactação que ele pode ter usado um tamanho menor. Neste caso myisampack irá exibir uma nota dizendo que a próxima vez que você compactar o mesmo arquivo você pode utilizar um registro de tamanho menor.)

  • -s, --silent

    Modo silencioso. Escreve a saída somente quando algum erro ocorrer.

  • -t, --test

    Não compacta realmente a tabela, apenas testa a sua compactação.

  • -T dir_name, --tmp_dir=dir_name

    Utiliza o diretório especificado como a localização em que serão gravadas as tabelas temporárias.

  • -v, --verbose

    Modo verbose. Escreve informação sobre o prograsso e resultado da compactação.

  • -V, --version

    Exibe informação de versão e sai.

  • -w, --wait

    Espera e tenta novamente se a tabela estiver em uso. Se o servidor mysqld foi iniciado com a opção --skip-locking, não é uma boa idéia chamar myisampack se a tabela puder ser atualizada durante o processo de compactação.

A seqüência de comandos mostrados abaixo ilustra uma típica seção de compactação de tabelas:

shell> ls -l station.*
-rw-rw-r-- 1 monty my 994128 Apr 17 19:00 station.MYD
-rw-rw-r-- 1 monty my 53248 Apr 17 19:00 station.MYI
-rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm
shell> myisamchk -dvv station
MyISAM file: station
Isam-version: 2
Creation time: 1996-03-13 10:08:58
Recover time: 1997-02-02 3:06:43
Data records: 1192 Deleted blocks: 0
Datafile: Parts: 1192 Deleted data: 0
Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2
Max datafile length: 54657023 Max keyfile length: 33554431
Recordlength: 834
Record format: Fixed length
table description:
Key Start Len Index Type Root Blocksize Rec/key
1 2 4 unique unsigned long 1024 1024 1
2 32 30 multip. text 10240 1024 1
Field Start Length Type
1 1 1
2 2 4
3 6 4
4 10 1
5 11 20
6 31 1
7 32 30
8 62 35
9 97 35
10 132 35
11 167 4
12 171 16
13 187 35
14 222 4
15 226 16
16 242 20
17 262 20
18 282 20
19 302 30
20 332 4
21 336 4
22 340 1
23 341 8
24 349 8
25 357 8
26 365 2
27 367 2
28 369 4
29 373 4
30 377 1
31 378 2
32 380 8
33 388 4
34 392 4
35 396 4
36 400 4
37 404 1
38 405 4
39 409 4
40 413 4
41 417 4
42 421 4
43 425 4
44 429 20
45 449 30
46 479 1
47 480 1
48 481 79
49 560 79
50 639 79
51 718 79
52 797 8
53 805 1
54 806 1
55 807 20
56 827 4
57 831 4
shell> myisampack station.MYI
Compressing station.MYI: (1192 records)
- Calculating statistics
normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11
pre-space: 0 end-space: 12 table-lookups: 5 zero: 7
Original trees: 57 After join: 17
- Compressing file
87.14%
shell> ls -l station.*
-rw-rw-r-- 1 monty my 127874 Apr 17 19:00 station.MYD
-rw-rw-r-- 1 monty my 55296 Apr 17 19:04 station.MYI
-rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm
shell> myisamchk -dvv station
MyISAM file: station
Isam-version: 2
Creation time: 1996-03-13 10:08:58
Recover time: 1997-04-17 19:04:26
Data records: 1192 Deleted blocks: 0
Datafile: Parts: 1192 Deleted data: 0
Datafilepointer (bytes): 3 Keyfile pointer (bytes): 1
Max datafile length: 16777215 Max keyfile length: 131071
Recordlength: 834
Record format: Compressed
table description:
Key Start Len Index Type Root Blocksize Rec/key
1 2 4 unique unsigned long 10240 1024 1
2 32 30 multip. text 54272 1024 1
Field Start Length Type Huff tree Bits
1 1 1 constant 1 0
2 2 4 zerofill(1) 2 9
3 6 4 no zeros, zerofill(1) 2 9
4 10 1 3 9
5 11 20 table-lookup 4 0
6 31 1 3 9
7 32 30 no endspace, not_always 5 9
8 62 35 no endspace, not_always, no empty 6 9
9 97 35 no empty 7 9
10 132 35 no endspace, not_always, no empty 6 9
11 167 4 zerofill(1) 2 9
12 171 16 no endspace, not_always, no empty 5 9
13 187 35 no endspace, not_always, no empty 6 9
14 222 4 zerofill(1) 2 9
15 226 16 no endspace, not_always, no empty 5 9
16 242 20 no endspace, not_always 8 9
17 262 20 no endspace, no empty 8 9
18 282 20 no endspace, no empty 5 9
19 302 30 no endspace, no empty 6 9
20 332 4 always zero 2 9
21 336 4 always zero 2 9
22 340 1 3 9
23 341 8 table-lookup 9 0
24 349 8 table-lookup 10 0
25 357 8 always zero 2 9
26 365 2 2 9
27 367 2 no zeros, zerofill(1) 2 9
28 369 4 no zeros, zerofill(1) 2 9
29 373 4 table-lookup 11 0
30 377 1 3 9
31 378 2 no zeros, zerofill(1) 2 9
32 380 8 no zeros 2 9
33 388 4 always zero 2 9
34 392 4 table-lookup 12 0
35 396 4 no zeros, zerofill(1) 13 9
36 400 4 no zeros, zerofill(1) 2 9
37 404 1 2 9
38 405 4 no zeros 2 9
39 409 4 always zero 2 9
40 413 4 no zeros 2 9
41 417 4 always zero 2 9
42 421 4 no zeros 2 9
43 425 4 always zero 2 9
44 429 20 no empty 3 9
45 449 30 no empty 3 9
46 479 1 14 4
47 480 1 14 4
48 481 79 no endspace, no empty 15 9
49 560 79 no empty 2 9
50 639 79 no empty 2 9
51 718 79 no endspace 16 9
52 797 8 no empty 2 9
53 805 1 17 1
54 806 1 3 9
55 807 20 no empty 3 9
56 827 4 no zeros, zerofill(2) 2 9
57 831 4 no zeros, zerofill(1) 2 9

A informação exibida pelo myisampack é descrita abaixo:

  • normal

    O número de colunas para qual nenhum empacotamento extra é utilizado.

  • empty-space

    O número de colunas contendo valores que são somente espaços; estes ocuparão apenas 1 bit.

  • empty-zero

    O número de colunas contendo valores que são somente 0's binários; ocuparão 1 bit.

  • empty-fill

    O número de colunas inteiras que não ocupam a faixa completa de bytes de seu tipo; estes são alteradas para um tipo menor (por exemplo, uma coluna INTEGER pode ser alterada para MEDIUMINT).

  • pre-space

    O número de colunas decimais que são armazenadas com espaços a esquerda. Neste caso, cada valor irá conter uma contagem para o número de espaços.

  • end-space

    O número de colunas que tem muitos espaços espaços extras. Neste caso, cada valor conterá uma contagem para o número de espaços sobrando.

  • table-lookup

    A coluna tem somente um pequeno número de valores diferentes, que são convertidos para um ENUM antes da compressão Huffman.

  • zero

    O número de colunas em que todos os valores estão zerados.

  • Original trees

    O número inicial de árvores Huffman.

  • After join

    O número de árvores Huffman distintas que sobram depois de unir árvores para poupar espaço de cabeçalho.

Depois que uma tabela foi compactada, myisamchk -dvv mostra informações adicionais sobre cada campo:

  • Type

    O tipo de campo deve conter as seguites descrições:

    • constant

      Todas linhas tem o mesmo valor.

    • no endspace

      Não armazena espaços no fim.

    • no endspace, not_always

      Não armazena espaços no fim e não faz compactação de espaços finais para todos os valores.

    • no endspace, no empty

      Não armazena espaços no fim. Não armazena valores vazios.

    • table-lookup

      A coluna foi convertida para um ENUM.

    • zerofill(n)

      Os n bytes mais significativos no valor são sempre 0 e não são armazenados.

    • no zeros

      Não armazena zeros.

    • always zero

      Valores zero são armazenados em 1 bit.

  • Huff tree

    A árvore Huffman associada com o campo.

  • Bits

    O número de bits usado na árvore Huffman.

Depois de ter executado pack_isam/myisampack você deve executar o isamchk/myisamchk para recriar o índice. Neste momento você pode também ordenar os blocos de índices para criar estatísticas necessárias para o otimizador do MySQL trabalhar de maneira mais eficiente.

myisamchk -rq --analyze --sort-index nome_tabela.MYI
isamchk -rq --analyze --sort-index nome_tabela.ISM

Depois de instalar a tabela compactada no diretório de banco de dados MySQL você deve fazer mysqladmin flush-tables para forçar o mysqld a iniciar usando a nova tabela.

Se você desejar descompactar uma tabela compactada, você pode fazer isto com a opção --unpack para o isamchk ou myisamchk.

4.8.5. mysqld-max, om servidor mysqld extendido

mysqld-max é o servidor MySQL (mysqld) configurado com as seguintes opções de configuração:

OpçãoComentário
--with-server-suffix=-maxAdiciona um sufixo à string de versão mysqld
--with-innodbSuporte a tabelas InnoDB
--with-bdbSuporte para tabelas Berkeley DB (BDB)
CFLAGS=-DUSE_SYMDIRSuporte a links simbólicos para Windows

A opção para habilitar o suporte ao InnoDB é necessário apenas no MySQL 3.23. No MySQL 4 e acima, o InnoDB já é incluído por padrão.

Você pode encontrar os binários do MySQL-max em http://www.mysql.com/downloads/mysql-max-4.0.html.

A distribuição binária Windows MySQL 3.23 inclui tanto o binário mysqld.exe padrão e o binário mysqld-max.exe. http://www.mysql.com/downloads/mysql-4.0.html. Veja mais informações sobre isto na Seção 2.1.1, “Instalando o MySQL no Windows”.

Note que como o Berkeley DB (BDB) não está disponível para todas plataformas, alguns dos binários Max podem não ter suporte para ela. Você pode conferir quais tipos de tabelas são suportadas executando a seguinte consulta:

mysql> SHOW VARIABLES LIKE "have_%";
+------------------+----------+
| Variable_name | Value |
+------------------+----------+
| have_bdb | NO |
| have_crypt | YES |
| have_innodb | YES |
| have_isam | YES |
| have_raid | NO |
| have_symlink | DISABLED |
| have_openssl | NO |
| have_query_cache | YES |
+------------------+----------+

O significado dos valores na segunda coluna são:

ValorSignificado.
YESA opção está ativa e é utilizada.
NOO MySQL não está compilado com suporte a esta opção.
DISABLEDA opção xxx está desabilitada porque o mysqld foi iniciado com --skip-xxxx ou porque não foi iniciado com todas as opções necessárias para habilitar esta opção. Neste caso o arquivo hostname.err deve conter uma razão indicando o porque da opção estar desabilitada.

NOTA: Para conseguir criar tabelas InnoDB você DEVE editar suas opções de inicialização para incluir ao menos a opção innodb_data_file_path. Veja mais informações sobre isto na Seção 7.5.2, “InnoDB no MySQL Versão 3.23”.

Para obter melhor performance para tabelas BDB, você deve adicionar algumas opções de configuração para elas também .Veja mais informações sobre isto na Seção 7.6.3, “Opções de Inicialização do BDB.

mysqld_safe tenta iniciar automaticamente qualquer binário mysqld com o prefixo -max. Isto faz com que seja fácil testar um outro binário mysqld em uma instalação existente. Apenas execute o configure com as opções deseejadas e, então, instale o novo binário mysqld como mysqld-max no mesmo diretório onde seu antigo binário mysqld está. Veja mais informações sobre isto na Seção 4.8.2, “mysqld-safe, o wrapper do mysqld.

No Linux, o RPM mysqld-max utiliza o recurso mysqld_safe já mencionado. (Ele apenas instala o executável mysqld-max e o mysqld_safe usará automaticamente este executável quando o mysqld_safe for reiniciado).

A tabela a seguir mostra quais tipos de tabelas nossos binários MySQL-Max incluem:

SistemaBDBInnoDB
Windows/NTSS
AIX 4.3NS
HP-UX 11.0NS
Linux-AlphaNS
Linux-IntelSS
Linux-IA-64NS
Solaris-IntelNS
Solaris-SPARCSS
SCO OSR5SS
UnixWareSS
Mac OS XNS

Note que a partir do MySQL 4, você não precisa de um servidos MySQL Max para o InnoDB porque ele é incluído por padrão.