domingo, noviembre 08, 2009

Respaldar Bases de datos en MySQL

Existen varias formas de realizar respaldos de bases de datos MySQL por lo que pueden existir mil sitios en donde se pueda encontrar información del estilo.

En lo personal estaba programando un backup y tuve que comenzar a hacer un script para que se encargara de respaldar las bases de datos aparte de mandar un mail en caso de fallo y otras cosas básicas de cualquier respaldo.

Lo que hice fue buscar en internet y encontré un Script llamado AutoMySQLBackup, el script se puede bajar del siguiente sitio: http://sourceforge.net/projects/automysqlbackup/

Algunas de las cosas interesantes:

- Respalda una o todas las bases de datos que se necesiten.
- Reporta por mail el resultado de ejecución del script
- Se pueden disparar otros scripts antes o después de ejecutar el respaldo.
- Ejecuta backups, diarios, semanales, mensuales, etc.

Lo principal es que nos ahorra un montón de trabajo y es muy sencillo de modificar para adaptarlo a nuestras necesidades.

martes, octubre 27, 2009

Replicación en MySQL Parte I

Desde hace un tiempo vengo manejando servidores con Replica pero no los había tenido que configurar ya que el cliente tenía un DBA que se encargaba de esas cosas. Hace unos días tuve que configurar mi primer replica con mysql y comencé a meterme en el tema. La verdad que es mucho más sencillo de lo que pensaba, hay que tener en cuenta que esta es un replica sencilla en donde tengo un servidor master y otro slave. La necesidad de tener un servidor de replica se debe a que el cliente quiere tener alta disponibilidad y en caso de fallos una alternativa rápida para seguir operativos. Me toco configurar una réplica sencilla ya que toda transacción que se hace en el master se copia en el slave, esta es la réplica más sencilla que puede existir y nos provee de un servidor alternativo en caso de que falle el master.
A continuación hago un resumen muy pero muy breve de lo que hice para tener un servidor con Replica en MySQL.
Para poder configurar mi servidor de replica tengo que hacer lo siguiente:
Configuración servidor MASTER:
1) Editar el my.cnf
log-bin=/var/lib/mysql/mysql-bin.log
binlog-do-db=test
server-id = 1

2) Bajar y Subier el mysql

3) Entro en el shell de mysql para darle permisos al usuario que voy a utilizar para la réplica.
mysql> GRANT REPLICATION SLAVE ON *.* TO usr_replica@'%' IDENTIFIED BY 'password_replica';
mysql> FLUSH PRIVILEGES;

4) Entro en el shell de mysql para consultar el estado del Master
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | test | |
+------------------+----------+--------------+------------------+
Estos datos son importantes para luego poder configurar el SLAVE.

5) mysqldump -u root -ppassword --opt test>test.sql

Configuración servidor SLAVE:
En el esclavo lo primero que tengo que hacer es copiar la estructura de la base de datos a replicar, existen varias formas de hacerlo pero para el ejemplo preferí hacerlo de la forma más sencilla. En el ejemplo estamos replicando solo la base de datos test por lo que usando un simple dump podemos preparar el servidor esclavo para la réplica.
1) Levanto el test.sql que generamos en el Master en el SLAVE, esto lo hago simplemente con un source o de la forma que se prefiera. Hay que tener en cuenta que la base debe existir o la tenemos que crear, en este ejemplo uso la test que viene con mysql y en el test.sql traigo la estructura que tiene el master que simplemente es una tabla para las pruebas.
2) Tengo que indicarle al servidor que es slave por lo que tengo que editar el my.cnf con los siguientes datos:
server-id=2
master-host=192.168.248.136
master-user=usr_replica
master-password=password_replica
master-connect-retry=106
replicate-do-db=test
Estos datos los saco del master tal cual se muestra arriba. Después de modificar el my.cnf debo hacer un stop y start del servicio mysql.

