Home |  MySQL Buzz |  FAQ |  Feeds |  Publique su blog |  Comentario |  Archivo |  Suscripción RSS RSS 2.0 Español English Deutsch Français Italiano 日本語 Русский
Showing entries 1 to 30 of 242 Próximo 30 Viejas entradas
Replicación MySQL y la clausula LIMIT
+0 Vote Up -0Vote Down

Tal y como podemos encontrar en el manual del MySQL, el uso de LIMIT en queries que modifican tablas es inseguro en modo STATEMENT (por defecto). Si lo hacemos nos encontraremos en el log mensajes similares a:

120123 19:06:01 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Statement: DELETE FROM casas
		WHERE DATEDIFF(NOW(), casa_date) > 31 limit 1000

Esto se debe a que aunque existan los mismos registros:

master> select * from fib;
+------+-------+
| id   | valor |
+------+-------+
|    6 |     8 |
|    7 |    13 |
|
  [Lea más...]
Certificación PHP en Zaragoza
+1 Vote Up -0Vote Down
Warp se encargará de impartir los cursos de PHP y MySQL que dan acceso a la certificación Zend PHP 5.3 a partir del 31 de enero de 2012, en el Centro de Tecnologías Avanzadas de Zaragoza. El curso está dirigido a aquellas personas que quieran aprender a programar portales web con dos de las herramientas más [...]
SHOW OPEN TABLES de MySQL
+0 Vote Up -0Vote Down

Mediante SHOW OPEN TABLES podemos ver las tablas que están actualmente abiertas en la table cache y si esta en uso o si tiene threads a la espera a que otro libere el bloqueo.

Si ejecutamos simplemente SHOW OPEN TABLES veremos por todas las bases de datos las tablas que están abiertas y si están en uso mediante la columna In_use:

mysql> show open tables;
+-------------+--------------------------------------------------------+--------+-------------+
| Database    | Table                                                  | In_use | Name_locked |
+-------------+--------------------------------------------------------+--------+-------------+
| xxxxxx_utf8 | tmp_systemadmin.es                                     |      0 |           0 |
(...)

La columna Name_locked se

  [Lea más...]
Instalación de MySQL Cluster (ndb)
+0 Vote Up -0Vote Down

Vamos a ver como instalar MySQL Cluster y sus características. No se trata de una solución de alta disponibilidad para el típico MySQL (con tablas MyISAM o InnoDB) sino que se trata de un storage engine transaccional con sus propias características: ndb

El MySQL Cluster ndb ofrece una base de datos sin nada compartido con tres tipos de nodos diferenciados:

  • Nodo de gestión (ndb_mgmd): Permite la gestión del resto de nodos del cluster, arrancar y apagar nodos o hacer backups. Aunque se deba arrancar el primero puede fallar sin afectar al funcionamiento del cluster.
  • Nodo de datos (ndbd o ndbmtd): Almacena los datos los trata
  [Lea más...]
Cuidado con los snapshots en MySQL
+0 Vote Up -0Vote Down

He visto algunas formas de hacer snapshots de MySQL que no deben hacerse así. Vamos a ver un ejemplo.

Me han pasado scripts como el siguiente:

/usr/sbin/xfs_freeze -f /var/mysql
/usr/bin/ec2-create-snapshot -K $KEY -C $CERT vol-1111ff11 --description "SnapMysql"
/usr/sbin/xfs_freeze -u /var/mysql

En este caso se hace un snapshot de un EBS habiendo congelado previamente el sistema de ficheros, en este caso xfs. Si bien el snapshot tendrá los datos consistentes del sistema de ficheros, los datos que tenga el MySQL en memoria se perderán. Para hacer backups mediante snapshots de MySQL con XFS lo podemos hacer mediante mylvmbackup.

En el caso que sea xfs deberemos indicar que

  [Lea más...]
Fichero con el estado de InnoDB
+0 Vote Up -0Vote Down

