RSS |

Blog de Omar

Just another WordPress weblog

Advertisement

Archive for the ‘ MySQL ’ Category

Sin duda este año nos deja sin sabores que no son fáciles de asimilar, uno de ellos tuvo lugar en Abril de este 2009 y fue la inesperada compra de SUN por parte de Oracle. Son esas noticias que uno no espera leer un día común por la mañana cuando se revisan los feeds y que cuando lo lees debes de verificarlo en otro blog para ver si es cierto o solo es parte de una broma pesada.

Lo ciesakila_switchboardrto es que Oracle compro Sun y con ello Java, Solaris y MySQL que es la primera base de datos Open Source y el tercer sistema gestor de base de datos mas popular del mundo… nada mas y nada menos.
Aquí un breve pero muy breve resumen:

  • Inicios 2009 y desde antes: Había una guerra fría entre IBM y Oracle por adquirir Sun.
  • Abril 2009: Oracle da el golpe liquidador y Compra Sun.
  • Desde Abril 2009 hasta Diciembre 2009: Todos analizan el impacto que esto tendrá en el mercado y en especial sobre MySQL ya que este podría ser el mas afectado.
  • Diciembre 2009: Michael “Monty” Widenius (uno de los creadores de MySQL) hace un llamado para “Salvar a MySQL”, aquí el [POST] de su blog.
  • Diciembre 2009 y solo días después: Oracle da una conferencia pública comprometiéndose a mantener MySQL debido a que los usuarios de Oracle y MySQL son totalmente distintos. Aquí el [POST] con mas detalles.

Hace unos meses conversaba con un miembro del soporte de MySQL Enterprise que me estaba ayudando con un tema de licencias que ha adquirido la empresa donde trabajo y en donde administro MySQL Enterprise 5 y me comentaba que el futuro es totalmente incierto que no se sabe aun los cambios que Oracle impondrá sobre MySQL y especular sobre el futuro en estos mundos de TI puede convertirse en algo tan similar como jugar a la ruleta rusa y obviamente sobre lo que convenga a Oracle.

¿Que le conviene a Oracle?

En mi opinión, abandonar MySQL y desaparecerlo podría resultarle a Oracle un “tiro por la culata” porque podría ocasionar levantar otra competencia como PostGres, seria para PostGres la oportunidad que esperaba (imagínense todas las aplicaciones Web del mundo migrando a PostGres: WordPress, Joomla, Nuke, Typo, software de investigación, etc. etc.).
Otros piensan que Oracle jamás cometería semejante y tamaño error y que por el contrario que esta es la gran oportunidad de Oracle para liquidar a IBM en el mundo de software, ofreciendo 2 tipos de servicios: Uno propietario (bien caro por cierto) y uno Open Source, ambos totalmente integrales. Imagínense una plataforma con Solaris, Oracle (para aplicaciones empresariales) o MySQL Enterprise (para aplicaciones de investigación) y con programas desarrollados en JAVA y por otro lado podrías usar Open Solaris, MySQL Community y Aplicaciones Java, definitivamente un golpe duro para IBM y Microsoft.

Pero el tiempo solo el tiempo dirá que pasará (como dice mi padre y señores que vivieron “La Nueva Ola” con mucho furor), mientras esperamos las novedades para el 2010 les dejo un video muy gracioso y que vale la pena de ver. ¿Se imaginan a Hitler enterándose de la compra de Sun por parte de Oracle? y a todo esto…. ¿Ustedes que creen que hara Oracle con MySQL?

Popularity: 2% [?]

MySQL Enterprise Monitor

Noviembre 23, 2008 | 5 Comments | MySQL

sakila_switchboard

Si hay algo que me gusta de MySQL es su practicidad para hacer las cosas y "supuesta complejidad" para modificarlas, puede sonar contradictorio pero para ejemplo un botón; recuerdo que la primera vez que instale MySQL lo hice en Windows con la ayuda de AppServ, en ese entonces no sabia ni siquiera como lo había instalado lo único que sabia es que había una base de datos corriendo en mi computadora y que podía administrarla con ayuda de phpMyAdmin y todo eso en unos cuantos minutos (vaya practicidad!!).

Sin embargo al ahondar y sumergirme en este SGDB uno descubre que las cosas no son tan sencillas y hay que aprender a configurarla, backupearla (aun no existe este verbo?… pronto existira) y en general conocer su funcionamiento, tema en el que muchos no se atreven a entrar.

Pues MySQL cada vez nos hace mas fácil la vida a los que nos dedicamos a administrar los servidores, hoy les voy a presentara MySQL Enterprise Monitor.

