Mostrando entradas con la etiqueta debian. Mostrar todas las entradas
Mostrando entradas con la etiqueta debian. Mostrar todas las entradas

jueves, 30 de abril de 2009

Renombrar Bases de Datos MySQL en Linux

Por varias razones sucede , que en ocasiones debemos renombrar una base de datos completa, en mi caso el motivo fue que un aplicativo tenía el nombre de la base de datos que debía usarse en su código interno (hard-code) y la base de datos que se creo con mysql se hizo con otro nombre, es obvio que al final la aplicación y la base de datos nunca se iban a ver, entonces que hay que hacer? renombrar.

Aunque parezca muy raro, el administrador de mysql no trae ninguna funcionalidad que permita simplemente renombrar una base de datos, existe un comando para renombrar tablas, pero no bases de datos.
Entonces que opción nos queda?, bueno hay que recordar que los esquemas literalmente el sistema los ve como un directorio, de ser así entonces sería cuestión de renombrar el directorio y ya, pues bien esto es lo que hay que hacer. El asunto es que hay que buscar donde linux guarda los esquemas de mysql.
Dependiendo de la distribución , la colocación de los esquemas va a variar, sin embargo existe un archivo que nos va a indicar donde son almacenados, este archivo es:

my.cnf


La ubicación de este archivo en distribuciones como Debian y sus variaciones, esta generalmente en:

/etc/mysql


De todas formas sino sabemos donde esta lo buscamos con usando find

find / -name my.cnf


Una vez ubicado el archivo accedemos al mismo , y ubicamos la linea que diga

datadir = /var/lib/mysql


Datadir nos indica el lugar donde MySQL almacena todas las bases de datos, en mi distribución Ubuntu observamos que esta en /var/lib/mysql, nos cambiamos a ese directorio y dentro de él veremos que contiene todas las bases de datos que tenga nuestro MySQL, y ya aquí se hace lo más sencillo de todo el cuento, simplemente renombre el directorio al nombre que desee y listo.
No es necesario bajar el servicio de mysql ni reiniciarlo.
Continua...

jueves, 9 de abril de 2009

Falla de hotmail en Linux

Otra vez, con la salida de la nueva imagen de hotmail ocasiono diferencias con los usuarios de linux, especificamente aquellos que usen Debian y que navegen con Iceweasel, el problema hace que no se pueda escribir correos ya que la plantilla deja deshabilitado el marco donde se escribe el correo, y además no permite colocar en algunos casos los destinatarios. Sin embargo como en linux la mayoría de los problemas se pueden resolver facilmente, este no deja de ser la excepción.

Intentar actualizar el navegador web no da resultados, ya que el problema reside en que el servidor de hotmail filtra el navegador entrante y no reconoce aquellos que no sean explorer o firefox. Y aunque Iceweasel es firefox , el nombre codigo del mismo es iceweasel lo que hace que sea denegado al intentar escribir correos en hotmail.
Para solucionar esto lo que hay que hacer es abrir un pestaña nueva , o abrir el navegador , y colocar en el url la página con la que configuramos el iceweasel:


about:config


Inmediatamente saldrá el listado de parametros que posee nuestro navegador web, en la parte superior tenemos un motor de busqueda si queremos ir directamente a la linea que deseamos, en realidad la que debemos buscar es la siguiente:

general.useragent.extra.firefox


Del lado derecho veremos que aparece el parametro configurado, el cual debe decir "iceweasel/" después del / saldrá el numero de la versión de nuestro navegador lo cual no importa. Hacemos entonces doble click sobre esta configuración y se abrirá una pantalla que nos traerá el parametro que esta configurado, este dato lo cambiaremos por el siguiente:

Firefox/3.03


Una vez colocado le damos Aceptar para cerrar la pantalla y listo, cerramos la pagina de configuración del navegador, y ya podemos probar en hotmail escribir un correo para verificar que esta listo el problema ....... ocasionado por los genios de microsoft.
Continua...

