miércoles, 24 de julio de 2013

Buscar archivos con cierta palabra o frase


Desde la consola de linux, queremos encontrar las lineas que hacen referencia a una palabra en específico.

Por lo general es muy util para consultar archivos de log de nuestros programas o de nuestro sistema operativo:


sintaxis:
cat nombrearchivo | grep -i palabraabuscar | less

Ejemplo:
cat /var/log/messages | grep -i pacoadmin | less

Saludos.

martes, 9 de julio de 2013

Tamaño tablas y arbol de directorios por consola

Para consultar el tamaño de las tablas de una base de datos MySQL tenemos el siguiente query que nos ayuda:

SELECT table_name, table_rows, data_length, index_length,
 round(((data_length + index_length) / 1024 / 1024),2) "Size in MB"
 FROM information_schema.TABLES WHERE table_schema = "nombre_basedatos"
ORDER BY 5;

Obviamente hay que cambiar el nombre de la base de datos y hay que tener derechos para consultar la base de datos information_schema.


viernes, 28 de junio de 2013

Delay en nuestra replicación a espejo #MySQL

Delay en replicación de datos a otro servidor "espejo".

Hace unos días se me presento, por descuido, un problema. A mas de alguno
le abra pasado que sin querer elimina una tabla (drop table nombretabla) y se da cuenta que la necesita en el mismo instante, para colmo esta tabla contiene información en linea, es decir el respaldo de la noche, te sirve pero no tanto.

Corremos al respaldo espejo y encontramos que la sentencia drop table ya fue ejecutada, la información se a perdido.

Bueno, pues existen diferentes maneras de intentar recuperar la información, tratar de recuperarla de los registros del disco duro, revisar algun log y reconstruir los datos ó un delay en el espejo?, hay varias opciones, cual sera la mejor y/o mas sencilla?.

Revisando un poco este ultimo concepto,(delay al espejo) en MySQL apartir de la versión 5.6, ya te permiten replicar la información y programarle un delay de tiempo, que les parese 5min, para revisar rapido el espejo, ante un problema de este tipo, se detiene la replicación al espejo y se comienza a recuperar la tabla, y esto es solo con un parametro de configuración dentro del archivo my.cnf.

CHANGE MASTER TO MASTER_DELAY = N;

donde N es el numero de segundos a esperar.

Aquí dejo el link por si quieren ondar en ello, yo apenas comenzare a provarlo, pero queria compartirlo por que parese interesante, en cuanto termine, hago mis observaciones.


Gracias y saludos.

lunes, 24 de junio de 2013

Recomendación de organización.

Cuando entren a una organización y se encuentren con la sorpresa de falta de control en procesos(procesos me refiero hasta de reglas para progarmar), recomiendo que almenos por lo que les respecta a ustedes, busquen automatizar o implementar ciertas reglas  de desarrollo. Esto ahorrara muchisimo tiempo de re-analisis y re-programación.

Pueden comenzar con cosas básicas como en vez de cortar y pegar codigo, para ejecutar un query(php, mysql o lo que gusten) en diferentes lugares de la aplicación(diferentes opciones), pues mejor creen una funcion (ó procedimiento) que por si algun motivo de cambio de reglas de la organización se tiene que modificar esa logica, pues que nomas lo tengan que hacer en un solo lugar y no tengan que andar buscando por todo el sistema, donde se encuentra un código que mueva lo mismo.

Igual de importante es tener documentadas estas funciones, que pudieramos llamar genericas, y que esten a la mano de los programadores para que cuando requieran utilizarlas puedan tener a la mano documentación de su uso y el resultado que obtendran con ella.

Algunos sabran a lo que me refiero y les hara sentido de primera instancia, otros aprendemos a la maña.

"Planear lo que se va a realizar, nos ahorrar mucho tiempo"
Parese una frase muy repetida, pero cada letra esta llena de verdad y hasta se queda corta. Aveces el planear hasta nos ayuda a entretenernos más en el trabajo. Resultado: Mayor producción, mas rapido se va el día, mejor hacemos nuestro trabajo, mayor satisfacción con uno mismo y con la organización, y sumale que si lo aplicas a tu vida personal.. produciras en todos los ambitos.

Suerte y a hecharle ganas.

miércoles, 19 de junio de 2013

Cargar archivo de texto a tabla #MySQL:

Subir archivo plano a tabla.

1. Creamos la tabla (si no existe), con la estructura de nuestro archivo a cargar, o la tabla existente debe contener al menos los campos y tipos de campos del archivo a cargar.

2. Creamos el archivo y/o lo copiamos al Servidor o PC a una ruta donde nuestro usuario de base de datos tenga acceso a consultarlo.