MySQL Enterprise Monitor es una herramienta que se obtiene al adquirir la licencia de MySQL Enterprise Server (la versión pagada del MySQL Server sostenida por la comunidad y que es gratuita), el nombre describe lo que hace esta herramienta: nos proporciona un dashboard desde el cual podemos visualizar todas nuestras bases de datos, crear reglas de avisos, alertas alcorreo, eventos, gráficas estadísticas y monitorizar nuestras replicaciones (creo que no se me olvida nada).

He realizado un gráfico con ayuda de Visio ( y es que una imagen vale mas que mil palabras) que explica como es que funciona MySQL Enterprise Monitor:

enterprise-monitor-architecture

Instalación deMySQL Enterprise Monitor

Vamos a denominar "Servidor" al computador donde esta instalado el Enterprise Monitor y "Cliente" a los computadores que seran monitoreados.

Instalación del Servidor

1.- Dar permisos al binario:
shell> chmod +x mysqlmonitor-version-installer.bin

2.- Ejecutar el binario:
shell> ./mysqlmonitor-version-installer.bin

Cuando ejecutemos el binario nos solicitara la siguiente información:
—————————————————————————-
Welcome to the setup wizard for the MySQL Enterprise Monitor
—————————————————————————-
Please specify the directory where the MySQL Enterprise Monitor will be installed
Installation directory [/opt/mysql/enterprise/monitor]:
—————————————————————————-
Tomcat Server Options
Please specify the following parameters for the bundled Tomcat Server
Tomcat Server Port [18080]:
Tomcat Shutdown Port [18005]:
Tomcat SSL Port [18443]:
—————————————————————————-
Repository Configuration
Please specify the following parameters for the bundled MySQL server
Repository Username [service_manager]:
Password :
Re-enter :
Bundled MySQL Database Port [13306]:
—————————————————————————-

Lo único que podría causar confusión es el password solicitado para el repositorio, lo voy a explicar, lo que ocurre es que el Enterprise Monitor maneja su propia Base de Datos y nos esta creando un usuario llamado "service_manager" y nos pide colocar el password, si quisieramos acceder a la base de datos creada deberíamos ejecutar lo siguiente:

shell> ./mysql -u service_manager -p -P 13306 –socket=/opt/mysql/enterprise/monitor/mysql/tmp/mysql.sock

3.- Arrancar el servicio:
shell> /opt/mysql/enterprise/monitor/mysqlmonitorctl.sh start

4.- Configurar nuestro MySQL Monitor

Debemos ingresar a la URL: http://<ip_del_servidor>:18080/merlin/Auth.action e ingresar los datos solicitados:

El Administrator es el usuario que administrará el dashboard de MySQL Monitor.
El agente es usuario que se nos solicitará al momento de instalar el agente en los servidores a monitorear.

Instalación del Cliente

1.- Crear un usuario en MySQL con los siguientes privilegios globales:
GRANT SELECT, REPLICATION CLIENT, SHOW DATABASES, SUPER ON *.* TO ‘mysqluser’@’localhost’ IDENTIFIED BY ‘agent_password’;

2.- Instalar el agente de monitoreo:
shell> ./mysqlserviceagent-version-installer.bin

3.- Colocar los datos solicitados:
—————————————————————————-
Welcome to the MySQL Enterprise Service Agent Setup Wizard.
—————————————————————————-
Please specify the directory where MySQL Enterprise Service Agent will be installed
Installation directory [/opt/mysql/enterprise/agent]:
—————————————————————————-
Monitored Database Information
MySQL hostname or IP address [127.0.0.1]:
Validate MySQL hostname or IP address [Y/n]: Y
Hostname to display (optional) []: Fedora7
MySQL Port [3306]:
MySQL Username []: mysqluser
MySQL Password :
Re-enter :
—————————————————————————-
MySQL Enterprise Monitor Options
Hostname or IP address []: 192.168.1.12
Port [18080]:
Agent Username [agent]:
Agent Password :
Re-enter :

Los datos solicitados son:
- El usuario creado en MySQL que se encargará derecoger la información
- El usuario creado en el dashboard del Enterprise Monitor, en nuestro caso llamado "agent"

Después de haber configurado el agente, el dashboard del Enterprise Monitor detectará el servidor.

Aquí les dejó la imagen de mi Enterprise Monitor donde he agregado dos servidores.

EnterpriseDashboard

Popularity: 4% [?]

Este post es la continuacion del post  [ Tuning MySQL Server ], asi que recomiendo leer este antes de continuar con este post,  pero si eres de esos apuraditos no habra nada que te detenga.

