Posts Tagged ‘googleando’

Howto: Replica base de datos MySql

Saturday, February 20th, 2010

Esta vez voy a escribir sobre algo que aprendí hace poco y logré hacer dos veces (en un servidor OpenSuse y en uno Debian GNU/Linux), el procedimiento fue el mismo las dos veces, solo que noté un pequeño cambio en asuntos de permisos en ambas distribuciones.

Contando un poco, hay una base de datos llamada “registro” en mysql a la cual varias personas necesitan hacer consultas, la información de la base de datos y el servidor son bien sensibles y o se les puede dar acceso directo a todas las personas, por lo que estuve pensando como puedan hacer consultas sin conectarse directamente a ese servidor, así que me puse a investigar y encontré algo llamado “Replicación de servidor MySql“. Lo que esto hace, es crear una copia idéntica de una base de datos en otro servidor, los registros se van actualizando en el servidor replica de manera automática conforme van entrando datos al servidor maestro o principal.

De esta manera, dejo de preocuparme de accesos no autorizados a la base de datos maestra, bien pude haberlo hecho con un usuario de consulta pero lo que se necesita es que no se acceda a la base de datos de ninguna manera. Así que manos a la obra.

Vamos a partir del supuesto que ya hay una base de datos creada y con información. Lo primero que debemos de hacer es ejecutar el siguiente comando en el servidor maestro

mysqladmin variables -u root -p | grep log_bin

y nos fijamos en la linea log_bin, si esta linea dice OFF, tenemos que activar.

| log_bin | ON |
| log_bin_trust_function_creators | OFF |

Para activar esto, nos vamos al archivo my.cnf (en Debian el archivo esta en /etc/mysql/my.cnf y en OpenSuse /etc/my.cnf y agregamos (o modificamos) las siguientes lineas

  • log-bin=/var/lib/mysql/mysql-bin. #para llevar el registro de modificaciones a la base de datos
  • server-id = 1 #para identificar al servidor maestro
  • binlog-do-db = registro #nombre de la base de datos de la cual se llevara el registro

reseteamos nuestro servidor.

/etc/init.d/mysqld restart

Entramos al CLI del MySql maestro y creamos un usuario con persmisos de replicación para el servidor esclavo ejecutando el siguiente comando en la CLI MySql GRANT

REPLICATION SLAVE ON *.* TO ‘usuario-replica’@'ip-del-esclavo’ IDENTIFIED BY ‘contraseña-replica’;

Cuando ya tenemos esto, necesitamos copiar los registros de la base de datos del servidor maestro al servidor esclavo para que ambos tengan los mismos datos y no exista conflictos al momento de pasar los registros de un lado a otro, la idea es que ambos servidores inicien con la misma información. Ejecutamos el comando (siempre en la CLI MySql del maestro)

FLUSH TABLES WITH READ LOCK;

este comando sirve para enllavar MySql y que no pueda guardarse ningún registro, así que en este punto lo ideal es que nadie ingrese información mientras este proceso esta pasando. Necesitamos unos datos para configurar el esclavo mas adelante, así que (siempre dentro la CLI MySql) ejecutamos

SHOW MASTER STATUS;

y obtenemos algo parecido a

+——————+———-+—————————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+—————————–+——————+
| mysql-bin.000002 | 98 | registro,registro | |
+——————+———-+—————————–+——————+

Los datos que debemos de anotar y no perder son File y Position, que vamos a ocupar en el esclavo.

Copiamos la base de datos maestra al esclavo, se puede hacer con un mysqldump o copiando el directorio de la base de datos en /var/lib/mysql, aquí va al gusto del cliente. Voy a explicar como hacerlo copiando el directorio completo.

Nos ubicamos en /var/lib/mysql del maestro y ejecutamos (según el nombre de ejemplo que puse arriba) en nuestra bash tar -cf registro.tar registro/, pasamos este archivo .tar al esclavo usando scp registro.tar root@ip-del-esclavo:/var/lib/mysql/.

Ahora le toca el turno al esclavo, en el servidor esclavo

  • Nos ubicamos en el directorio /var/lib/mysql y ejecutamos el comando tar -xf registro.tar, podemos dar un ls para asegurarnos que el directorio registro está ahí.
  • Nos vamos al my.cnf del eslavo y buscamos la linea server-id y la dejamos así server-id= 2. Nos aseguramos que la linea bind-address (en Debian) o skip-networking (en OpenSuse) esté comentada, volvemos a la bash y reiniciamos /etc/init.d/mysql restart.
  • Volvemos a la CLI MySql y dentro ejecutamos el comando

    CHANGE MASTER TO MASTER_HOST=’ip-del-servidor-maestro’, MASTER_USER=’usuario-replica’, MASTER_PASSWORD=’contraseña-replica’, MASTER_LOG_FILE=’mysql-bin.000002′, MASTER_LOG_POS=98;

  • Activamos el servidor esclavo (en la CLI MySql) START SLAVE;.

Para terminar, nos vamos a la CLI del MySql maestro y escribimos UNLOCK TABLES; para desactivar el bloqueo de ingreso de registro que hicimos anteriormente.

Con todo esto (si no tuvimos ningún error) debemos de tener funcionando nuestro servidor replica, para asegurarnos que sea así ejecutamos (en la CLI del MySql esclavo) SHOW SLAVE STATUS\G; y buscamos la linea

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Si dicen YES, estamos listo! :) ahora para probar, agregamos un registro en el maestro y hacemos la consulta en el esclavo.