3) Entro en el shell de mysql y hago lo sigiuente:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.248.136', MASTER_USER='usr_replica', MASTER_PASSWORD='password_replica', MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=106;

4) Dentro del shell lo que hago es inicializar el esclavo con el siguiente comando:
mysql> START SLAVE;

Con esta configuración todo dato que se modifique en la base de datos test del servidor master se replicara en la base de datos test del slave.

lunes, septiembre 28, 2009

Collaborative Projects 2.0

En el pasado encuentro se hizo el lanzamiento de los Collaborative Projects 2.0.

La verdad que me puso muy contento el enterarme de este lanzamiento y sin dudas esto es un estimulo para la comunidad de usuarios GeneXus.

Me gusta apoyar estas iniciativas ya que independientemente de los resultados todos los que participan se ven beneficiados de alguna manera.

En lo personal siempre intento participar de todo lo que tenga que ver con la comunidad pues la mayor parte de mi conocimiento sobre GeneXus lo he adquirido del intercambio con la comunidad.

En más de una oportunidad pude aprender muchísimas cosas al tener contacto con KBS que se publicaban en el gxopen, ni hablar del intercambio de conocimiento que se produce al juntar varias personas que usan GeneXus.

En esta oportunidad se ha aprendido de ediciones anteriores y se va a dar un tiempo de un año para poder finalizar los proyectos, calificandolos en tres oportunidades.

Por este y otros motivos voy a participar de esta edición de los CP 2.0 y recomiendo que todos participemos.

Link al wiki de Collaborative Projects 2.0: http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Category%3ACollaborative+Projects+2.0

Link a la Presentación del Lanzamiento de Collaborative Projects 2.0 en el XIX Encuentro Internacional GeneXus: http://www.events.genexus.com/portal/hgxpp001.aspx?16,67,1134,O,S,0,,1826

jueves, julio 16, 2009

PROYECTO COMUNIX



COMUNIX es una distribución Linux basada en Knoppix. Nace dentro de la comuna canaria y fue creada por un grupo de funcionarios municipales los cuales tenían como objetivo lograr contar con una distribución Linux que tuviera el mismo aspecto que Windows XP ya que el software que reinaba dentro de la comuna canaria era Windows XP.
La importancia de crear una distribución de estas características no solo es el abaratar costos si no que permite a los usuarios no tener que volver a capacitarse y ni que hablar que logra demostrar que se pueden crear cosas importantes dentro de ambientes públicos.
En lo personal y dada la experiencia que tengo en ambientes municipales tengo que admitir que este proyecto es una pegada de todo punto de vista ya que no solo es funcional si no que esta súper bien pensado.
Sería interesante que el resto de las intendencias tomaran esta distribución como software de escritorio y ni que hablar que si se unieran todas para colaborar esta distribución podría lograr ser un estándar dentro de las intendencias.
El sitio de COMUNIX es el siguiente:
http://www.imcanelones.gub.uy/wps/wcm/connect/Sitio%20IMC/imc/comunix/
En la sección de descargas se pueden bajar la distribución, es muy sencilla de instalar y realmente parece Windows XP, yo la probé y me pareció una muy buena opción para tener Linux en un escritorio aparte de que ya tiene toda la configuración para un usuario estándar.
La verdad que me saco el sombrero ante este proyecto ya que demuestra que con ganas se pueden hacer buenas cosas.

lunes, julio 13, 2009

La Fiebre del SMS

Tengo un cliente que me pidió poder realizar algunas de las tareas que hace habitualmente mediante el envío de SMS.

En realidad al inicio la idea era poder comprar varias PDA para realizar algunas de las tareas que hoy por un tema de costos se quieren hacer por SMS.

Lo primero que se me pidió fue poder consultar la deuda de un Cliente, por lo que la idea es mandar un SMS a un número dado con la palabra DEUDA + IDCliente y que este me devuelva la deuda del Cliente.