Saber el funcionamiento interno de nuestro servidor, conocer los archivos a modificar, leer la documentacion sobre los parametros que debemos setear y sobre todo encontrar la forma de hacer un benchmarking, esto todo lo que esta atras de este post.

Hace algunas semanas me puse a "tunear" (yo tuneo, el tunea, vosotros tuneais) el servidor MySQL Enterprise Server que adquirio la empresa donde trabajo, pero luego me pregunte: "Como demuestro que mi tuning ha sido un exito y que he mejorado el performance de mi servidor de base de datos?"  (son dudas existenciales que no te dejan vivir), asi que me puse a buscar algo de informacion y al parecer muy pocas personas se habian hecho la misma pregunta que yo, no encontre ningun blog que hablara sobre como medir el rendimiento de MySQL, hasta que San Google me dio algunas herramientas que podia usar, asi que escogi la que me parecio la mejor opcion: mysql-bench.

Si ustedes han compilado las fuentes de MySQL pues ustedes ya cuentan con la carpeta sql-bench en donde estan los scripts a usar (la encontraran en algun lado pero depende de donde hayan hecho la instalacion del software), por otro lado si ustedes han instalado MySQL con rpm’s tendran que instalar tambien el rpm correspondiente, en Fedora el rpm se llama mysql-bench-5.0.45-6 (tambien hay un rpm para Suse, lo se porque tambien lo he probado).

Al instalar este rpm estan instalando unos scripts en perl que lo que hacen son consultas y medir el tiempo de respuesta de nuestro servidor MySQL (inserts, alters, select, etc etc), lo que les recomiendo es leer la documentacion que trae esta herramienta, la documentacion y los scripts se encuentran en /usr/share/sql-bench/.

Bueno iniciemos nuestras pruebas de performance, lo primero que debemos hacer es correr los scripts con el my.cnf que viene por defecto, el script que debemos correr es:

sql-bench]# perl run-all-tests –server=MySQL –user=’root’ –password=’password’

Nota: Lean todas las opciones que trae el scipt run-all-test (lo pueden hacer con run-all-test –help)

Cuando termine de correr el script arrojara un resumen del tiempo que demoro en ejecutar todos los scripts, el tiempo es medido en una unidad llamada wallclock (que mide tiempo de red, tiempo del procesador y de acceso al disco, tomemoslo como una medida nueva y propia de la herramienta) y desde luego hay que correr el script despues de haber modificado el archivo my.cnf con los nuevos parametros y de haber reiniciado MySQL.

En mi caso los resultados fueron:

RESULTADOS ANTES DE MODIFICAR MY.CNF

alter-table: Total time: 79 wallclock secs ( 0.01 usr  0.14 sys +  0.00 cusr  0.00 csys =  0.15 CPU)
ATIS: Total time: 26 wallclock secs ( 4.58 usr  2.67 sys +  0.00 cusr  0.00 csys =  7.25 CPU)
big-tables: Total time: 20 wallclock secs ( 0.79 usr  4.99 sys +  0.00 cusr  0.00 csys =  5.78 CPU)
connect: Total time: 262 wallclock secs ( 8.27 usr 81.05 sys +  0.00 cusr  0.00 csys = 89.32 CPU)
create: Total time: 289 wallclock secs ( 1.35 usr 11.48 sys +  0.00 cusr  0.00 csys = 12.83 CPU)
insert: Total time: 3032 wallclock secs (158.97 usr 456.75 sys +  0.00 cusr  0.00 csys = 615.72 CPU)
select: Total time: 478 wallclock secs (19.21 usr 43.93 sys +  0.00 cusr  0.00 csys = 63.14 CPU)
transactions: Test skipped because the database doesn’t support transactions
wisconsin: Total time: 23 wallclock secs ( 1.49 usr 11.02 sys +  0.00 cusr  0.00 csys = 12.51 CPU)

RESULTADOS DESPUES DE MODIFICAR MY.CNF