Para posibles fallos, podemos revisar el syslog y si queremos volver a hacer pruebas debemos de eliminar los archivos de log, en el esclavo los archivo relay y el master.info y en el maestro los archivos mysql-bin*

Espero que esto le sirva a alguien, si no, igual me queda de material de consulta a mi :)

Cualquier problemita que tengan y si puedo ayudarles, dejen un comentario y ay vemos que hacemos.

Referencias:

es.wikipedia no es libre?

Thursday, October 16th, 2008

Según la wikipedia, wikipedia es una enciclopedia libre y políglota basada en la colaboración de sus contribuyentes por medio de la tecnología wiki. Gracias a esta tecnología, cualquier persona con acceso a internet puede modificar la gran mayoría de los artículos a través de un navegador web.

El lema de Wikipedia es «La enciclopedia libre que todos podemos editar», y, según palabras de su confundador Jimmy Wales, el proyecto constituye «un esfuerzo para crear y distribuir una enciclopedia libre, de la más alta calidad posible, a cada persona del planeta, en su idioma», para lograr «un mundo en el que cada persona del planeta tenga acceso libre a la suma de todo el saber de la humanidad».

Hace unos días, Marconi decidió crear una entrada de la comunidad de usuarios de software libre de Nicaragua en la wikipedia en español, después de dos horas se dio cuenta que le habían borrado el articulo, al preguntar porque lo habian borrado, la respuesta fue

* 09:21 15 oct 2008 Filipo (discusión | contribuciones) borró “Grupo de Usuarios GNU/Linux en Nicaragua” ‎ (Autopromoción. Parte está en inglés. No enciclopédico)

Fue borrado porque existe en ingles? que tiene de malo? acaso los que hablan español hablan ingles??? no puede estar un articulo mismo en varios idiomas? y luego, no es enciclopédico?, he encontrado artículos en wikipedia sobre personas no reconocidas, eso es enciclopédico? la wikipedia en ingles si considera el articulo enciclopédico porque no lo borro parece.

Yo pense que la wikipedia era libre para publicar artículos y que podian publicarse en distintos idiomas, luego escuchamos que a otros compañeros le pasaron lo mismo, les borraron sus artículos donde se describían la biografía e historia de grupos ya sea musicales o de usuarios de software libre porque no los consideraban enciclopédicos.

Parece que la vida de Thalia si es considerada enciclopédica pero la orquesta armando barillas, un grupo Nicaraguense no es considerado enciclopédico y lo borraron? no entiendo la razón.

Instalando VirtualBox

Saturday, July 19th, 2008

Bueno, desde hace rato había escuchado hablar de virtualbox (software de virtualizacion desarrollada para plataformas i386, propiedad de SUN Microsystem desde febrero 2008) pero nunca me habia animado a instalarlo, tal vez porque no tenia suficiente memoria en mi computador :) (con 256 mi ubuntu siempre me trabajo bien!!) solo que pues ya que compraron mas memoria ya me anime a probar.

Así que me puse a leer unos cuantos lugares (@lex, tuxpepino, ubuntu-es, tuxapuntes) y me decidí a instalarlo, lo primero que hice fue descargar el paquete del sitio de virtualbox (en varios lugares leí que era mejor descargarlo de ahí que usar el que esta en los repos de ubuntu no se porque, solo hice caso)