miércoles, 5 de noviembre de 2008

Crear replica de Bases de Datos MySQL

Desde la versión de MySQL 3 es posible tener una base de datos en un servidor que se alimente automáticamente de un servidor de bases de datos maestro, esto es muy útil donde se manejan muchos datos y se realizan muchas transacciones entonces se desea tener un ambiente de ata disponibilidad en caso de que uno de los servidores se caiga , se activa el otro que esta respaldado hasta las ultimas operaciones realizadas.

Esta guía la probé usando un ambiente con linux debian etch y MySQL 5.0 .
Las características de MySQL 5 soportan replicación asíncrona unidireccional: un servidor actúa como maestro y uno o más actúan como esclavos. El servidor maestro escribe actualizaciones en el fichero de log binario, y mantiene un índice de los ficheros para rastrear las rotaciones de logs. Estos logs sirven como registros de actualizaciones para enviar a los servidores esclavos. Cuando un esclavo se conecta al maestro, informa al maestro de la posición hasta la que el esclavo ha leído los logs en la última actualización satisfactoria. El esclavo recibe cualquier actualización que han tenido lugar desde entonces, y se bloquea y espera para que el master le envíe nuevas actualizaciones.

Un esclavo servidor puede servir como maestro si quiere preparar una cadena de replicaciones de replicación.

Tenga en cuenta que cuando usa replicación, todas las actualizaciones de las tablas que se replican deben realizarse en el servidor maestro. De otro modo, debe ser cuidadoso para evitar conflictos entre actualizaciones que hacen los usuarios a las tablas en el maestro y las actualizaciones que hacen en las tablas de los esclavos.

Configuración del Servidor Maestro

En el fichero /etc/mysql/my.cnf comentamos las siguientes lineas , sin importar el valor que tengan asignado, para que el demonio del mysql pueda escuchar en las interfaces de red :


# skip-networking
# bind-address = 127.0.0.1


Ubicamos en el mismo archivo la clasula [mysqld] , debajo de ella buscamos las lineas siguientes:

# server-id = 1
# log_bin = /var/log/mysql/mysql-bin.log
# binlog_do_db = include_database_name
# binlog_ignore_db = include_database_name


Estas lineas debemos descomentarlas y modificarlas dependiendo de lo que vamos a hacer, la primera es para identificar el servidor, en este caso el servidor maestro es el Nº 1, la segunda linea es la que indica la ruta donde almacenarán los logs, la tercera linea es para indicar el nombre de la base de datos que se va a replicar y a la que el servidor irá registrando en el archivo que pusimos en la ruta de la linea anterior y por ultimo en la siguiente linea colocamos el nombre de la base de datos que no registraremos. Además de modificar estos valores debemos agregar dos lineas más quedando todo este código de la siguiente forma:

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = NombreBaseDatosReplicar
binlog_ignore_db = mysql
low-priority-updates
innodb_flush_log_at_trx_commit=1


La ultima linea agregada innodb_flush_log_at_trx_commit, cuando este valor es 1 (predeterminado), cada vez que se confirma una transacción el buffer de registros (log buffer) se graba en el fichero de registro y se vuelca a disco.
Ya con esto terminamos la edición del archivo my.cnf en el maestro, nos salimos del editor y procedemos a reiniciar el servicio de mysql

/etc/init.d/mysql restart


Bloquear y Extraer Base de Datos
Crear Usuario
Procedemos ahora a crear un usuario que tendrá permisos para que el servidor esclavo pueda conectarse a la base de datos del servidor maestro ( si ya tiene un usuario creado con tal permisología en la base de datos también puede re-asignarle permisos para la replica en el servidor esclavo). Para ello procedemos a entrar al shell del mysql como root y dentro ejecutamos la sentencia de creación del usuario:

GRANT REPLICATION SLAVE ON *.* TO 'usuario'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;


