Script para optimizar las tablas fragmentadas en MySQL

Bueno otro buen script a la huchaca… esta escrito en bash aparte de ser utilisisimo porque chequea las tablas fragmentadas y tambien chequea todas las bbdds en busca de tablas MyISAM o INNODB y las optimiza.

#!/bin/bash

VERSION="0.7.2"
log="$PWD/mysql_error_log.txt"

echo "MySQL fragmentation finder (and fixer) v$VERSION, written by Phil Dufault ( http://www.dufault.info/ )"

showHelp() {
echo -e "\tThis script only repairs MyISAM and InnoDB tables"
echo -e "\t--help or -h\t\tthis menu"
echo -e "\t--user username\tspecify mysql username to use\n\t\t\tusing this flag means the script will ask for a password during runtime, unless you supply..."
echo -e "\t--password \"yourpassword\""
echo -e "\t--host hostname\tspecify mysql hostname to use, be it local (default) or remote"
}

#s parse arguments
while [[ $1 == -* ]]; do
case "$1" in
--help|-h) showHelp; exit 0;;
--user) mysqlUser="$2"; shift 2;;
--password) mysqlPass="$2"; shift 2;;
--host) mysqlHost="$2"; shift 2;;
--) shift; break;;
esac
done

# prevent overwriting the commandline args with the ones in .my.cnf, and check that .my.cnf exists
if [[ ! $mysqlUser && -f "$HOME/.my.cnf" ]]; then
if grep "user=" "$HOME/.my.cnf" >/dev/null 2>&1; then
if grep "pass=" "$HOME/.my.cnf" >/dev/null 2>&1; then
mysqlUser=$(grep user= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); mysqlPass=$(grep pass= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); if grep "host=" "$HOME/.my.cnf" >/dev/null 2>&1; then
mysqlHost=$(grep host= < "$HOME/.my.cnf" | awk -F\" '{print $2}'); fi else echo "Found no pass line in your .my.cnf,, fix this or specify with --password" fi else echo "Found no user line in your .my.cnf, fix this or specify with --user" exit 1; fi fi # set localhost if no host is set anywhere else if [[ ! $mysqlHost ]]; then mysqlHost="127.0.0.1" fi # error out if [[ ! $mysqlUser ]]; then echo "Authentication information not found as arguments, nor in $HOME/.my.cnf" echo showHelp exit 1 fi if [[ ! $mysqlPass ]]; then echo -n "Enter your MySQL password: " read -s mysqlPass fi # Test connecting to the database: mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "show status" >/dev/null 2>&1
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information.";
exit 1;
fi

# Retrieve the listing of databases:
databases=( $(mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "show databases;" 2>"$log") );
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi

echo -e "Found ${#databases[@]} databases";
for i in ${databases[@]}; do
# get a list of all of the tables, grep for MyISAM or InnoDB, and then sort out the fragmented tables with awk
fragmented=( $(mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" --skip-column-names --batch -e "SHOW TABLE STATUS FROM $i;" 2>"$log" | awk '{print $1,$2,$10}' | egrep "MyISAM|InnoDB" | awk '$3 > 0' | awk '{print $1}') );
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi
tput sc
echo -n "Checking $i ... ";
if [[ ${#fragmented[@]} -gt 0 ]]; then
if [[ ${#fragmented[@]} -gt 0 ]]; then
if [[ ${#fragmented[@]} -gt 1 ]]; then
echo "found ${#fragmented[@]} fragmented tables."
else
echo "found ${#fragmented[@]} fragmented table."
fi
fi
for table in ${fragmented[@]}; do
let fraggedTables=$fraggedTables+1;
echo -ne "\tOptimizing $table ... ";
mysql -u"$mysqlUser" -p"$mysqlPass" -h"$mysqlHost" -D "$i" --skip-column-names --batch -e "optimize table $table" 2>"$log" >/dev/null
if [[ $? -gt 0 ]]; then
echo "An error occured, check $log for more information."
exit 1;
fi
echo done
done
else
tput rc
tput el
fi
unset fragmented
done

# footer message
if [[ ! $fraggedTables -gt 0 ]]; then
echo "No tables were fragmented, so no optimizing was done.";
else
if [[ $fraggedTables -gt 1 ]]; then
echo "$fraggedTables tables were fragmented, and were optimized.";
else
echo "$fraggedTables table was fragmented, and was optimized.";
fi
fi

if [[ ! -s $log ]]; then
rm -f "$log"
fi

unset fraggedTables

Link | http://www.dufault.info/blog/a-script-to-optimize-fragmented-tables-in-mysql/

Eliminar www de la url con .htaccess y Mod_rewrite

En algún momento del desarrollo de un nuevo sitio web, deberemos decidir si queremos la url con www o sin ellas. Una vez decidido, lo podemos llevar a cabo a través del fichero .htaccess.

Para eliminarlas:

# Quitar el www del nombre de dominio
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.midominio\.com$ [NC]
RewriteRule ^(.*)$ http://midominio.com/$1 [R=301,QSA,L]
</IfModule>

Si lo que queremos es que se agregen siempre las www al nombre del dominio, entonces aplicamos lo siguiente en el archivo .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Redirigir el dominio sin www a www
RewriteCond %{HTTP_HOST} ^midominio\.com$ [NC]
RewriteRule ^(.*)$ http://www.midominio.com/$1 [R=301,QSA,L]
</IfModule>

Si quereis un editor Online de .htaccess con muchas opciones lo teneis aqui http://htaccess-online.blogofsysadmins.com/

Script para después de instalar Ubuntu Lucid Lynx 10.04

Una vez instalado Ubuntu 10.04 Lucid Lynx, con la ejecución del siguiente script, podréis poner al día vuestro sistema de una forma automática, ahorrando el proceso de consola ( aunque tampoco es que hacer el tipico copy&paste, que todos hacemos es que sea mucho trabajo, pero lo cierto es que con el script las siguientes tareas descritas se realizaran de forma automática:

  • Agrega repositorios (Medibuntu, getdeb, etc).
  • Descarga e instala las últimas actualizaciones.
  • Instala Ubuntu Tweak.
  • Instala codecs, plugins del navegador web (Java, Flash), un apoyo adicional para los archivos (RAR, 7-Zip) y fuentes adicionales, instala el más reciente reproductor de Flash para Ubuntu 10,04 Lucid Lynx 64 del sitio de Adobe.
  • Ajustes GConf: mueve los botones de nuevo a la derecha, desactiva el sonido de entrada GDM, se fija el comportamiento del gestor de actualización para mostrar siempre las actualizaciones y permite los iconos de los menús y botones.
  • Instala GIMP (que se ha eliminado de Ubuntu 10,04).
  • Instala VLC.
  • Instala el cliente de correo electrónico Thunderbird.
  • Instale el navegador web Chromium.
  • Instala Google Chrome – la última versión dev (se descarga la versión de 32 bits o 64 de forma automática – dependiendo de la arquitectura de su sistema).
  • Instala WINE.
  • Instala MPlayer.
  • Establece la codificación de caracteres de MPlayer y Totem  a Central / Europa del Este (Windows-1250), pueden desactivar esto quitando líneas: 64 y 69,70,71,72,73,74,75, o desde la configuración manual en el menú del script.
  • Instala el cliente de mensajería instantánea Pidgin.
  • Tiene con una interfaz gráfica de usuario – bueno, casi, lo único que tienen que hacer es marcar algunas cajas de verificación y la secuencia de comandos hará el resto.
  • Se añadió la instalación de Dropbox (incluyendo el repositorio de Dropbox que es paraKarmic  por ahora, pero funciona en Lucid también – los desarroladores prometen que usará el repositorio para Lucid cuando Dropbox lo de a conocer).
  • Instala las herramientas de desarrollo (de build-essential a Subversion y GIT).
  • Añadido gnome-do.
  • Elimina iconos de unidad del escritorio.
  • Arregla el problema de lentitud del repositorio de Google Chrome para el comando “apt-get update”.
  • Permite desactivar en la pantalla de entrada GDM la lista de usuarios.
  • Añade repositorios: Ubuntu Restricted Extras, Medibuntu, getdeb, Dropbox (sólo si se selecciona para instalar Dropbox)
  • Se instala desde los repositorios: The GIMP, Pidgin, el vino, navegador de cromo, Gnome Do, Guake, VLC media player, Mplayer, SMPlayer, Thunderbird, Dropbox, codecs (multimedia, java, flash), el apoyo archivos adicionales, soporte para DVD y las fuentes, Ubuntu Tweak, Deluge Torrent, CompizConfig Administrador de configuración, herramientas de desarrollo.
  • Descarga e instala los siguientes: navegador de Google Chrome (se descarga la construcción de 32 o 64 bits, dependiendo de su versión de Ubuntu), los emoticones oficiales de Pidgin (para todos los protocolos), la más reciente de Flash Player para 64 bits a través de la web de Adobe, Skype (32 o 64 bits, dependiendo de su versión de Ubuntu).
  • Tweaks:

Mueve los botones de ventana a la derecha (estilo Karmic).
Cambia el comportamiento del Administrador de actualizaciones.
Quita los iconos de las unidades montadas en el escritorio.
Deshabilita el sonido entrada GDM.
Habilita los iconos de los menús y botones.
Deshabilita en el inicio de sesión GDM la lista de usuarios.
Quita el paquete ubuntu-docs (libera 252MB).
Cambia en Gnome Calendar el primer día de la semana de domingo a lunes.
Descarga (o instala) y configura fuentes.
Arregla el “apt-get update” para evitar demoras en el repositorio de Google
Automáticamente monta unidades NTFS en el arranque.

  • Automáticamente acepta la licencia de JAVA.
  • La nueva versión también corrige un montón de errores de la versión anterior.

Tener en cuenta que, antes de ejecutar el script estén corriendo el script como root; que ni Synaptic ni apt-get ni dpkg ni centro de software está en ejecución; comprueben la conexión a Internet para asegurarse de que realmente se pueden instalar los paquetes, etc.

Para ejecutarlo deben pegar las siguientes líneas en la consola:

sudo apt-get install zenity

wget http://launchpad.net/ubuntustart/trunk/0.4.2/+download/ubuntu-10.04-script

chmod +x ubuntu-10.04-script

sudo ./ubuntu-10.04-script

También lo pueden bajar desde aquí: https://launchpad.net/ubuntustart/+download

Espero que les sirva. Yo lo probé y me dio buenos resultados este script para Ubuntu 10.04 .

Y tu, ¿ te animas a crear o mejorar un script mejor que este ?, si lo haces espero lo compartas con nosotros, y lo publiques en tu blog para difundirlo.
Bueno gente, espero que les sea útil, que no tengan problemas para instalarlo y que mejor sustancialmente su experiencia en Ubuntu 10.04.

El Archivo Zip de la muerte – 42.zip

42.zip es un archivo zip de 42.374 bytes, contiene 16 archivos zips que a su vez contienen otros 16 zips y así hasta 6 veces. Los 16 últimos zips contienen un archivo de 4,3 Gb cada uno. Si descomprimimos el archivo 42.zip de 42.374 bytes obtendriamos 4.5 Pb de datos descomprimidos.

  • 16 x 4294967295 = 68.719.476.720 (68GB)
  • 16 x 68719476720 = 1.099.511.627.520 (1TB)
  • 16 x 1099511627520 = 17.592.186.040.320 (17TB)
  • 16 x 17592186040320 = 281.474.976.645.120 (281TB)
  • 16 x 281474976645120 = 4.503.599.626.321.920 (4,5PB)

Este tipo de archivos se denominan Zips de la muerte o Zips bomba y suelen usarse como herramienta para ataques DoS.

PD:  hay que ver como una cosa tan pequeña te puede joder el servidor enterito 😀 , así que pequeños sysadmins tener muy definidas las reglas de cuotas de disco con sus respectivas alertas a vuestro email 😀
raiola manda y no el panda