Mediante SHOW INNODB STATUS podemos obtener ver los contadores de InnoDB, valores varios, estadísticas y las transacciones. Algunos de dichos valores nos puede interesar guardar un histórico para hacer un gráfico o ver su evolución. Mediante la opción innodb-status-file podemos simplificar el script de optención de datos.

Mediante la opción –innodb-status-file indicamos al MySQL que escriba en el datadir el estado de InnoDB. El fichero en cuestión se llamará innodb_status.<PID%gt; por lo que el script deberá buscar primero el PID del mysqld para poder encontrar el fichero.

De esta forma nos ahorramos tener que acceder al MySQL

  [Lea más...]
Último certificado del año, MySQL 5.0 Developer
+0 Vote Up -0Vote Down

Justo cuando llegaba el final del año conseguí mi objetivo, el certificado MySQL 5.0 Developer. Ya tengo el pack completo :) La verdad es que este me ha parecido ligeramente más complicado que los anteriores, más que nada por mi poca experiencia con el lenguaje SQL. Pero para eso es están las certificaciones, para aprender.

Ahora toca centrarse en aplicar lo aprendido y seguir mejorando poco a poco. Tengo muchos libros para leer en mi Kindle pero poco tiempo. He empezado por "MySQL High Availability" que a pesar de ser un poco pesado de leer en algunas partes y que son muy pesados con su librería de Python, es un buen libro para ampliar los conocimientos en replicación y alta disponibilidad.

Fuera de la lectura técnica, ¿tenéis alguna recomendación para leer en este 2012? A mi me ha picado la curiosidad Metro 2033.

Lock wait timeout exceeded; Try restarting transaction
+0 Vote Up -0Vote Down

Al ejecutar una query en un MySQL contra una tabla con el engine InnoDB nos podemos encontrar con el error:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

La variable innodb_lock_wait_timeout permite definir el tiempo va a esperar una query a obterner un lock, por lo que podemos minimizar este error aumentando este timeout a costa de asumir que las queries pueden tener esta tiempo el thread bloqueado a la espera. Dependiendo del entorno quizá nos interesa incluso bajarlo para evitar que las queries se queden esperando (por ejemplo en entorno web). Vamos a ver como investigar este problema viendo las transacciones implicadas en un problema de este tipo.

Primero

  [Lea más...]
Readers’ Choice Awards 2011
+0 Vote Up -0Vote Down

Y salieron los premios anuales de la revista Linux Journal, me topé con algunas sorpresas y otras no tanto, y puedo resaltar los ganadores de algunas categorías que me interesan:

  • Mejor distribución de Linux: Ubuntu (faltaba mas)
  • Mejor entorno de escritorio: Gnome 3 (de verdad no esta tan mal)
  • Mejor navegador: Firefox  :/
  • Mejor gestor de base de datos: MySQL (seguido muy de cerca por PostgreSQL)
  • Mejor lenguaje de programación: Python? (creo que es hora de empezar con “esa nota”)
  • Mejor juego: World of Goo (creo que vale la pena las 20 fichas que cuesta)

La lista es larga, son 45 categorías, les sugiero que le hechen un vistazo:

  [Lea más...]
Eliminar numeros de linea con Vim
+0 Vote Up -1Vote Down

¿Quién no ha buscado código fuente en la red? Algunos sitios comparten segmentos de codigo fuente incluyendo el numero de línea, sé que lo hacen intencionalmente por que disfruntan sabiendo que debemos darnos el trabajo de eliminar las numeraciones de linea para poder compilar el codigo brindado, ademas de fijarnos en otros detalles.

Aqui una muestra clásica de un copy paste desde una pagina web hacia Vim (u otro editor):

Para un segmento de codigo de unas cuantas

  [Lea más...]
Probando UDFs para MySQL: Title Case
+0 Vote Up -0Vote Down

Conocemos “de sobra” lo que hacen las funciones LCASE y UCASE en MySQL, otros gestores también la implementan con alguna variación en el nombre pero con el mismo resultado.