3. Cargamos el archivo con el siguiente comando:
LOAD DATA LOCAL INFILE '/direccion donde esta el archivo/nombre archivo'   INTO TABLE nombrebd.nombretabla FIELDS TERMINATED BY '|';

  3.1 Si la tabla donde cargaremos los datos, ademas contiene otros campos, tendremos que especificar los campos, en orden a como viene el archivo de texto.
    LOAD DATA LOCAL INFILE '/direccion donde esta el archivo/nombre archivo' INTO TABLE nombrebd.nombretabla FIELDS TERMINATED BY '|' (campo1, campo2, campo3, campo"n");

  3.2 Si nuestro archivo contiene una primer linea con el nombre de campos debemos ignorar esa linea
    del archivo:
    LOAD DATA LOCAL INFILE '/direccion donde esta el archivo/nombre archivo'  INTO TABLE nombrebd.nombretabla FIELDS TERMINATED BY '|' IGNORE 1 LINES;
De igual manera pudiermos crear el insert directamente si no fueran muchos registros.

Nota: El cargado de datos de esta manera es muchisimo mas rapido que un insert.

viernes, 14 de junio de 2013

#Extraer una sola tabla de respaldo MySQL

Esta sentencia es muy util para ahorrar tiempo, supongamos que tenemos un respaldo de una base de datos, y queremos extrar unicamente una tabla , con su información (inserts), para no tener que subir toda la base de datos. Ya sabemos que subir toda una base de datos y esta es muy grande, pues nos puede llevar horas, tengo una base de datos de 23GB y me a durado hasta 5horas haciendo el restore.

En este caso con el comando sed vamos a extraer el script y lo mandamos a otro archivo. Por terminal.

sed -n -e '/CREATE TABLE.*catalogo_tienda/,/CREATE TABLE/p' backup_basedatos.sql > catalogo_tienda.dump

Explicandolo poquito:
Busca en el respaldo(backup_basedatos.sql), la coincidencia "CREATE TABLE " y pues el nombre de la tabla es lo quese cambiara, "catalogo_tienda".

Luego ponemos el nombre del archivo del respaldo "backup_basedatos.sql"

Y por ultimo mandamos la salida a otro archivo que en el ejemplo es: catalogo_tienda.dump

El trabajo no termina aquí, tenemos que editar el archivo de salida (en mi caso con el editor vim).

vim catalogo_tienda.dump

Quitamos lo que este de mas, dado que puede encontrar otras coincidencias, como alguna otra tabla que se llame catalogo_tienda_foranea, quizas. Eliminas esos datos de mas del archivo y gravas y ya tienes el archivo final, para subirlo.

Paresen muchos pasos,pero ya que lo haces, te das cuenta que es sencillo y rapido. Claro que se puede  optimizar un poco mas el proceso, haciendo un script donde mandes de parametros, el nombre de la tabla  a buscar, el nombre del archivo del respaldo.

PD: En una chancita genero el script y dejo el codigo. 


jueves, 13 de junio de 2013

Proceso a segundo plano en consola Linux

Este proceso me ha salvado de salir tarde en algunas ocasiones.

Ponemose a correr algun proceso, generar un respaldo, comprimir algun archivo, ó copiar un archivo de servidor a servidor, y se llega la hora de irse(por poner un ejemplo, jeje), y no queremos tumbar el proceso, aclarando,  son procesos ejecutados desde una Terminal y en Linux, tendria que revisar si se puede hacer algo similar en la Ventanita(Windows), en Mac si se puede, y bueno quieres que se quede en segundo plano, dentro del servidor... para poder apagar la PC.. eh ahi el tip.

Bueno comienzo con la breve y facil explicación:

Nos posicionamos en donde mandamos a ejecutar el proceso digamos que es una compresion de archivo

bzip2 nombrearchivohola

Esto provocara que la terminal espere a que nuestro proceso termine, para regresarnos el control de la terminal.

Entonces nosotros pulsamos [ctrl + Z], lo que detiene el proceso (no lo tumba, es como un pause)
Despues escribimos: bg

Y nuestro proceso continuara en segundo plano. Si existiera mas de un solo proceso ejecutandose al mismo tiempo, al momento de dar el [ctrl + Z], entonces apareceran varias tareas, para que continue el que tenemos en nuestra pantalla, lo buscamos en la lista y al darle el bg#2 le agregamos el #2 donde el 2 significa el numero del proceso al que pertenece.

Por ultimo si queremos mandar el proceso de nueva cuenta a primer plano, le damos: fg

Nota: Con el comando jobs podemos revisar cuantas tareas existen ejecutandose.

Podemos evitar todo esto, mandando desde primera instancia el proceso a segundo plano(background), y es mucho mas facil,

nohoup bzip2 nombrearchivohola &

realmente es con el puro & al final pero agreamos el nohoup por si existe alguna salida ó mensajes, que nos regrese el comando lo manda al archivo nohoup, que queda en la misma ruta.