Bloquear Base de Datos
Para generar la replica de la base de datos estas deben quedar con la misma data , para ello debemos bloquear cualquier registro nuevo que se vaya a generar mientras realizamos el proceso, siendo así usamos la base de datos especifica y posteriormente la bloquearemos, esto se realizará ejecutando lo siguiente:

use nombreBaseDatos;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;


La ultima linea nos generará una respuesta la cual debemos prestar atención, ya que los datos deben ser anotados para posteriormente utilizarlos, de este resultado debemos anotar las dos primera columnas que son el nombre del fichero y la posición, los datos generados son similares a estos :

mysql-bin.0008678 98 nombreBaseDatos


Una vez anotado estos datos, nos salimos del shell de mysql.

Extraer Datos
Es necesario exportar la base de datos para posteriormente importarla en el servidor Esclavo, para ello usaremos el comando mysqldump con el cual generaremos un archivo .sql , ejecutamos entonces en el terminal lo siguiente:

mysqldump -u root -p --opt nombreBaseDatosReplicar > nombreBaseDatos.sql


Generado el archivo .sql lo copiamos en el servidor esclavo. Ahora solo queda desbloquear la base de datos en el servidor maestro para que siga su normal funcionamiento, entramos de nuevo en el shell de mysql como root y ejecutamos el comando:

unlock tables;


Hasta aquí hemos terminado la configuración con el servidor maestro, ahora procederemos a entrar al servidor esclavo para realizar la configuración.

Configuración del Servidor Esclavo
Crear e importar base de datos
En el servidor Esclavo procedemos a crear la base de datos, para ello ingresamos a mysql y desde el shell ejecutamos lo siguiente:

create database nombreBaseDatos;


Nos salimos del shell y procedemos a ejecutar en el terminal el comando para importar la base de datos que previamente habiamos guardado en un archivo .sql , esto lo haremos de la siguiente forma:

mysql -u root -p nombreBaseDatos < /rutaarchivo/nombreBaseDatos.sql

Configuración de MySQL como esclavo
Ahora editaremos el archivo my.cnf del servidor esclavo con el fin de definir que este servidor funcionará como esclavo y se le indicará quien es el servidor maestro, para ello abrimos el archivo y buscamos la clausula [mysqld]y colocamos lo siguiente:

server-id = 2
master-host = ipServidorMaestro
master-user = usuarioCreado
master-password = usuarioPassword
master-connect-retry = 60
replicate-do-db = nombreBaseDatos


Guardamos los cambios realizados y reiniciamos el servicio de mysql , posteriormente entramos como root al mysql y apagamos el servicio de esclavo ejecutando el siguiente comando:

SLAVE STOP;


Inmediatamente procedemos a ingresar los datos del ip del servidor mysql maestro, los datos del usuario y además usaremos los datos que anotamos cuando se procedió a bloquear la base de datos, es decir , el nombre del archivo y la posición, esto lo hacemos con la siguiente sentencia:

CHANGE MASTER TO MASTER_HOST='ipServidorMaestro', MASTER_USER='usuarioCreado', MASTER_PASSWORD='usuarioPassword', MASTER_LOG_FILE='archivo mysql-bin.xxxxx', MASTER_LOG_POS='Nº XX';


Para finalizar iniciamos nuevamente el esclavo y salimos del mysql:

START SLAVE;


Ahora ya se puede realizar cualquier cambio en el servidor maestro y se verán replicados en el servidor esclavo.

Continua...

miércoles, 30 de julio de 2008

Donde está la Basura en Linux???

En varias ocasiones sucede que, al enviar algunos archivos a la papelera , estos no pueden ser removidos posteriormente, debido a que muchas veces el usuario que use la interfaz gráfica no tiene los privilegios para poder eliminarlos.