Pero que pasa si queremos una función que convierta un texto al tipo Titulo, conocido también como title case, es decir convertir “un texto arbitrario” en “Un Texto Arbitrario“, para este caso no existe la función

  [Lea más...]
Mis bugs reportados de MySQL-Workbench
+0 Vote Up -0Vote Down

Hace algunos meses, mientras usaba MySQL Workbench 3.2.33, noté varios bugs los cuales reporté inmediatamente, Oracle ya publicó la versión 3.2.35 y está apunto de publicar la versión 3.2.36, no había recibido noticias acerca de mis reportes.

Siempre es bueno colaborar a la mejora de herramientas libres, en este caso me dí cuenta de algunos detalles, incluso algunos de ellos pasarían desapercibidos. Pasado el tiempo ya, quise saber sobre mis bugs reportados y resulta que todos ya habían sido resueltos, y éstos son:

60354    Workbench can’t open a stored procedure
60557    Workbench closes without

  [Lea más...]
Problema al emitir recibos de honorarios SUNAT
+0 Vote Up -1Vote Down

Hace unas horas me he afiliado a la emisión por recibos de honorarios de la SUNAT, y me he dado con la sorpresa que no se pueden emitir los recibos de honorarios y me imagino que también para otros casos.

Sé que llamando a la misma SUNAT o enviando una queja puede demorar una eternidad, y busque una solución mientras el genio que ha programado esto lo solucione.

Este es el punto donde se estanca, desde aquí no es posible avanzar mas:

Deben usar Firefox (con firebug plugin) o Chrome para que puedan seguir adelante, con los siguientes pasos (a prueba de tontos), lo voy a decir una vez

  [Lea más...]
¿Donde comprar libros baratos?
+0 Vote Up -1Vote Down

Mientras sitios como Amazon ofrecen una variedad de libros única en la red, también existen los otros donde podemos encontrar libros usados a bajo costo y finalmente podamos tener el gusto de leer el libro original. Algunos dirán que es una tontería comprar libros antiguos sobre computación, bueno… cada quien con sus gustos.

Por ejemplo siempre he querido tener los cuatro tomos de la documentación de Visual C++ 6.0 edición impresa de mas de 1200 paginas cada uno, o los libros de David Kruglinski, Jeff Prosise o Herbert Schildt… una delicia para quienes aman coleccionar verdaderos clásicos.

En Amazon también podemos comprar libros usados a menor precio, pero hay sitios dedicados a vender libros usados (aunque ahora también venden nuevos), les dejo una lista de sitios en los que he comprado (y compro periódicamente) gran

  [Lea más...]
Nuevos cambios, nuevas oportunidades
+0 Vote Up -0Vote Down

Hace bastante tiempo que no escribo aquí y creo que es necesario dar una explicación a las personas que me siguen, aunque no sean muchas ;)

Mi vida laboral ha vuelto a dar un cambio importante, el segundo en lo que voy de año. Desde Octubre he entrado a trabajar en Percona como Support Engineer lo cual, bajo mi punto de vista, es un salto profesional grandísimo y le estoy muy agradecido a Ewen Fortune por esta oportunidad. Ahora mismo tengo de todo en mi vida, pero no tiempo libre ;) Los que me conocen bien saben que en cuanto tengo un reto por delante no puedo dejar de trabajar y esforzarme dando lo mejor de mi, por lo que estos meses están siendo muy intensos. Mucha lectura, estudio y práctica para poder alcanzar el nivel de profesionalidad y conocimiento que tanto hacen destacar a Percona.

Seguiré

  [Lea más...]
Activar el motor FEDERATED en MySQL
+0 Vote Up -0Vote Down

El motor FEDERATED de MySQL, aunque no es muy versátil, puede resultar útil, por ejemplo, para conectarnos directamente a una tabla en otro servidor MySQL sin necesidad de un intermediario, como un script PHP que copie/verifique/vea datos de otro servidor.

