Almacenar la salida de un comando SQL en formato CSV

El formato CSV resulta muy cómo tanto de generar como leer, por eso muchos programas lo aceptan. Se trata simplemente de valores separados por comas (Comma-Separated Values). Vamos a ver como generar un fichero desde MySQL para almacenar datos. Para generar el fichero desde un comando SQL en MySQL deberemos indicar INTO OUTFILE con el [...]

Llevo dos semanas de baja, sin poder tampoco salir de casa. Razón por...

Llevo dos semanas de baja, sin poder tampoco salir de casa. Razón por la cual pensé en aprovechar el tiempo e intentar mejorar mis conocimientos en algo que nunca se me ha dado bien. La programación y más exactamente, la orientada a objetos. Así que me pillé un libro Ruby y Kindle en mano he ido aprendiendo y poniendo en funcionamiento conceptos que siempre me han sonado a chino. Si bien es cierto que sigo teniendo muchísimas deficiencias de conocimientos a nivel de programación (soy sysadmin, fuera de bash scripting casi nunca tengo que hacer nada), creo que he cogido una base que me permitirá ir mejorando poco a poco dentro de mis limitaciones ;)

Para poner en práctica todo lo aprendido, quise hacer algo relacionado con las redes sociales y MySQL. Y entonces recordé que un buen amigo y ex-compañero de trabajo llamado …

[Lea más]
Timestamps with Paperclip and S3

I’m using Paperclip (2.3.11) to upload images to S3 and, as some other people have pointed out (here and here), if the content of a file changes but its name remains the same (for example, if you recrop the image), the timestamp added by Paperclip to the end of image URL won’t change. Consequently, the browser thinks the image hasn’t changed, and will display the old version.

Being image a Paperclip::Attachment, the url method will return something like:

> image.class
 => Paperclip::Attachment
> image.url
 => "http://domain/filename?1305625852"

If the image’s content changes, but not the name, the timestamp won’t change. To fix this issue, I’ve added a new and simple processor: …

[Lea más]
Los cheatsheets suelen ser unas tablas resumen que siempre conviene...

Los cheatsheets suelen ser unas tablas resumen que siempre conviene tener a mano. Existen miles de CheatSheets por la web, para servicios como Apache, Mysql o aplicaciones como Vim. Por ejemplo, en http://www.cheat-sheets.org/ teneís una colección al alcance de un click. Lo que aquí voy a enseñar es un pequeño truco para que todos ellos sean accesibles desde la consola, ya que no siempre tenemos un navegador a mano :)

Aprovechando que intento aprender Ruby y los conceptos de POO, haremos uso de las Gem de Ruby para dotar de CheatSheets a nuestra shell. La Gem que nos dará la funcionalidad se llama Cheat y su instalación es sencilla:

# gem install cheat
Successfully installed cheat-1.3.0
1 gem installed
Installing ri documentation for cheat-1.3.0...
Installing RDoc documentation for cheat-1.3.0...

[Lea más]
Ficheros master.info y relay-log.info de MySQL

Cuando habilitamos un slave se generan en el datadir dos ficheros con datos: master.info y relay-log.info con información relativa a la replicación: Para el caso del relay log se trata de un fichero que almacena la posición leída respecto al master y a que punto ha llegado el slave. Mediante un strings podemos ver el [...]

Dimensionado del innodb_buffer_pool basado en el hit rate

Para bases de datos InnoDB medianas y grandes nos podemos encontrar que herramientas como mysqltuner nos indican problemas como los siguientes: [!!] InnoDB data size / buffer pool: 50.9G/6.5G Evidentemente en las recomendaciones de mysqltuner nos aparecerá: innodb_buffer_pool_size (>= 50G) Evidentemente si disponemos de un SGI Altix 3700 Bx2 con 384 GB de RAM no [...]

ERROR 1010 (HY000): Error dropping database (can’t rmdir ‘./db/’, errno: 17)

Al intentar borrar una base de datos de MySQL nos podemos encontrar con el siguiente error: mysql> drop database db; ERROR 1010 (HY000): Error dropping database (can't rmdir './db/', errno: 17) Nos esta diciendo que no puede borrar el directorio con el errno 17, si buscamos que significa el código 17 en errno.h vemos: # [...]

Selecting n random items from an array in ruby

Selecting n random items from an array in ruby is quite simple using the sort_by method provided by the Enumerable class. If we apply sort_by{ rand } to an array (or to a hash) we obtain the same array randomly ordered. If we only want n random items from the array, we can apply the slice method to the randomly orderer array to get the first n elements. For example, suppose we want to get 3 random items from my_array:

> my_array = (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> my_array.sort_by{ rand }.slice(0..2)
=> [2, 9, 3]

You can find a more detailed explanation of how sort_by{ rand } works in …

[Lea más]
Actualizar de MySQL 5.1 a MySQL 5.5

La actualización de un servidor MySQL 5.1 a la versión 5.5 es muy directa, simplemente debemos tener en cuenta las diferencias entre las versiones. En la documentación de MySQL 5.5 podemos encontrar los cambios respecto a la versión anterior (MySQL 5.1). El cambio que quizá se tenga que tener más en cuenta por los usuarios [...]

Ver el usuario con el que estamos conectados en Oracle y MySQL

Cuando nos conectamos a una base de datos con varios usuarios resulta fácil perderse y no saber en cada terminal con que usuario nos hemos conectado. Para ver desde sqlplus de Oracle el usuario con el que estamos conectados podemos realizar la consulta “SHOW USER“: SQL> show user; USER is "EJEMPLO" En esta caso nos [...]