alter-table: Total time: 70 wallclock secs ( 0.01 usr  0.07 sys +  0.00 cusr  0.00 csys =  0.08 CPU)
ATIS: Total time: 11 wallclock secs ( 4.60 usr  1.82 sys +  0.00 cusr  0.00 csys =  6.42 CPU)
big-tables: Total time: 11 wallclock secs ( 0.86 usr  4.39 sys +  0.00 cusr  0.00 csys =  5.25 CPU)
connect: Total time: 224 wallclock secs ( 8.77 usr 41.84 sys +  0.00 cusr  0.00 csys = 50.61 CPU)
create: Failed (output/create-MySQL-Linux_2.6.23.14_i686)
insert: Total time: 2116 wallclock secs (159.04 usr 141.21 sys +  0.00 cusr  0.00 csys = 300.25 CPU)
select: Total time: 131 wallclock secs (15.36 usr 31.04 sys +  0.00 cusr  0.00 csys = 46.40 CPU)
transactions: Test skipped because the database doesn’t support transactions
wisconsin: Total time: 20 wallclock secs ( 1.46 usr  9.15 sys +  0.00 cusr  0.00 csys = 10.61 CPU)

Como veremos hay mucha diferencia entre los tiempos, ahora si lo ponemos en unas barritas con la ayuda de nuestro excel, se ve mas bonito:

benchmarking

Popularity: 2% [?]

Tuning MySQL Server

Noviembre 3, 2008 | 4 Comments | Linux, MySQL

sakila_switchboardInstalar MySQL Server y comenzarlo a usar es muy sencillo, puede ser tan sencillo como saber instalar un rpm, quizas usar yum o apt-get y funcionara sin ningun problema, pero acaso dejar las opciones por defecto es suficiente? se podrian sorprender de la cantidad de opciones que tiene este sistema gestor de base de datos.

Escuchar frases como: "MySQL es una base de dato para principiantes", "MySQL es solo para pruebas", "MySQL es solo para empresas medianas"; son frases que han quedado en el pasado (alla por el 2004 y estamos a puertas del 2010), hablar ahora de MySQL es hablar de un sistema gestor de base de datos serio, rapido, de uso en empresas grandes y en sistemas de produccion y sobre todo practico, que no tiene  nada que envidiar a otras bases de datos y que ademas no tiene porque ser gratis ya que cuenta con un soporte segun las necesidades de nuestra organizacion.

Bueno volvamos al tema, hacer un tuning de nuestro servidor MySQL no es muy complicado solo requiere tener los conocimientos de como funciona nuestro servidor MySQL, por cuestiones de tiempo no podre explicar todo asi que solo mostrare donde hacer los cambios basicos.

El archivo que debemos modificar es my.cnf (en Windows no recuerdo el nombre, pero usen Linux es mucho mejor jejejeje), por lo general el archivo esta en /etc/my.cnf y debemos modificarlo para mejorar el rendimiento de nuestro servidor, en Fedora el archivo no contiene casi nada y las variables inician con sus valores por defecto, en mi caso mi archivo my.cnf quedo de esta manera:

Noten que todas las varibles deben estar dentro de la etiqueta mysqld.

[mysqld]

port = 3306
socket = /var/lib/mysql/mysql.sock
skip-lockingkey_buffer = 16
M
max_allowed_packet = 1M
table_cache = 64net_buffer_length = 8Kmyisam_sort_buffer_size = 8M
bind-addres= 0.0.0.0

## Ubicacion del log de consultas que superen long-query-time###
log-slow-queries=/var/log/mysql-slow.log
## Maximo tiempo antes de que se almacene en mysql-slow.log ###
long_query_time=3
## Almacene consultas en mysql-slow.log que no tengan indices ##
log-queries-not-using-indexes
## Cache para para llaves, se recomienda que sea el 25% de la memoria fisica total###
key_buffer_size=1024M
## Mejora la cache para consultas que contengan ORDER BY ####
read_rnd_buffer_size=4M
## Mejora el rendimiento de consultas GROUP BY ###
sort_buffer_size=512K
## Aumenta el buffer de lectura ###

read_buffer_size=4M
## Aumenta el buffer para el insert ###

bulk_insert_buffer_size=16M
## Aumenta buffer para consultas JOIN ###

join_buffer_size=1M

## aumenta cache de los ilos por conexion ##
thread_cache_size=1M
query_cache_size=64M
##Maximo de 50 conexiones simultaneas####
max_connections=50
##Tiempo maximo de conexion sin enviar informacion (3600 segundos)###
wait_timeout=3600

Coloque una breve explicacion a algunas opciones pero no a todas, les recomiendo que lean el manual de MySQL para saber que funcion cumplen todas los parametros colocados.

Pero como saber que nuestro servidor MySQL ha mejorado su rendimiento? pues eso lo tratare en el siguiente post.

Seria interesante que comenten sobre el uso de MySQL, es decir si lo usan para servicios en produccion y que tipos de servicios. Saludos!

Popularity: 4% [?]

Tambien pueden descargar el video desde: [DESCARGAR]

Popularity: 13% [?]