El planteo fue realizado y tenía que investigar cómo hacer esto ya que sinceramente ni idea de cómo poder recibir SMS desde mi aplicación, lo que hice fue llamar a las diferentes compañías proveedoras de telefonia celular y me hicieron varias propuestas pero en todas ellas había que programar bastante y a un costo bastante elevado, por lo menos para la prueba inicial y para este cliente en cuestión.

Todo esto me llevo a pensar como hacía Movistar con los modem inalámbricos que distribuye para darnos acceso a internet, estos modem traen un software en donde también se puede enviar y recibir SMS.

Después de investigar encontré que la aplicación llamada Escritorio Movistar almacena la información de los mensajes en una base de datos Access lamada mensajeriadirecta.mdb.
En mi PC los datos se almacenan en el siguiente directorio:
C:\Documents and Settings\Cristhian\Datos de programa\Telefónica Móviles\Escritorio movistar Latam\
Existen varios xml que no tuve tiempo de investigar para que sirven, aparte de los xmls tengo la mdb y dos archivos con extensión .db que para mi sorpresa son base de datos SQLite.
Al abrir el archivo MDB me encuentro con lo siguiente:



La tabla en la que se guarda la información de los mensajes se llama DatosMensaje.
Después de encontrar esto lo que hice fue poner el modem en el servidor y tengo una pequeña aplicación que se encuentra corriendo con un demonio en la cual se encuentra rastrillando la tabla DatosMensaje para saber si ha llegado un nuevo mensaje de texto, cuando llega un mensaje busca las palabras clave y contesta.

Es una aplicación modesta que seguramente se podría hacer de otra manera pero con un simple modem inalámbrico que se puede conseguir a bajo costo tengo una aplicación en la que puedo recibir SMS y contestarlos rápidamente.
Seguramente existen mil formas mas elegantes de hacer esto pero lo hice rápido y a un costo muy bajo.

Comparto esta experiencia por si alguien tiene una situación similar y quiere ahorrarse el tiempo de investigación.

domingo, mayo 03, 2009

Google va más rápido de lo que puedo procesar.

Hace más de un mes tuve que empezar a investigar la forma de poder almacenar datos locales desde mis aplicaciones Web.

En el momento lo primero que se me vino a la cabeza fue hacer un applet firmado para tener permisos locales y usaba una base de datos SQLite para poder almacenar la información. Tuve que resolver varias cosas ya que no era un tema sencillo y actualmente todavía sigo ajustando la solución planteada.

Lamentablemente en la actualidad pico mucho código y tengo poco tiempo para investigar, por suerte a diario entro al planeta GeneXus ( http://blog.genexus.com ) el cual cuenta con varios blogs que me ponen al tanto de las cosas interesantes o tendencias a seguir.

El planeta GeneXus para mi es como un compañero que te pasa los apuntes y todavía resumidos, gracias al blog de Enrique Almeida me entere de uno de los proyectos de Google llamado Gears.

Después de investigar un poco Google Gears me di cuenta que Google va más rápido de lo que puedo procesar ya que casi todo lo que necesitamos o podemos llegar a necesitar ya lo tienen resuelto.

Realmente parece mentira pero lo que yo intente hacer hace un mes y me llevo un tiempo considerable la gente de Google te lo da resuelto y ni que hablar que 100 veces mejor de lo que yo puedo hacerlo.

Ahora me encuentro adaptando mi aplicación para que trabaje con uno de los módulos de Gears, la DATABASE API que utiliza SQLite para persistir los datos. Después de esto me di cuenta que voy a tener que estar más pendiente de lo que hace Google ya que esto que me paso es un ejemplo de que Google va mucho más rápido de lo que puedo procesar y seguramente me va a facilitar la vida.

miércoles, abril 29, 2009

SQLite Manager


Navegando en internet encontre este complemento de FireFox llamado SQLite Manager. La verdad que me soluciono los problemas que tenía para poder administrar bases de datos SQLite ya que hasta el momento hacía todo por línea de comandos.