Necesito mover un archivo grande (tabla corrupta de MySQL ~ 40GB) a un servidor separado para repararlo. (Al intentar reparar en mi servidor de producción, rápidamente mató al servidor).
Para hacer esto, quiero sincronizar los archivos .frm, .MYI y .MYD de mi servidor de producción a un servidor en la nube.
Estoy copiando los archivos de / var / lib / mysql / {database} / a / home / {myuser} para no tener que habilitar el acceso raíz para el comando rsync y estar 100% seguro de que el archivo de la base de datos no está en uso (no debería escribirse ni leerse, pero obviamente no quiero cerrar mi base de datos de producción para asegurarme).
El primer archivo que intenté copiar era de unos 10 GB. Estoy transfiriendo de una parte de mi servidor de producción a la otra, es decir, a la misma matriz de discos.
Desafortunadamente, el comando de copia "cp filename newfilename" tomó tantos recursos que detuvo el servidor.
¿Cómo puedo usar menos recursos al copiar el archivo a un directorio diferente? (Realmente no importa cuánto tiempo tome).
Suponiendo que logré hacer esto, ¿qué uso de recursos puedo esperar al sincronizar el archivo a la nube?
¿Alguien puede sugerir una mejor manera de hacer esto? Me estoy quedando rápidamente sin espacio en disco, así que necesito reparar y archivar esta tabla lo antes posible.
fuente
nice
por costumbre en su mayoría.iotop
También es tu amigo.nice -n 20 ionice -c 3 cp /var/lib/mysql/{database}/{table}.MYI /home/{USER}/
Esto aumentó la carga en mi servidor, lo que lo ralentizó un poco, pero el sitio web estuvo disponible mientras duró la transferenciaDos opciones además de la limitación de ancho de banda de rsync:
ionice -c 3 cp foo bar
buffer -u 150 -m 16m -s 100m -p 75 -i foo -o bar
ionice
interactuará con el planificador de E / S.buffer
es un búfer circular destinado a ayudar a los dispositivos de caracteres a ser más eficientes, pero-u 150
pausará 150 microsegundos entre escrituras que, según el manual, pueden ser suficientes para dar espacio a un disco para respirar.Ambos
ionice
ybuffer
están disponibles en una compilación de Ubuntu.iotop
es útil si tiene CONFIG_TASK_DELAY_ACCT configurado en su kernel, pero mi cuadro de Ubuntu no lo hizo, lo que limita severamente la usabilidad del comando. Ya sé qué comando está ahogando mi disco duro, solo quiero darle un respiro.Además, mientras la copia está en progreso, mire la salida de
iostat -x 1
(generalmente en el paquete sysstat) y vea que el campo% ocupado para su dispositivo es 90% o menos durante la copia. Si está al 99-100%, entonces está eliminando otros procesos para E / S.fuente
ionice -c 3 -p $pidUnison
está trabajando para unísono en HDD externo, gracias !!use rsync con el conmutador --bwlimit = KBPS (límite de ancho de banda de E / S; KBytes por segundo). juega con un archivo más pequeño y trata de encontrar una combinación óptima entre la velocidad de transferencia y el uso del sistema. Monitor en el segundo shell con "vmstat 1"
fuente
rsync
copiará archivos localmente. Piensarsync --bwlimit=28000 foo.frm /bar/foo.frm
y luego míralo coniostat
. No estoy seguro de por quévmstat
te diría si estuvieras saturando un disco. Busque% ocupado eniostat
.Una alternativa es:
Pero no creo que funcione si $ {src} es un archivo en crecimiento ... ¿puede sugerir una forma de copiar y esperar a que se cierre la fuente ...
fuente