Cuando sucede esta situación, debemos irnos a la consola, y movernos al directorio correspondiente para poder borrar los archivos que necesitemos, el unico detalle depende del tipo de distribucion que usemos , si estamos usando Ubuntu, la ruta para la papelera es la siguiente:


/home/USUARIO/.local/share/Trash


Dentro de la carpeta Trash encontraremos dos carpetas , files y info, los archivos que necesitamos eliminar están dentro de files.

Si la distribución es Debian, la ubicación de los archivos es en:

/home/USUARIO/.Trash


En Debian además de ser distinta la ruta, es distinto el funcionamiento, ya que una vez dentro de .Trash se encontrarán los archivos que queremos borrar.
Continua...

domingo, 6 de julio de 2008

Instalar un repositorio SVN con acceso WebDav

Tanto para unidades de desarrollos integradas como para aquel que realiza un proyecto solo, es necesario usar un repositorio de versiones.
Existen varios , y casi todos comparten muchas similitudes , aquí colocare un How-To para instalar en un servidor Apache un repositorio SVN , con el servidor web podremos configurarlo para tener acceso WebDav.
Esta instalación es hecha en una disto de linux debian etch.

Para comenzar la instalación, debemos descargar e instalar el servidor web Apache 2, el modulo de apache que funciona con SVN y el propio SVN, esto lo haremos desde la consola con una sola linea de comando:
aptitude install apache2 subversion libapache2-svn

Para que funcionen los módulos svn con el apache , podemos cargarlos ejecutándolos cuando inicie el sistema (aunque algunas distros los cargan por defecto) ejecutando:

a2enmod dav
a2enmod dav_svn


o podemos hacer que siempre se carguen junto con el apache, para ello nos vamos al directorio de apache y modificamos el http.conf:

cd /etc/apache2/
vim httpd.conf


y agregamos las siguientes lineas:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so


Posteriormente , reiniciamos el servicio apache:

/etc/init.d/apache2 restart


Una vez instalado los paquetes, podemos probar que este funcionando el servidor web, escribiendo la dirección localhost en el browser, por otro lado es hora de decidir donde irán almacenados nuestros repositorios de versiones, en mi caso los coloque en /var y le coloque el nombre mas ingenioso: svn, así que si queremos dejarlos ahí pues solo debemos escribir:
mkdir /var/svn

Una vez creado el directorio podremos empezar a crear los repositorios, esto lo haremos con un comando del svn, se debe sustituir la palabra repositorionombre por el nombre que le coloquen a su repositorio:
svnadmin create /var/svn/repositorionombre

Ahora comenzaremos con los temas de permisología. Para el caso de apache, lo tenemos resuelto ya que el sistema tiene un usuario www-data, este nos sirve para que sea usado por el servidor web, sin embargo es bueno crear otro grupo de usuario el cual será los que usen el svn, esta práctica es buena porque así definiremos la permisología orientada a este grupo de usuarios y no tendremos que hacerle modificaciones al grupo de usuarios www-data. Entonces lo primero que haremos será crear un grupo de usuario svn:
groupadd svn

Después para agregar los usuarios hay varias opciones, sin embargo yo prefiero agregarlos todos de una vez editando el group, entonces ejecutamos:
vim /etc/group

Dentro ubicamos la linea donde este el grupo que hemos creado , en este caso se llama "svn", la linea contiene ademas del nombre del grupo, una x y un numero de grupo (el numero variará dependiendo de la cantidad de grupos que tenga en su sistema), al final de la linea iremos agregando , separados por una "," coma , cada uno de los usuarios:
svn:x:129:usuario1,usuario2,usuario3

Una vez creado el grupo, y añadido los usuarios al mismo, entonces configuraremos la permisología de los repositorios creados a los grupos correspondientes, www-data el grupo de apache y svn el grupo de usuarios del subversion.
chown -R www-data:svn /var/svn/repositorionombre

Además para evitar problemas con varios clientes SVN que puedan usar, y también problemas cuando usen apache, yo personalmente modifico la permisología del directorio:
chmod -R 770 /var/svn/repositorionombre

