Este é o comando pt-online-schema-changep que pode ser executado no provedor de hospedagem gratuita OnWorks usando uma de nossas várias estações de trabalho online gratuitas, como Ubuntu Online, Fedora Online, emulador online do Windows ou emulador online do MAC OS
PROGRAMA:
NOME
pt-online-schema-change - tabelas ALTER sem bloqueá-las.
SINOPSE
Uso: pt-online-schema-change [OPÇÕES] DSN
pt-online-schema-change altera a estrutura de uma tabela sem bloquear leituras ou gravações.
Especifique o banco de dados e a tabela no DSN. Não use esta ferramenta antes de ler seu
documentação e checando seus backups cuidadosamente.
Adicione uma coluna a sakila.actor:
pt-online-schema-change --alter "ADICIONE COLUNA c1 INT" D = sakila, t = ator
Altere sakila.actor para InnoDB, realizando efetivamente OPTIMIZE TABLE em um sistema sem bloqueio
moda porque já é uma tabela InnoDB:
pt-online-schema-change --alter "ENGINE = InnoDB" D = sakila, t = actor
RISCOS
O Percona Toolkit é maduro, comprovado no mundo real e bem testado, mas todo banco de dados
ferramentas podem representar um risco para o sistema e o servidor de banco de dados. Antes de usar esta ferramenta,
por favor:
· Leia a documentação da ferramenta
· Reveja os conhecidos "BUGS" da ferramenta
· Teste a ferramenta em um servidor que não seja de produção
· Faça backup do seu servidor de produção e verifique os backups
DESCRIÇÃO
pt-online-schema-change emula a maneira como o MySQL altera tabelas internamente, mas funciona
em uma cópia da tabela que você deseja alterar. Isso significa que a tabela original não é
bloqueado e os clientes podem continuar a ler e alterar os dados nele.
pt-online-schema-change funciona criando uma cópia vazia da tabela para alterar, modificando
conforme desejado e, em seguida, copiando as linhas da tabela original para a nova tabela. Quando o
a cópia estiver completa, ele afasta a mesa original e a substitui pela nova. Por
padrão, ele também descarta a tabela original.
O processo de cópia de dados é realizado em pequenos blocos de dados, que são variados para tentar
faça com que eles sejam executados em um determinado período de tempo (veja "--chunk-time"). Este processo é muito
semelhante a como outras ferramentas, como pt-table-checksum, funcionam. Quaisquer modificações nos dados em
as tabelas originais durante a cópia serão refletidas na nova tabela, porque a ferramenta
cria gatilhos na tabela original para atualizar as linhas correspondentes na nova tabela.
O uso de gatilhos significa que a ferramenta não funcionará se algum gatilho já estiver definido
na mesa.
Quando a ferramenta termina de copiar os dados para a nova tabela, ela usa um "RENAME TABLE" atômico
operação para renomear simultaneamente as tabelas originais e novas. Depois que isso for concluído,
a ferramenta descarta a mesa original.
Chaves estrangeiras complicam a operação da ferramenta e apresentam risco adicional. A tecnica
de renomear atomicamente as tabelas originais e novas não funciona quando as chaves estrangeiras se referem
para a mesa. A ferramenta deve atualizar as chaves estrangeiras para se referir à nova tabela após o esquema
a mudança está completa. A ferramenta oferece suporte a dois métodos para fazer isso. Você pode ler
mais sobre isso na documentação para "--alter-foreign-keys-method".
As chaves estrangeiras também causam alguns efeitos colaterais. A mesa final terá as mesmas chaves estrangeiras
e índices como a tabela original (a menos que você especifique de forma diferente em seu ALTER
declaração), mas os nomes dos objetos podem ser ligeiramente alterados para evitar o nome do objeto
colisões no MySQL e InnoDB.
Por segurança, a ferramenta não modifica a tabela a menos que você especifique a opção "--execute",
que não é habilitado por padrão. A ferramenta suporta uma variedade de outras medidas para prevenir
carga indesejada ou outros problemas, incluindo a detecção automática de réplicas, conectando-se a
eles, e usando as seguintes verificações de segurança:
· Na maioria dos casos, a ferramenta se recusará a operar a menos que uma CHAVE PRIMÁRIA ou ÍNDICE ÚNICO seja
presente na mesa. Veja "--alter" para detalhes.
· A ferramenta se recusa a operar se detectar filtros de replicação. Ver
"- [não] verificar-filtros de replicação" para obter detalhes.
· A ferramenta pausa a operação de cópia de dados se observar quaisquer réplicas que estão atrasadas
em replicação. Veja "--max-lag" para detalhes.
· A ferramenta pausa ou aborta sua operação se detectar muita carga no servidor. Ver
"--max-load" e "--critical-load" para detalhes.
· A ferramenta define "innodb_lock_wait_timeout = 1" e (para MySQL 5.5 e mais recente)
"lock_wait_timeout = 60" para que seja mais provável que seja vítima de qualquer bloqueio
contenção, e menos provável de interromper outras transações. Esses valores podem ser
alterado especificando "--set-vars".
· A ferramenta se recusa a alterar a tabela se as restrições de chave estrangeira fizerem referência a ela, a menos que
você especifica "--alter-foreign-keys-method".
· A ferramenta não pode alterar tabelas MyISAM em nós "Percona XtraDB Cluster".
percona XtraDBName Agrupar
pt-online-schema-change funciona com Percona XtraDB Cluster (PXC) 5.5.28-23.7 e mais recente, mas
existem duas limitações: apenas tabelas InnoDB podem ser alteradas, e "wsrep_OSU_method" deve
ser definido como "TOI" (isolamento total do pedido). A ferramenta sai com um erro se o host for um
nó do cluster e a tabela é MyISAM ou está sendo convertida para MyISAM ("ENGINE = MyISAM"), ou
se "wsrep_OSU_method" não for "TOI". Não há como desativar essas verificações.
SAÍDA
A ferramenta imprime informações sobre suas atividades em STDOUT para que você possa ver o que é
fazendo. Durante a fase de cópia de dados, ele imprime relatórios "--progress" para STDERR. Você pode ter
informações adicionais especificando "--print".
Se "--statistics" for especificado, um relatório de várias contagens de eventos internos é impresso em
o final, como:
# Contagem de eventos
# ==== =====
# INSERIR 1
OPÇÕES
"--dry-run" e "--execute" são mutuamente exclusivos.
Esta ferramenta aceita argumentos de linha de comando adicionais. Consulte o "SINOPSE" e uso
informações para detalhes.
--alterar
tipo: string
A modificação do esquema, sem as palavras-chave ALTER TABLE. Você pode realizar vários
modificações na tabela especificando-as com vírgulas. Consulte o MySQL
manual para a sintaxe de ALTER TABLE.
Aplicam-se as seguintes limitações que, se tentadas, farão com que a ferramenta falhe em
formas imprevisíveis:
· Em quase todos os casos, uma CHAVE PRIMÁRIA ou ÍNDICE ÚNICO precisa estar presente no
tabela. Isso é necessário porque a ferramenta cria um gatilho DELETE para manter o
nova tabela atualizada durante a execução do processo.
Uma exceção notável é quando uma PRIMARY KEY ou UNIQUE INDEX está sendo criada a partir de
existente colunas como parte da cláusula ALTER; nesse caso, ele usará estes
coluna (s) para o gatilho DELETE.
· A cláusula "RENAME" não pode ser usada para renomear a tabela.
· As colunas não podem ser renomeadas eliminando e adicionando novamente com o novo nome. A ferramenta
não copiará os dados da coluna original para a nova coluna.
· Se você adicionar uma coluna sem um valor padrão e torná-la NÃO NULL, a ferramenta irá
falhar, pois não tentará adivinhar um valor padrão para você; Você deve especificar o
padrão.
· "DROP FOREIGN KEY constraint_name" requer a especificação de "_constraint_name" em vez
do que o verdadeiro "constraint_name". Devido a uma limitação no MySQL, pt-online-schema-
mudança adiciona um sublinhado à esquerda para nomes de restrição de chave estrangeira ao criar o
nova mesa. Por exemplo, para eliminar essa restrição:
CONSTRAINT `fk_foo` FOREIGN KEY (` foo_id`) REFERÊNCIAS `bar` (` foo_id`)
Você deve especificar "--alter" DROP FOREIGN KEY _fk_foo "".
· A ferramenta não usa "LOCK IN SHARE MODE" com MySQL 5.0 porque pode causar um
erro escravo que quebra a replicação:
A consulta causou erros diferentes no mestre e no escravo. Erro no mestre:
'Deadlock encontrado ao tentar obter o bloqueio; tente reiniciar a transação '(1213),
Erro no escravo: 'sem erro' (0). Banco de dados padrão: 'pt_osc'.
Consulta: 'INSERT INTO pt_osc.t (id, c) VALUES (' 730 ',' nova linha ')'
O erro acontece ao converter uma tabela MyISAM para InnoDB porque MyISAM não é
transacional, mas InnoDB é transacional. MySQL 5.1 e mais recente lidam com este caso
corretamente, mas o teste reproduz o erro 5% das vezes com o MySQL 5.0.
Este é um bug do MySQL, semelhante ahttp://bugs.mysql.com/bug.php? id = 45694>, mas
não há correção ou solução alternativa no MySQL 5.0. Sem "LOCK IN SHARE MODE", os testes
passar 100% do tempo, então o risco de perda de dados ou interrupção da replicação deve ser
insignificante.
Be certo para verificar da novo mesa if utilização MySQL 5.0 e conversão da MyISAMGenericName para
InnoDB!
- método alternativo de chaves estrangeiras
tipo: string
Como modificar chaves estrangeiras para que façam referência à nova tabela. Chaves estrangeiras que
referência a tabela a ser alterada deve ser tratada especialmente para garantir que eles
continue a consultar a tabela correta. Quando a ferramenta renomeia a tabela original para
deixe o novo tomar o seu lugar, as chaves estrangeiras "seguem" a tabela renomeada, e devem
ser alterado para fazer referência à nova tabela.
A ferramenta oferece suporte a duas técnicas para conseguir isso. Encontra automaticamente "criança
tabelas "que fazem referência à tabela a ser alterada.
auto
Determine automaticamente qual método é o melhor. A ferramenta usa "rebuild_constraints"
se possível (veja a descrição desse método para detalhes), e se não, então
usa "drop_swap".
reconstruir_restrições
Este método usa "ALTER TABLE" para descartar e adicionar novamente as restrições de chave estrangeira que
referencie a nova tabela. Esta é a técnica preferida, a menos que um ou mais dos
as tabelas "filhas" são tão grandes que o "ALTER" demoraria muito. A ferramenta
determina que, comparando o número de linhas na tabela filha com a taxa em
qual a ferramenta é capaz de copiar linhas da tabela antiga para a nova tabela. Se o
ferramenta estima que a tabela filho pode ser alterada em menos tempo do que o
"--chunk-time", então ele usará esta técnica. Para fins de estimar o
tempo necessário para alterar a tabela filho, a ferramenta multiplica a taxa de cópia de linha
por "--chunk-size-limit", porque o "ALTER TABLE" do MySQL é normalmente muito mais rápido
do que o processo externo de copiar linhas.
Devido a uma limitação no MySQL, as chaves estrangeiras não terão os mesmos nomes após o
ALTERE o que eles fizeram antes disso. A ferramenta tem que renomear a chave estrangeira quando
o redefine, o que adiciona um sublinhado inicial ao nome. Em alguns casos, MySQL
também renomeia automaticamente os índices necessários para a chave estrangeira.
drop_swap
Desative as verificações de chave estrangeira (FOREIGN_KEY_CHECKS = 0) e, em seguida, elimine a tabela original
antes de renomear a nova tabela em seu lugar. Isso é diferente do normal
método de trocar a tabela antiga pela nova, que usa um "RENAME" atômico que é
indetectável para aplicativos cliente.
Esse método é mais rápido e não bloqueia, mas é mais arriscado por dois motivos.
Primeiro, por um curto período de tempo entre descartar a tabela original e renomear o
tabela temporária, a tabela a ser alterada simplesmente não existe, e as consultas
contra ele resultará em um erro. Em segundo lugar, se houver um erro e o novo
tabela não pode ser renomeada no lugar da antiga, então é tarde demais para
abortar, porque a mesa antiga se foi permanentemente.
Este método força "--no-swap-tables" e "--no-drop-old-table".
Nenhum
Este método é como "drop_swap" sem o "swap". Qualquer chave estrangeira que
referenciado, a tabela original agora fará referência a uma tabela inexistente. Isso vai
normalmente causam violações de chave estrangeira que são visíveis em "SHOW ENGINE INNODB
STATUS ", semelhante ao seguinte:
Tentando adicionar a tupla `idx_fk_staff_id` do índice:
DATA TUPLE: 2 campos;
0: lente 1; hexágono 05; asc;;
1: lente 4; hexágono 80000001; asc;;
Mas a tabela pai `sakila` `staff_old`
ou seu arquivo .ibd não existe atualmente!
Isso ocorre porque a tabela original (neste caso, sakila.staff) foi renomeada para
sakila.staff_old e depois caiu. Este método de lidar com restrições de chave estrangeira
é fornecido para que o administrador do banco de dados possa desabilitar a ferramenta embutida
funcionalidade, se desejado.
- [não] analisar antes de trocar
padrão: sim
Execute ANALYZE TABLE na nova tabela antes de trocar com a antiga. Por padrão,
isso acontece apenas ao executar o MySQL 5.6 e mais recente, e "innodb_stats_persistent" é
ativado. Especifique a opção explicitamente para habilitar ou desabilitar independentemente do MySQL
versão e "innodb_stats_persistent".
Isso contorna um problema potencialmente sério relacionado às estatísticas do otimizador InnoDB.
Se a mesa que está sendo alertada estiver ocupada e a ferramenta for concluída rapidamente, a nova mesa irá
não tem estatísticas do otimizador após ser trocado. Isso pode causar o uso rápido de índices
consultas para fazer varreduras completas da tabela até que as estatísticas do otimizador sejam atualizadas (geralmente após
10 segundos). Se a mesa for grande e o servidor muito ocupado, isso pode causar uma interrupção.
--pergunta-passa
Solicita uma senha ao se conectar ao MySQL.
--charset
forma abreviada: -A; tipo: string
Conjunto de caracteres padrão. Se o valor for utf8, define binmode do Perl em STDOUT para utf8,
passa a opção mysql_enable_utf8 para DBD :: mysql, e executa SET NAMES UTF8 após
conectando-se ao MySQL. Qualquer outro valor define binmode em STDOUT sem a camada utf8,
e executa SET NAMES após conectar-se ao MySQL.
- [não] verificar-alterar
padrão: sim
Analisa o "--alter" especificado e tenta avisar sobre um possível comportamento não intencional.
Atualmente, ele verifica:
Renomeação de coluna
Nas versões anteriores da ferramenta, renomear uma coluna com "ALTERAR nome da COLUNA
new_name "levaria à perda dos dados dessa coluna. A ferramenta agora analisa o
alterar a instrução e tenta capturar esses casos, então as colunas renomeadas devem ter
os mesmos dados dos originais. No entanto, o código que faz isso não é um
analisador de SQL soprado, então você deve primeiro executar a ferramenta com "--dry-run" e "--print"
e verifique se ele detecta as colunas renomeadas corretamente.
SOLTAR CHAVE PRIMÁRIA
Se "--alter" contiver "DROP PRIMARY KEY" (não diferencia maiúsculas de minúsculas e espaços), um aviso
é impresso e a ferramenta sai, a menos que "--dry-run" seja especificado. Alterando o
a chave primária pode ser perigosa, mas a ferramenta pode lidar com isso. Os gatilhos da ferramenta,
particularmente o gatilho DELETE, são mais afetados pela alteração da chave primária
porque a ferramenta prefere usar a chave primária para seus gatilhos. Você deve
primeiro execute a ferramenta com "--dry-run" e "--print" e verifique se os gatilhos estão
corrigir.
--check-intervalo
tipo: hora; padrão: 1
Tempo de sono entre as verificações de "--max-lag".
- [não] plano de verificação
padrão: sim
Verifique os planos de execução da consulta para segurança. Por padrão, esta opção faz com que a ferramenta seja executada
EXPLIQUE antes de executar consultas destinadas a acessar uma pequena quantidade de dados, mas
que pode acessar muitas linhas se o MySQL escolher um plano de execução incorreto. Isso inclui o
consultas para determinar os limites do bloco e as próprias consultas do bloco. Se aparecer
que o MySQL usará um plano de execução de consulta ruim, a ferramenta irá pular a parte do
tabela.
A ferramenta usa várias heurísticas para determinar se um plano de execução é ruim. O
primeiro é se EXPLAIN relata que o MySQL pretende usar o índice desejado para acessar
as linhas. Se o MySQL escolher um índice diferente, a ferramenta considerará a consulta insegura.
A ferramenta também verifica quanto dos relatórios de índice do MySQL será usado para o
inquerir. A saída EXPLAIN mostra isso na coluna key_len. A ferramenta lembra o
maior key_len visto, e pula pedaços onde o MySQL relata que usará um menor
prefixo do índice. Esta heurística pode ser entendida como pular pedaços que têm um
plano de execução pior do que outros pedaços.
A ferramenta imprime um aviso na primeira vez que um trecho é ignorado devido a uma execução incorreta
plano em cada tabela. Os pedaços subsequentes são ignorados silenciosamente, embora você possa ver o
contagem de pedaços ignorados na coluna SKIPPED na saída da ferramenta.
Esta opção adiciona algum trabalho de configuração para cada tabela e bloco. Embora o trabalho não seja
intrusivo para o MySQL, resulta em mais viagens de ida e volta para o servidor, o que consome
Tempo. Tornar os pedaços muito pequenos fará com que a sobrecarga se torne relativamente maior. Isto
é, portanto, recomendado que você não faça pedaços muito pequenos, porque a ferramenta pode levar
muito tempo para ser concluído se o fizer.
- [não] filtros de verificação de replicação
padrão: sim
Aborte se algum filtro de replicação estiver definido em qualquer servidor. A ferramenta procura o servidor
opções que filtram a replicação, como binlog_ignore_db e replicate_do_db. Se isso
encontra qualquer um desses filtros, ele aborta com um erro.
Se as réplicas estiverem configuradas com qualquer opção de filtragem, você deve ter cuidado para não
para modificar quaisquer bancos de dados ou tabelas existentes no mestre e não nas réplicas,
porque pode causar falha na replicação. Para obter mais informações sobre replicação
regras, vejahttp://dev.mysql.com/doc/en/replication-rules.html>.
--check-escravo-lag
tipo: string
Pause a cópia de dados até que o lag desta réplica seja menor que "--max-lag". O valor é um
DSN que herda propriedades das opções de conexão ("--port", "--user",
etc.). Esta opção substitui o comportamento normal de encontrar e continuamente
monitorar atraso de replicação em TODAS as réplicas conectadas. Se você não quer monitorar
TODAS as réplicas, mas você deseja que mais de uma réplica seja monitorada, então use o
Opção DSN para a opção "--recursion-method" em vez desta opção.
--chunk-index
tipo: string
Prefira este índice para tabelas de chunking. Por padrão, a ferramenta escolhe a maioria
índice apropriado para fragmentação. Esta opção permite que você especifique o índice que você
preferir. Se o índice não existir, a ferramenta voltará ao padrão
comportamento de escolha de um índice. A ferramenta adiciona o índice às instruções SQL em um
Cláusula "FORCE INDEX". Tenha cuidado ao usar esta opção; uma má escolha de índice poderia
causar mau desempenho.
--chunk-index-colunas
tipo: int
Use apenas esta quantidade de colunas mais à esquerda de um "- índice do bloco". Isso funciona apenas para
índices compostos e é útil nos casos em que um bug no otimizador de consulta do MySQL
(planejador) faz com que ele varra uma grande variedade de linhas em vez de usar o índice para localizar
pontos inicial e final com precisão. Esse problema às vezes ocorre em índices com
muitas colunas, como 4 ou mais. Se isso acontecer, a ferramenta pode imprimir um aviso
relacionado à opção "- [sem] plano de verificação". Instruir a ferramenta a usar apenas o primeiro
N colunas do índice é uma solução alternativa para o bug em alguns casos.
--tamanho do pedaço
tipo: tamanho; padrão: 1000
Número de linhas a serem selecionadas para cada fragmento copiado. Os sufixos permitidos são k, M, G.
Esta opção pode substituir o comportamento padrão, que é ajustar o tamanho do pedaço
dinamicamente para tentar fazer os chunks rodarem exatamente em segundos "--chunk-time". Quando isso
opção não é definida explicitamente, seu valor padrão é usado como ponto de partida, mas depois
isso, a ferramenta ignora o valor desta opção. Se você definir esta opção explicitamente,
no entanto, ele desativa o comportamento de ajuste dinâmico e tenta fazer todos os pedaços
exatamente o número especificado de linhas.
Há uma sutileza: se o índice do chunk não for único, então é possível que os chunks
será maior do que o desejado. Por exemplo, se uma tabela é fragmentada por um índice que
contém 10,000 de um determinado valor, não há como escrever uma cláusula WHERE que corresponda
apenas 1,000 dos valores, e esse pedaço terá pelo menos 10,000 linhas de tamanho. Tal
o trecho provavelmente será ignorado por causa de "--chunk-size-limit".
--chunk-tamanho-limite
tipo: float; padrão: 4.0
Não copie pedaços muito maiores do que o tamanho de pedaço desejado.
Quando uma tabela não tem índices exclusivos, os tamanhos dos pedaços podem ser imprecisos. Esta opção
especifica um limite máximo tolerável para a imprecisão. A ferramenta usa para
estimar quantas linhas existem no bloco. Se essa estimativa exceder a parte desejada
tamanho vezes o limite, então a ferramenta pula o pedaço.
O valor mínimo para esta opção é 1, o que significa que nenhum pedaço pode ser maior que
"--tamanho do pedaço". Você provavelmente não deseja especificar 1, porque as linhas relatadas por
EXPLAIN são estimativas, que podem ser diferentes do número real de linhas no
pedaço. Você pode desabilitar a verificação de pedaços grandes especificando um valor de 0.
A ferramenta também usa esta opção para determinar como lidar com chaves estrangeiras que fazem referência
a tabela a ser alterada. Veja "- método -alter-Foreign-keys-method" para detalhes.
--chunk-time
tipo: float; padrão: 0.5
Ajuste o tamanho do bloco dinamicamente para que cada consulta de cópia de dados demore tanto para ser executada.
A ferramenta rastreia a taxa de cópia (linhas por segundo) e ajusta o tamanho do bloco após cada
consulta de cópia de dados, de modo que a próxima consulta leve esse tempo (em segundos) para
executar. Ele mantém uma média móvel exponencialmente decrescente de consultas por segundo, então
que se o desempenho do servidor mudar devido a mudanças na carga do servidor, a ferramenta
adapta-se rapidamente.
Se esta opção for definida como zero, o tamanho do bloco não se ajusta automaticamente, então os tempos de consulta
variam, mas os tamanhos dos blocos de consulta não. Outra maneira de fazer a mesma coisa é especificar um
valor para "--chunk-size" explicitamente, em vez de deixá-lo no padrão.
--config
tipo: Array
Leia esta lista separada por vírgulas de arquivos de configuração; se especificado, este deve ser o primeiro
opção na linha de comando.
--carga crítica
tipo: Array; padrão: Threads_running = 50
Examine SHOW GLOBAL STATUS após cada trecho e aborte se a carga estiver muito alta. O
A opção aceita uma lista separada por vírgulas de variáveis de status e limites do MySQL. Um
opcional "= MAX_VALUE" (ou ": MAX_VALUE") pode seguir cada variável. Se não for dado, o
A ferramenta determina um limite examinando o valor atual na inicialização e dobrando-o.
Veja "--max-load" para mais detalhes. Essas opções funcionam de forma semelhante, exceto que este
opção irá abortar a operação da ferramenta em vez de pausá-la, e o valor padrão é
calculado de forma diferente se você não especificar nenhum limite. A razão para esta opção é como um
verificação de segurança no caso de os gatilhos na tabela original adicionarem muita carga ao servidor
que causa tempo de inatividade. Provavelmente não há um único valor de Threads_running que seja
errado para cada servidor, mas um padrão de 50 parece ser inaceitavelmente alto para
a maioria dos servidores, indicando que a operação deve ser cancelada imediatamente.
--base de dados
forma abreviada: -D; tipo: string
Conecte-se a este banco de dados.
- default-engine
Remova "ENGINE" da nova mesa.
Por padrão, a nova tabela é criada com as mesmas opções da tabela original,
portanto, se a tabela original usar InnoDB, a nova tabela usará InnoDB. Em certos
casos envolvendo replicação, isso pode causar alterações não intencionais em réplicas que usam um
motor diferente para a mesma mesa. Especificar esta opção faz com que a nova tabela
ser criado com o mecanismo padrão do sistema.
--defaults-file
forma abreviada: -F; tipo: string
Leia apenas as opções do mysql do arquivo fornecido. Você deve fornecer um nome de caminho absoluto.
- [não] drop-new-table
padrão: sim
Elimine a nova tabela se a cópia da tabela original falhar.
Especificar "--no-drop-new-table" e "--no-swap-tables" deixa a nova cópia alterada
da tabela sem modificar a tabela original. Veja "--new-table-name".
--no-drop-new-table não funciona com "drop_swap de alter-estrangeiras-chaves-método".
- [no] drop-old-table
padrão: sim
Remova a tabela original após renomeá-la. Depois que a mesa original foi
renomeado com sucesso para permitir que a nova tabela tome o seu lugar e, se não houver erros,
a ferramenta descarta a tabela original por padrão. Se houver algum erro, a ferramenta sai
a mesa original no lugar.
Se "--no-swap-tables" for especificado, então não há nenhuma tabela antiga para descartar.
- [sem] gatilhos de queda
padrão: sim
Solte os gatilhos na mesa antiga. "--no-drop-triggers" força "--no-drop-old-table".
--funcionamento a seco
Crie e altere a nova tabela, mas não crie gatilhos, copie dados ou substitua o
tabela original.
--executar
Indique que leu a documentação e deseja alterar a tabela. Você deve
especifique esta opção para alterar a tabela. Se você não fizer isso, a ferramenta só funcionará
algumas verificações de segurança e saída. Isso ajuda a garantir que você leu a documentação
e entender como usar esta ferramenta. Se você não leu a documentação, faça
não especifique esta opção.
--força
Esta opção ignora a confirmação no caso de usar alter-Foreign-keys-method = none,
que pode quebrar as restrições de chave estrangeira.
--Socorro
Mostre ajuda e saia.
--hospedeiro
forma abreviada: -h; tipo: string
Conecte-se ao host.
--max-flow-ctl
tipo: float
Um pouco semelhante a --max-lag, mas para clusters PXC. Verifique o tempo médio gasto pelo cluster
pausar para Controle de Fluxo e fazer a ferramenta pausar se ultrapassar a porcentagem indicada
na opção. Um valor de 0 faria a ferramenta pausar quando * qualquer * Controle de fluxo
atividade é detectada. O padrão é nenhuma verificação de controle de fluxo. Esta opção está disponível
para PXC versões 5.6 ou superior.
--max-lag
tipo: hora; padrão: 1s
Pause a cópia de dados até que o atraso de todas as réplicas seja menor que esse valor. Após cada data-
consulta de cópia (cada pedaço), a ferramenta analisa o atraso de replicação de todas as réplicas para
ao qual ele se conecta, usando Seconds_Behind_Master. Se alguma réplica estiver atrasada mais do que
o valor desta opção, então a ferramenta irá dormir por "--check-interval" segundos,
em seguida, verifique todas as réplicas novamente. Se você especificar "--check-slave-lag", então a ferramenta apenas
examina esse servidor em busca de lag, nem todos os servidores. Se você deseja controlar exatamente quais
servidores os monitores de ferramenta, use o valor DSN para "- método de recursão".
A ferramenta espera uma eternidade para que as réplicas parem de atrasar. Se alguma réplica for interrompida, o
A ferramenta espera indefinidamente até que a réplica seja iniciada. A cópia de dados continua quando todos
as réplicas estão em execução e não atrasam muito.
A ferramenta imprime relatórios de progresso enquanto espera. Se uma réplica for interrompida, ela imprime um
relatório de progresso imediatamente e, em seguida, novamente a cada intervalo de relatório de progresso.
--carregamento máximo
tipo: Array; padrão: Threads_running = 25
Examine SHOW GLOBAL STATUS após cada trecho e faça uma pausa se houver alguma variável de status
acima de seus limites. A opção aceita uma lista separada por vírgulas de MySQL
variáveis de status. Um opcional "= MAX_VALUE" (ou ": MAX_VALUE") pode seguir cada
variável. Se não for fornecido, a ferramenta determina um limite examinando o atual
valor e aumentando em 20%.
Por exemplo, se você quiser que a ferramenta pause quando Threads_connected ficar muito alto, você
pode especificar "Threads_connected", e a ferramenta irá verificar o valor atual quando
começa a funcionar e adiciona 20% a esse valor. Se o valor atual for 100, então a ferramenta
irá pausar quando Threads_connected exceder 120, e retomará o trabalho quando estiver abaixo de 120
novamente. Se você deseja especificar um limite explícito, como 110, você pode usar qualquer um
"Threads_connected: 110" ou "Threads_connected = 110".
O objetivo desta opção é evitar que a ferramenta adicione muita carga ao
servidor. Se as consultas de cópia de dados forem intrusivas ou se causarem esperas de bloqueio, então
outras consultas no servidor tendem a bloquear e enfileirar. Isso normalmente vai causar
Threads_running para aumentar, e a ferramenta pode detectar isso executando SHOW GLOBAL
STATUS imediatamente após a conclusão de cada consulta. Se você especificar um limite para este
variável, então você pode instruir a ferramenta a esperar até que as consultas estejam funcionando normalmente
novamente. Isso não impedirá a fila, no entanto; isso só dará ao servidor uma chance
para se recuperar da fila. Se você notar filas, é melhor diminuir o
pedaço de tempo.
--nome-da-nova-tabela
tipo: string; padrão:% T_new
Novo nome da tabela antes de ser trocada. % T é substituído pelo nome da tabela original.
Quando o padrão é usado, a ferramenta prefixa o nome com até 10 "_" (sublinhado) para
encontre um nome de tabela exclusivo. Se um nome de tabela for especificado, a ferramenta não o prefixa
com "_", então a tabela não deve existir.
--senha
forma abreviada: -p; tipo: string
Senha para usar ao conectar. Se a senha contiver vírgulas, elas devem ser escapadas
com uma barra invertida: "exam \, ple"
--pid
tipo: string
Crie o arquivo PID fornecido. A ferramenta não iniciará se o arquivo PID já existir e
o PID que ele contém é diferente do PID atual. No entanto, se o arquivo PID
existe e o PID que contém não está mais em execução, a ferramenta irá sobrescrever o PID
arquivo com o PID atual. O arquivo PID é removido automaticamente quando a ferramenta é encerrada.
--plugar
tipo: string
Arquivo de módulo Perl que define uma classe "pt_online_schema_change_plugin". Um plugin
permite que você escreva um módulo Perl que pode se conectar a muitas partes do pt-online-schema-
mudança. Isso requer um bom conhecimento das convenções Perl e Percona Toolkit, que
estão além do escopo desta documentação. Entre em contato com a Percona se você tiver
perguntas ou precisa de ajuda.
Consulte "PLUGIN" para obter mais informações.
--porta
forma abreviada: -P; tipo: int
Número da porta a ser usada para conexão.
--imprimir
Imprima instruções SQL em STDOUT. Especificar esta opção permite que você veja a maior parte do
instruções que a ferramenta executa. Você pode usar esta opção com "--dry-run", para
exemplo.
--progresso
tipo: array; padrão: hora, 30
Imprima relatórios de progresso para STDERR enquanto copia linhas. O valor é separado por vírgulas
lista com duas partes. A primeira parte pode ser porcentagem, tempo ou iterações; a
a segunda parte especifica com que freqüência uma atualização deve ser impressa, em porcentagem, segundos,
ou número de iterações.
--quieto
forma abreviada: -q
Não imprime mensagens para STDOUT (desativa "--progress"). Erros e avisos são
ainda impresso em STDERR.
--recurso
tipo: int
Número de níveis a serem repetidos na hierarquia ao descobrir réplicas. O padrão é
infinito. Veja também "- método-recursão".
--método de recursão
tipo: array; padrão: lista de processos, hosts
Método de recursão preferido para descobrir réplicas. Os métodos possíveis são:
MÉTODO USOS
===============================
lista de processos MOSTRAR LISTA DE PROCESSOS
apresentador SHOW SLAVE HOSTS
dsn = DSN DSNs de uma mesa
nenhum Não encontrar escravos
O método processlist é o padrão, porque SHOW SLAVE HOSTS não é confiável.
No entanto, o método de hosts pode funcionar melhor se o servidor usar uma porta não padrão (não
3306). A ferramenta geralmente faz a coisa certa e encontra todas as réplicas, mas você pode fornecer
um método preferido e será usado primeiro.
O método hosts requer que as réplicas sejam configuradas com report_host, report_port,
etc.
O método dsn é especial: ele especifica uma tabela a partir da qual outras strings DSN são lidas.
O DSN especificado deve especificar um D e t, ou um t qualificado pelo banco de dados. A tabela DSN
deve ter a seguinte estrutura:
CRIAR TABELA `dsns` (
`id` int(11) NÃO NULO AUTO_INCREMENT,
`id_pai` int(11) PADRÃO NULO,
`dsn` varchar(255) NÃO NULO,
CHAVE PRIMÁRIA (`id`)
);
Para fazer com que a ferramenta monitore apenas os hosts 10.10.1.16 e 10.10.1.17 para o atraso de replicação,
insira os valores "h = 10.10.1.16" e "h = 10.10.1.17" na tabela. Atualmente, o
Os DSNs são ordenados por id, mas id e parent_id são ignorados.
--set-vars
tipo: Array
Defina as variáveis do MySQL nesta lista separada por vírgulas de pares "variável = valor".
Por padrão, os conjuntos de ferramentas:
wait_timeout = 10000
innodb_lock_wait_timeout = 1
lock_wait_timeout = 60
As variáveis especificadas na linha de comando substituem esses padrões. Por exemplo,
especificar "--set-vars wait_timeout = 500" substitui o valor padrão de 10000.
A ferramenta imprime um aviso e continua se uma variável não puder ser definida.
--dormir
tipo: float; padrão: 0
Quanto tempo para dormir (em segundos) após copiar cada pedaço. Esta opção é útil quando
estrangulamento por "--max-lag" e "--max-load" não são possíveis. Um pequeno, sub-segundo
valor deve ser usado, como 0.1, caso contrário, a ferramenta pode demorar muito para copiar
grandes mesas.
--tomada
formas curtas; tipo: string
Arquivo de soquete a ser usado para conexão.
--Estatisticas
Imprima estatísticas sobre contadores internos. Isso é útil para ver quantos avisos
foram suprimidos em comparação com o número de INSERT.
- [sem] tabelas de troca
padrão: sim
Troque a mesa original pela nova mesa alterada. Esta etapa completa o online
processo de mudança de esquema, fazendo com que a tabela com o novo esquema ocupe o lugar do
tabela original. A mesa original se torna a "mesa antiga" e a ferramenta a descarta
a menos que você desabilite "- [no] drop-old-table".
--tentativas
tipo: array
Quantas vezes para tentar operações críticas. Se certas operações falham devido a não
erros fatais recuperáveis, a ferramenta espera e tenta a operação novamente. Estes são
as operações que são repetidas, com seu número padrão de tentativas e tempo de espera
entre as tentativas (em segundos):
OPERAÇÃO TENTA ESPERA
===================== ===== ====
criar_triggers 10 1
drop_triggers 10 1
copy_rows 10 0.25
tabelas_swap 10 1
atualização_foreign_keys 10 1
analisar_tabela 10 1
Para alterar os padrões, especifique os novos valores como:
--tries create_triggers: 5: 0.5, drop_triggers: 5: 0.5
Isso faz com que a ferramenta tente "create_triggers" e "drop_triggers" 5 vezes com um 0.5
segunda espera entre as tentativas. Portanto, o formato é:
operação: tentativas: espera [, operação: tentativas: espera]
Todos os três valores devem ser especificados.
Observe que a maioria das operações são afetadas apenas no MySQL 5.5 e mais recente por
"lock_wait_timeout" (veja "--set-vars") por causa dos bloqueios de metadados. O "copy_rows"
a operação é afetada em qualquer versão do MySQL por "innodb_lock_wait_timeout".
Para criar e descartar gatilhos, o número de tentativas se aplica a cada "CREATE
Instrução TRIGGER "e" DROP TRIGGER "para cada acionador. Para copiar linhas, o número
de tentativas aplica-se a cada bloco, não a toda a tabela. Para a troca de tabelas, o número
de tentativas geralmente se aplica uma vez porque geralmente há apenas um "RENAME TABLE"
declaração. Para reconstruir restrições de chave estrangeira, o número de tentativas se aplica a
cada declaração (declarações "ALTER" para "rebuild_constraints"
"- método de chaves estrangeiras"; outras instruções para o método "drop_swap").
A ferramenta tenta novamente cada operação se esses erros ocorrerem:
Tempo limite de espera de bloqueio (innodb_lock_wait_timeout e lock_wait_timeout)
Deadlock encontrado
A consulta foi eliminada (KILL QUERY )
A conexão foi interrompida (KILL CONNECTION )
Conexão perdida com o MySQL
No caso de conexões perdidas e interrompidas, a ferramenta se reconectará automaticamente.
Falhas e novas tentativas são registradas em "--statistics".
--do utilizador
forma abreviada: -u; tipo: string
Usuário para login, se não for o usuário atual.
--versão
Mostra a versão e sai.
- [sem] verificação de versão
padrão: sim
Verifique a versão mais recente do Percona Toolkit, MySQL e outros programas.
Este é um recurso padrão de "verificar se há atualizações automaticamente", com dois adicionais
recursos. Primeiro, a ferramenta verifica a versão de outros programas no sistema local em
além de sua própria versão. Por exemplo, ele verifica a versão de cada servidor MySQL
ele se conecta ao Perl e ao módulo Perl DBD :: mysql. Em segundo lugar, ele verifica e avisa
sobre versões com problemas conhecidos. Por exemplo, MySQL 5.5.25 tinha um bug crítico e
foi relançado como 5.5.25a.
Quaisquer atualizações ou problemas conhecidos são impressos em STDOUT antes da saída normal da ferramenta.
Este recurso nunca deve interferir na operação normal da ferramenta.
Para mais informações visite .
PLUGAR
O arquivo especificado por "--plugin" deve definir uma classe (ou seja, um pacote) chamado
"pt_online_schema_change_plugin" com uma sub-rotina "new ()". A ferramenta irá criar um
instância desta classe e chame quaisquer ganchos que ela definir. Não são necessários ganchos, mas um
plugin não é muito útil sem eles.
Esses ganchos, nesta ordem, são chamados se definidos:
o init
antes_criar_nova_tabela
after_create_new_table
antes_alter_new_table
after_alter_new_table
before_create_triggers
after_create_triggers
antes_copiar_linhas
after_copy_rows
antes_swap_tables
after_swap_tables
before_update_foreign_keys
after_update_foreign_keys
antes_drop_old_table
after_drop_old_table
antes_drop_triggers
antes_saída
get_slave_lag
Cada gancho recebe argumentos diferentes. Para ver quais argumentos são passados para um gancho,
procure o nome do gancho no código-fonte da ferramenta, como:
# --plugin gancho
if ($ plugin && $ plugin-> can ('init')) {
$ plugin-> init (
orig_tbl => $ orig_tbl,
child_tables => $ child_tables,
renamed_cols => $ renamed_cols,
slaves => $ slaves,
slave_lag_cxns => $ slave_lag_cxns,
);
}
O comentário "# --plugin hook" precede cada chamada de gancho.
Entre em contato com a Percona se tiver dúvidas ou precisar de ajuda.
dsn OPÇÕES
Essas opções de DSN são usadas para criar um DSN. Cada opção é fornecida como "opção = valor".
As opções diferenciam maiúsculas de minúsculas, portanto, P e p não são a mesma opção. Não pode haver
espaço em branco antes ou depois de "=" e se o valor contiver espaço em branco, ele deve ser colocado entre aspas.
As opções de DSN são separadas por vírgulas. Veja a página de manual do percona-toolkit para detalhes completos.
· UMA
dsn: conjunto de caracteres; cópia: sim
Conjunto de caracteres padrão.
·D
dsn: banco de dados; cópia: sim
Banco de dados para a tabela antiga e nova.
F
dsn: mysql_read_default_file; cópia: sim
Leia apenas as opções padrão do arquivo fornecido
· H
dsn: host; cópia: sim
Conecte-se ao host.
· P
dsn: senha; cópia: sim
Senha para usar ao conectar. Se a senha contiver vírgulas, elas devem ser escapadas
com uma barra invertida: "exam \, ple"
·P
dsn: porta; cópia: sim
Número da porta a ser usada para conexão.
· S
dsn: mysql_socket; cópia: sim
Arquivo de soquete a ser usado para conexão.
· T
dsn: tabela; cópia: não
Tabela para alterar.
· você
dsn: usuário; cópia: sim
Usuário para login, se não for o usuário atual.
MEIO AMBIENTE
A variável de ambiente "PTDEBUG" permite a saída de depuração detalhada para STDERR. Para habilitar
depurar e capturar toda a saída para um arquivo, execute a ferramenta como:
PTDEBUG = 1 pt-online-schema-change ...> FILE 2> & 1
Tenha cuidado: a saída de depuração é volumosa e pode gerar vários megabytes de saída.
SISTEMA REQUISITOS
Você precisa de Perl, DBI, DBD :: mysql e alguns pacotes principais que devem ser instalados em qualquer
versão razoavelmente nova do Perl.
Esta ferramenta funciona apenas no MySQL 5.0.2 e versões mais recentes, porque versões anteriores não
apóie gatilhos.
Use pt-online-schema-changep online usando serviços onworks.net