Así que descargue el paquete de la web oficial de descarga de virtualbox. Luego procedí a instalarlo con

dpkg -i $PAQUETE.deb

en este caso el mio es virtualbox_1.6.2-31466_Ubuntu_hardy_i386.deb

Una vez instalado hay que agregar tu usuario a la lista de grupos de virtualbox con el comando

sudo gpasswd -a $USER vboxusers

y procedemos a descargar y cargar el modulo con

sudo rmmod vboxdrv && sudo modprobe vboxdrv

En este punto (aunque suene bien windoser, fue lo que me corrigió un pequeño problema que tuve) yo recomendaría reiniciar el sistema y debería de estar listo para trabajar.

Después de la instalación y cuando cargaba virtualbox me dio un error de apertura con los puertos usb, según fitoria no tuvo inconvenientes pero yo si, asi que para corregirlos abrimos el archivo

sudo pico /etc/init.d/mountdevsubfs.sh

y descomentamos las lineas (les quitamos el signo numeral que llevan al inicio)

#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs “” /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#ln -s .usbfs/devices /dev/bus/usb/devices
#mount –rbind /dev/bus/usb /proc/bus/usb

luego editamos el archivo

sudo gedit /etc/udev/rules.d/40-basic-permissions.rules

y aqui buscamos la linea

SUBSYSTEM==”usb_device” MODE=”0664″

y cambiamos el MODE de 0664 a 0666. Después reiniciamos mi sistema (aver voy a reiniciar aver que tal me va) y queda funcionando, antes de hacer esto me mostraba un error que me decia que podia usar los puertos usb, ahora ya no me muestra ese mensaje.

Luego viene la configuración de cada maquina virtual, donde asignamos espacio de disco duro virtual a usar, este puede ser fijo o puede ir variando segun le metamos información, yo uso la segunda opción porque me parece mas cómodo, habilitamos las tarjetas de red a usar, cantidad de puertos usb, si vamos a montar imágenes iso o montamos un cd que tengamos en la unidad física, diskets, audio, red, cantidad de ram asignada a la computadora virtual así como el vídeo asignado. También contamos con opción de habilitar RDP en la maquina virtual, así podrá ser controlada por otros usuarios de manera remota y acabo de encontrar esta opción bastante interesante :)

Recuperar el grub en ubuntu

Sunday, August 12th, 2007

Bueno, esto es algo que me acaba de pasar hace unos días cuando cambie mi disco duro de 80 por uno e 160 gb :) , clone todas las particiones pero tenia que reinstalar el grub. Pase googleando un rato, buscando la respuesta que ya la había visto anteriormente pero me estaba pasando lo mismo, tuve que juntar la información de varias webs para poder hacerlo funcionar, así que aquí les dejo algo que aunque seguro ya varios lo han hecho, tal vez a alguien que ande buscando como hacerlo le puede servir.

Así que empecemos, lo primero seria tener a mano un Live CD, en este caso use mi live cd de Ubuntu Feisty Fawn. Inicie la carga del disco, una vez que el sistema esta cargado abrimos una terminal y ejecutamos el comando

sudo fdisk -l

y aqui nos va a salir una tabla como esta

Disposit. Inicio Comienzo Fin Bloques Id Sistema

/dev/hda1 * 1 1487 11944296 7 HPFS/NTFS

/dev/hda2 1488 8147 53496450 f W95 Ext’d (LBA)

/dev/hda3 8148 10573 19486845 83 Linux

/dev/hda5 1488 8063 52821688+ 7 HPFS/NTFS

/dev/hda6 8064 8147 674698+ 82 Linux swap / Solaris

tenemos que ubicar nuestra particion “/” si solo tenemos una particion de linux pues es sencillo es la unica que diga linux, si tenemos varias particiones pues nos tocara identificarla, si no sabemos cual es podemos ayudarnos viendo el archivo /etc/fstab, en mi caso mi particion root es hda3 segun el fstab.

/dev/hda3 / ext3 default…….

Una vez que ya tenemos identificada la partición “/” procedemos a montarla

sudo mount /dev/hd?X /mnt

donde ? seria la letra de nuestro disco duro y X seria el numero de la particion root, tambien montamos estas otras particiones