Estas dos ultimas operaciones son realizadas cada vez que se cree un nuevo repositorio, para verificar que los cambios ha surtido efecto es bueno hacer un ls -l.
Ahora procedemos a crear dos archivos que seran sumamente importante para la seguridad y perfiles de nuestro repositorio, en mi caso los he colocado dentro del directorio del subversion:

htpasswd –c /etc/apache/svnpass usuario1
htpasswd /etc/apache/svnpass usuario2


El primer comando con la opción -c nos crea el archivo svnpass en la ruta indicada , y nos pedirá la contraseña que le asignaremos al usuario1, con el segundo comando es que seguiremos agregando mas usuarios al archivo svnpass, hay que observar que ya no es necesario la opción -c , ademas de que si la volvemos a colocar nos vuelve a crear el archivo y eliminara los usuarios creados previamente, hay que tener cuidado con esto.
El segundo archivo que crearemos, lo haremos a mano, este es el que permitirá definir los perfiles de los usuarios y a que repositorios podrán acceder:

vim /etc/subversion/acceso


La estructura de este archivo es sencilla, lo primero que haremos será colocar la etiqueta [groups] y debajo iremos poniendo el nombre del rol y los usuarios que pertenecen a este rol, en esta parte es que definimos exclusivamente los roles, posteriormente si queremos tener un administrador general del svn tendremos que colocar la etiqueta [/] y debajo irá el usuario que será administrador , para hacerlo se debe colocar "@" delante de cada nombre de usuario y con "r" le damos permiso de lectura y "w" permiso de escritura, se puede colocar también "rw".
Por ultimo se coloca el nombre de cada directorio svn, y sus correspondientes usuarios, por ejemplo [repositorio1:/] esto le dará a los usuarios que estén debajo la permisología correspondiente para este repositorio, si queremos ser mas especifico y solo darle permiso en el trunk y no en los branches, podemos definir una política que sea : [repositorio1:/trunk], a continuación agrego un ejemplo de un archivo acceso con varios perfiles y varios repositorios:

[groups]
adminrepositorio1 = usuario1
adminrepositorio2 = usuario2
adminrepositorio3 = usuario1,usuario2

admingeneral = usuarioadmin

observador = usuarioobservador

desarrollador = desarrollador1

[/]
@admingeneral = rw
@observador = r

[repositorio1:/]
@adminrepositorio1 = rw

[repositorio2:/]
@adminrepositorio2 = rw

[repositorio3:/]
@adminrepositorio1 = rw
@adminrepositorio2 = rw

[repositorio3:/branches]
@desarrollador1 = rw


Creado estos dos archivos, ahora configuraremos nuestro modulo dav para definir el WebDav via browser, para ello editaremos el archivo dav_svn.conf:

vim /etc/apache2/mods-available/dav_svn.conf


Es posible que tenga algún contenido, generalmente comentado, a continuación agregaremos al final del archivo las siguientes lineas:


DAV svn
SVNParentPath /var/svn
# Utilizo una plantilla por defecto
SVNIndexXSLT "/svnindex.xsl"

# Autenticacion para los usuarios
AuthType Basic
AuthName "svn"
AuthUserFile /etc/subversion/svnpass

# Solo usuarios autenticados podrán acceder
Require valid-user

# Utilizo políticas de acceso a los repositorios
AuthzSVNAccessFile /etc/subversion/acceso