El motor FEDERATED no esta habilitado por defecto en instalaciones estándares sobre Linux, no hay que compilar nada, solo agregarle el parametro --federated en el archivo /etc/init/mysql.conf:

#Busquen esta linea en el archivo /etc/init/mysql.conf
exec /usr/sbin/mysqld --federated

Luego de reiniciar el servicio mysql, verán los resultados:

ivancp@ubuntu$ sudo service mysql restart

 

Para ver que motores están disponibles

  [Lea más...]
WordPress ahora acepta sentencias LaTeX
+0 Vote Up -1Vote Down

Gracias a un plugin para WordPress incluido en Jetpack podemos incluir expresiones matemáticas en los posts fácilmente. Solo necesitan instalar Jeckpack en su WordPress para habilitar esta opción.

Esto es especialmente útil al momento de explicar un algoritmo, que incluya expresiones matemáticas, o para quienes tengan un blog y sean profesores/físicos/matemáticos/etc

Solamente tienen que escribir la expresión matemática en sintaxis  entre los signos de dolar:

$latex [expresion] $

Aquí algunos ejemplos:

  [Lea más...]
Thunderbird: proteger nuestro perfil
+0 Vote Up -1Vote Down

Nuestro correo electrónico es, quizá, lo mas importante que tenemos en la red, por muchísimas razones es una buena idea gestionar nuestro correo desde Thunderbird, ¿pero que tan seguro está?

Siempre he revisado mi correo en un equipo mio y no he tenido problemas al respecto, pero en algunos casos existe la posibilidad de que estemos usando un equipo compartido o Thunderbird esta configurado con diferentes perfiles, ¿cómo podemos proteger nuestro correo?

Fácil!, instalando el plugin ProfilePassword, éste plugin no esta disponible desde el repositorio de Thunderbird pero

  [Lea más...]
WordPress: agregar mas tamaños de imágenes
+0 Vote Up -0Vote Down

WordPress crea por defecto 3 copias de tamaños diferentes de los archivos de imágenes, estos pueden ser utilizados para mejorar la disposición de un post. Sin embargo esos tamaños no son siempre los que necesitamos.

Redimensionar las imágenes es un trabajo adicional, que puede tomar varios minutos, pero yano, por que existe un plugin que nos permite crear los tamaños que necesitemos, se llama: Additional image sizes (zui).

Una vez instalado tendremos más para elegir:

Si ya tenemos un blog con muchas entradas e imágenes, hay la opción de volver a

  [Lea más...]
Instalación de MySQL 5.5 en CentOS 6 con upstart
+0 Vote Up -0Vote Down

Anteriormente ya vimos como instalar MySQL 5.5 en una CentOS 5 desde código fuente usando daemontools. Hoy veremos la instalación para CentOS 6 con upstart.

Primero de todo necesitaremos cmake y las ncurses:

yum install cmake -y
yum install bison -y
yum install ncurses-devel -y
cd /usr/local/src
wget 'http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.16.tar.gz/from/http://mysql.easynet.be/'
tar xzf mysql-5.5.16.tar.gz
cd mysql-5.5.16

A continuación seguiremos compilando con el datadir en /var/mysql/ y los binarios instalados en /usr/local/mysql55:

cmake . -DMYSQL_DATADIR=/var/mysql/ -DENABLE_DEBUG_SYNC=0 \
  [Lea más...]
Simplificar el acceso a MySQL CLI
+0 Vote Up -0Vote Down

¿No les ha dado pereza escribir, en la linea de comando, todo lo necesario para conectarse a un servidor MySQL?

Puede que tome menos de un minuto, pero algunas veces un minuto es vital (sobre todo si estamos cerca del fin del mundo).

ubuntu@ubuntu$ mysql -u root -p -h mysqlhost [base_datos]

 

Cuando uno esta apurado, estos comandos suelen fallar varias veces por minuto.

