Eu preciso mover um arquivo grande (tabela MySQL corrompida ~ 40GB) para um servidor separado para repará-lo. (Ao tentar reparar no meu servidor de produção, ele rapidamente matou o servidor).
Para fazer isso, desejo sincronizar novamente os arquivos .frm, .MYI e .MYD do meu servidor de produção em um servidor em nuvem.
Estou copiando os arquivos de / var / lib / mysql / {database} / para / home / {myuser} para que não precise ativar o acesso root para o comando rsync e tenha 100% de certeza de que o arquivo do banco de dados não está em uso (não deve ser gravado ou lido, mas obviamente não quero desligar meu banco de dados de produção para garantir).
O primeiro arquivo que tentei copiar tinha cerca de 10 GB. Estou transferindo de uma parte do meu servidor de produção para a outra, ou seja, para a mesma matriz de discos.
Infelizmente, o comando copy "cp filename newfilename" consumiu tantos recursos que deixou o servidor parado.
Como posso usar menos recursos ao copiar o arquivo para um diretório diferente? (Realmente não importa quanto tempo leva).
Supondo que eu consiga fazer isso, que uso de recursos posso esperar ao sincronizar novamente o arquivo na nuvem?
Alguém pode sugerir uma maneira melhor de fazer isso? Como estou ficando sem espaço em disco rapidamente, é necessário reparar e arquivar esta tabela o mais rápido possível.
fonte
nice
o hábito principalmente.iotop
também é seu amigo.nice -n 20 ionice -c 3 cp /var/lib/mysql/{database}/{table}.MYI /home/{USER}/
Isso aumentou a carga no meu servidor, diminuindo um pouco a velocidade, mas o site ficou disponível durante a transferênciaDuas opções além da limitação da largura de banda rsync:
ionice -c 3 cp foo bar
buffer -u 150 -m 16m -s 100m -p 75 -i foo -o bar
ionice
fará interface com o planejador de E / S.buffer
é um buffer circular destinado a ajudar os dispositivos de caracteres a serem mais eficientes, mas-u 150
fará uma pausa de 150 microssegundos entre gravações que, de acordo com o manual, podem ser suficientes para dar espaço ao disco para respirar.Ambos
ionice
ebuffer
estão disponíveis em uma compilação Ubuntu do estoque.iotop
é útil se você tiver o CONFIG_TASK_DELAY_ACCT configurado no seu kernel, mas minha caixa do Ubuntu não limitou severamente a usabilidade do comando. Eu já sei qual comando está afogando meu disco rígido, só quero dar algum espaço para respirar.Além disso, enquanto a cópia estiver em andamento, observe a saída de
iostat -x 1
(geralmente no pacote sysstat) e veja se o campo% ocupado do dispositivo é 90% ou menos durante a cópia. Se estiver entre 99 e 100%, você estará passando por outros processos de E / S.fonte
ionice -c 3 -p $pidUnison
está trabalhando para uníssono no disco rígido externo, thx !!use rsync com a opção --bwlimit = KBPS (limite de largura de banda de E / S; KBytes por segundo). brinque com um arquivo menor e tente encontrar a combinação ideal entre velocidade de transferência e uso do sistema. Monitorar no segundo shell com "vmstat 1"
fonte
rsync
copiará arquivos localmente. Pensersync --bwlimit=28000 foo.frm /bar/foo.frm
e depois assistaiostat
. Não sei porvmstat
que lhe diria se você estava saturando uma unidade. Procure% ocupado emiostat
.Uma alternativa é:
Mas acho que não funcionará se $ {src} for um arquivo crescente ... você pode sugerir uma maneira de copiar e esperar que o código seja fechado ...
fonte