El significado de estas lineas es el siguiente, lo primero indicamos el nombre por el que se accederá en nuestro browser, es decir, la ruta aquí será : http://direccionio/svn/
La sentencia SVNParentPath nos indica el lugar donde están nuestros repositorios, es usada también en caso de tener varios repositorios, si solo tenemos un repositorio pues usaremos SVNPath, lo que no se debe hacer es usar ambas sentencias.
Hay una linea opcional, y es el uso de una plantilla xsl, si queremos que el svn tenga un aspecto mas presentable.
El siguiente grupo de lineas tratan sobre el mecanismos de autorización y el lugar donde se encuentra el archivo de usuarios, el cual fue el que creamos anteriormente, el nombre y el lugar que hayamos decidido es el que colocaremos en la ruta.
Posteriormente le indicamos al svn que solo aquellos usuarios registrados son los que podrán acceder, es decir que no se permiten accesos anónimos.
Por ultimo indica el nombre y el lugar del archivo que creamos para definir los roles y su permisología.
Una vez hecho esto, guardamos el archivo y reiniciamos el apache, podremos acceder al browser y colocar la dirección de nuestro repositorio, si todo salio bien, nos pedirá el nombre y la clave de acceso del usuario, al verificarla lo que nos mostrará será un mensaje indicando el numero de revisión, en este caso si el repositorio solo se ha creado y no se le han cargado archivos indicará Revision 0.
El alcance de este How-To es solo de la instalación y configuración del SVN, los comandos para su uso los pueden conseguir en múltiples sitios, he incluso recomiendo también el libro de SVN de O'Reilly el cual se consigue gratis, en español o en ingles.
Continua...

lunes, 21 de abril de 2008

Qué hacer si no tenemos la clave de Root?

Lo que escribo ahora me funciono en una máquina con Linux Debian Etch 4.0.
Sucede que muchas veces, se nos olvida a clave del usuario Root, o no la tenemos a la mano , o como me sucedio a mi, tuve que probar una maquina virtual con Debian configurada con los paquetes de Ruby, entonces una amigo me la paso para usarla en el virtualbox, sin embargo cuando la prendo me encontré con la sorpresa que no podia logearme por no tener clave de los usuarios. Qué hacemos en estos casos?.
Pues la solución es entrar por un puerta trasera que tenemos al iniciar linux , precisamente cuando carga el Grub, en ese momento podemos modificar los valores de la carga y asi la maquina se iniciará dejandonos en la linea de comandos, y pues ahi podremos cambiar el password del root con el que podremos posteriormente crearnos nuestro usuario o cambiarle la clave también, veamos como hacer esto paso a paso:
1.- Al prender la maquina , y en el momento de mostrar el Grub presionamos cualquier tecla (menos Enter) esto evitará que se ejecute la secuencia automatica de carga del grub.
2.- Detenido la carga , nos posicionamos sobre la linea que queremos modificar su valor de arranque, esto lo hacemos presionando la tecla "e".
3.- Nos salen 4 lineas , hay una de ellas que comienza con la palabra "kernel" (creo que es la tercera de arriba a abajo) sobre esa linea la editamos presionando "e"
4.- Escribimos al final de la linea ro single init=/bin/bash , nos quedará algo así:
>grub edit> kernel /boot/vmlinuz-2.6.18-6-686 root=/dev/hda1 ro single init=/bin/bash

Los valores pueden cambiar dependiendo de la version del kernel que se tenga y del particionamiento.
5.- Al terminar presionamos Enter y regresamos a la pantalla anterior, ahí presionaremos la tecla "b" y comenzara a bootear la maquina , al terminar quedara en una linea de comando
6.- Hay unos comandos que vamos a necesitar y para ello es necesaria crear la variable de ambiente con PATH
>PATH=/sbin:/usr/bin:/bin

7.- El arranque que hemos realizado ha montado barra ( / ) como solo lectura para poder hacer las modificaciones del password debemos remontarlo en modo lectura - escritura
>mount -o remount /

8.- Ahora podremos cambiar la clave del usuario root
>passwd root

9.- Por ultimo necesitamos confirmar los cambios en el disco y para ello sincronizamos el buffer de la cache
>sync;sync

10.- y listo , reiniciamos y al logearnos lo hacemos con root y con la clave que creamos
>reboot

Continua...