La solución: podemos ayudarnos creando atajos con alias en el archivo ~/.bashrc:

#archivo ~/.bashrc
 
#comando "my" para conectarse a un servidor local
alias my="mysql -u root -p"
 
#comando "my2" para conectarse a un servidor remoto
alias my2="mysql -u root
  [Lea más...]
Simulando secuencias en MySQL
+0 Vote Up -0Vote Down

Quienes hemos usado PostgresSQL solemos fastidiarnos con el código que hay que escribir para tener un campo auto-numérico, pero también hemos llegado a extrañar esa característica cuando usamos MySQL.

Como sabemos MySQL, usa la propiedad AUTO_INCREMENT para campos numéricos que usamos en claves primarias.

Pero en que situaciones podemos necesitar una secuencia? pues les doy algunas ideas:

  • Cuando queremos tener mas de un campo auto-numérico en una tabla.
  • Cuando necesitamos un contador general que podemos utilizar en mas de una tabla.
  • No se me ocurren mas, pero estoy seguro que en algún momento podemos darle un uso.

Manos a la obra:

Necesitaremos una tabla

  [Lea más...]
¿Cuando es necesario comprar una licencia MySQL?
+0 Vote Up -0Vote Down

Como seguramente saben, MySQL provee licenciamiento dual, puedes obtener el código fuente bajo la licencia GPL v2 o puedes comprar una licencia comercial.

Hace algunos meses he oído algunos comentarios fuera de lugar sobre el licenciamiento o sobre en que situación es necesario comprar una licencia comercial de MySQL. Escuché por ejemplo que puedes usar MySQL en todo lo que te sea útil excepto para ganar dinero, en nuestro entorno (latinoamericano) es natural llegar a una conclusión pero no es correcta.

Entonces, ¿cuando es necesario comprar una licencia comercial de MySQL? En realidad es muy simple: cuando quieres hacer algo con MySQL que la licencia GPL v2 no lo permita.

Si bien el asunto de las licencias y demás

  [Lea más...]
SHOW PROFILE de MySQL
+0 Vote Up -0Vote Down

El EXPLAIN a primera vista puede resultar algo confuso y en joins con muchas tablas tampoco nos indica en que esta perdiendo más tiempo el MySQL. Mediante SHOW PROFILE tendremos un detalle de los tiempos de ejecución.

Para poder ver los tiempos de ejecución deberemos dejar a 1 la variable de sesión profiling:

mysql> set profiling=1;
Query OK, 0 rows affected (0.00 sec)

A continuación deberemos ejecutar las queries que queramos, pudiendo ver el resultado con SHOW PROFILE:

mysql> select id, object_id, concat(section,tag) , unix_timestamp(log_date) as thing_date from log where thing_timestamp >=  DATE_FORMAT(date_sub(CURRENT_TIMESTAMP(), interval 7 day),'%Y%m%d070000');
(...)
244606 rows in set (1.06
  [Lea más...]
Ver el estado de un MySQL
+0 Vote Up -0Vote Down

Para ver las queries que se están ejecutando en un MySQL se usa SHOW PROCESSLIST;, pero muchas veces no nos interesa tanto que queries se ejecutan sino la cantidad que hay para ello podemos recurrir a otra variable.

mysql> show processlist;
(...)
6 rows in set (0.00 sec)

Mediante SHOW STATUS podemos ver la cantidad de queries en ejecución con las variables Threads_%:

mysql> show status like 'Threads%';
+-------------------+--------+
| Variable_name     | Value  |
+-------------------+--------+
| Threads_cached    | 25     |
| Threads_connected | 6      |
| Threads_created   | 378847 |
| Threads_running   | 1      |
+-------------------+--------+
4 rows in set (0.00 sec)

Su significado es:

  • Threads_cached: Número de threads en la
  [Lea más...]
Cambiar la contraseña de un usuario en MySQL
+0 Vote Up -0Vote Down

Existen varias formas de cambiar la contraseña a un usuario en MySQL. Podemos tanto manipular la tabla user de MySQL o usar el GRANT o SET PASSWORD.

Una opción puede ser es obtener los privilegios del usuario y repetir el GRANT con la nueva contraseña. Con el SHOW GRANTS FOR podremos verlos:

mysql> show grants for jordi@'1.1.1.1';
+------------------------------------------------------------------------------------------------------------+
| Grants for jordi@1.1.1.1                                                                                   |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.*
  [Lea más...]
Percona Live London
+0 Vote Up -0Vote Down

La próxima semana comienza la Percona Live y esta vez podremos disfrutarla sin salir de Europa. Durará dos días, 24 y 25 de Octubre.

Durante el primer dia se impartirán tutoriales de diversos tema, como por ejemplo NDB o Sphinx.

http://www.percona.com/live/london-2011/schedule-tutorial/

Y el segundo día se reserva para las conferencias:

http://www.percona.com/live/london-2011/schedule-conference/

Las conferencias serán impartidas no solo por compañeros de Percona, si no también por trabajadores de empresas como Paypal, Facebook, Nokia, Couchbase o Monty Program.

Como se puede comprobar, posibilidades de aprender hay miles. Aún estás a tiempo de apuntarte :) Yo estaré por

  [Lea más...]
Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
+0 Vote Up -0Vote Down

Al dar o revocar ciertos privilegios nos podemos encontrar con el siguiente error:

mysql > revoke super on database.* from 'luser';
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

Los privilegios de MySQL que no afectan a las tablas sino que son globales como PROCESS, FILE, SUPER, entre otros, no pueden ser aplicados a una base de datos o tabla mediante el modificador ON (por ejemplo ON basededatos.tabla o ON basededatos.*).

Para dar o revocar estos privilegios deberemos indicarlo para todas las bases de datos y tablas con ON *.*, por ejemplo:

mysql > revoke super on *.* from
  [Lea más...]
Muchas veces los problemas que tenemos con nuestra base de datos no son...
+0 Vote Up -0Vote Down

Muchas veces los problemas que tenemos con nuestra base de datos no son continuos, si no puntuales, y ocurren generalmente cuando no estamos mirando la pantalla. Las herramientas que hoy voy a mostraron os permitirán cazar el momento exacto de un problema y recabar todos los datos posibles en ese preciso instante de tiempo.

Las dos herramientas pertenecen al Percona Toolkit. Estas toolkit incluyen lo que antes era Aspersa y Maatkit. Por lo tanto, comenzamos descargando:

Percona Toolkit Download

Dentro de el las utilidades que hoy usaremos serán:

pt-collector: es la herramienta que se lanzará cuando una condición específica se de. Entre otras cosas se encargará de recargar información sobre IO, procesos, memoria, processlist, estado

  [Lea más...]
MySQL: Sort aborted
+0 Vote Up -0Vote Down

Cuando nos encontramos en el log del MySQL con “Sort aborted” puede significar varias cosas, deberemos ver en que caso estamos para actuar convenientemente o simplemente ignorar el error.

110930 19:12:30 [ERROR] /usr/local/mysql/libexec/mysqld: Sort aborted

El error puede aparecer en varios situaciones:

  • Si nos quedamos sin espacio en el directorio de tmp que usa el MySQL. Lo podemos ver mediante show variables:
    mysql> show variables like 'tmpdir';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | tmpdir        | /tmp  |
    +---------------+-------+
    1 row in set (0.00 sec)
    

    Si nos hemos quedado sin espacio al hacer un sort en disco podemos ampliar la partición, crear una dedicada o bien cambiar el path del tmpdir:

    tmpdir =
  [Lea más...]
Showing entries 1 to 30 of 242 Próximo 30 Viejas entradas

Planet MySQL © 1995-2008 MySQL AB, 2008-2010 Sun Microsystems, Inc.,
2012, Oracle Corporation and/or its affiliates.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.