sudo mount -o bind /dev /mnt/dev
sudo mount -o bind /proc /mnt/proc

luego de esto ejecutamos el comando

sudo chroot /mnt

para poner nuestra partición del disco duro como partición raíz y luego procedemos a instalar el grub con el comando

sudo grub-install /dev/hd?

donde ? seria la letra de nuestro disco duro, aquí no tenemos que poner la letra de la partición raíz, porque le estamos diciendo que instale el grub en nuestro disco duro. Si tuvieramos varios discos duros pues elegimos el disco duro en el cual queremos instalar el grub.

Terminado esto, reiniciamos nuestra computadora y nuestro grub debe de cargar perfectamente.

Quien dijo miedo? Ubuntu y Envy para mi ati

Sunday, August 5th, 2007

La laptop de mi mama, una toshiba A135-S2286 tiene una tarjeta ati que estaba configurada cuando instale Feisty Fawn pero por andar inventando el agua helada me puse a instalar unas cosas extras del xorg y habia desconfigurado los drivers.

Despues de varios dias que se conviertieron en unas cuantas semanas me habia resignado y taba esperando que se hiciera una actividad del grupo ubuntu-ni y llevar la laptop para que alguien me ayudara.

Ayer en la noche me puse a googlear un rato y me encontre un programita llamado envy que fue escrito por alberto milone, debo de decir que es una herramienta que no tienen ninguna ciencia al usarse. Lo unico que tienen que hacer es descargar el deb, ejecutarlo desde linea de comando con sudo dpkg -i archivo.deb, luego abrirlo y seguir lo que dice, en mi caso solo le di install ati driver y la aplicacion se encarga de detectar, instalar y configurar tu tarjeta de video. Esta aplicacion solo funciona en ubuntu y en debian etch y bajo plataforma x86 y x86_64, aun no tiene soporte para PPC.

Luego empeze a instalar beryl, con la ayuda de google y un bloggero mas del ciberespacio, el primer paso fue agregar los repositorios de beryl, para esto ejecutamos el comando

sudo pico /etc/apt/sources.list

y dentro del archivo agregamos al final la linea

deb http://ubuntu.beryl-project.org/ feisty main

luego de esto necesitamos agregar una llave gpg para poder instalar, entonces en consola escribimos

sudo wget http://ubuntu.beryl-project.org/root@lupine.me.uk.gpg -O- | sudo apt-key add -

terminando esto pues actualizamos con

sudo apt-get update

e instalamos beryl, el beryl-manager y el servidor xgl

sudo apt-get install beryl beryl-manager beryl-ubuntu emerald-themes xserver-xgl

Terminado esto tenemos que hacer que en nuestro sistema arranque XGL para eso creamos un archivo

sudo pico /usr/local/bin/startxgl.sh

y aqui vamos a copiar lo que hay en este link guardamos y le damos los permisos correspondientes para ser ejecutado

sudo chmod a+x /usr/local/bin/startxgl.sh

Ahora tenemos que crear una sesion para que se nos cargue XGL y creamos el archivo

sudo pico /usr/share/xsessions/xgl.desktop donde vamos a agregar lo siguiente [Desktop Entry]
Encoding=UTF-8
Name=Xgl
Comment=Start an Xgl Session
Exec=/usr/local/bin/startxgl.sh
Icon=
Type=Application

grabamos el archivo y cerramos el editor de texto

despues de esto vamos a tener que darle una actualizacion a beryl, para esto creamos un archivo

sudo pico /etc/apt/preferences
y agregamos lo siguiente
Package: *
Pin: release o=lupine
Pin-Priority: 1000

grabamos los cambios y luego ejecutamos
sudo apt-get update
sudo apt-get install beryl-core=0.2.0~0beryl1

Ya hemos terminado toda la instalacion, asi que reiniciamos el sistema y cuando vamos a logearnos nos vamos a opciones y le damos cambiar sesion y buscamos una que diga XGL que fue la sesion que nosotros creamos, y seleccionamos que sea nuestra sesion por defecto y listo, tenemos beryl trabajando con nuestra ati radeon Xpress 200M.

Asi que para esas personas que dicen que linux es dificil, no lo creo, con envy no tuve que darle el modelo de mi tarjeta de video, solo le di instalar y me detecto el modelo de la tarjeta, descargo los drivers, instalo y configuro mi tarjeta de video y lo bueno es que sirve para nvidia y ati :)