Está en la página 1de 7

Instalación y configuración de un servidor de base de datos MySQL

4.1 y su réplica en Red Hat Linux ES 4.0 o Fedora.


Toni de la Fuente Díaz
http://blyx.com
Septiembre 2006

Introducción:............................................................................................................1
Datos de interés sobre MySQL en RedHat/Fedora:................................................1
Instalación: ..............................................................................................................2
Backup: ...................................................................................................................6
Comandos de interés: .............................................................................................7

Introducción:

La finalidad de este manual es guiar al administrador durante la instalación y


configuración de un entorno maestro-réplica de base de datos MySQL versión 4.1
entre dos máquinas con sistema operativo RedHat Linux ES 4.0. Este manual es
válido para cualquier versión de Linux o Unix con MySQL 4.1 teniendo en cuenta las
diferencias que hay en cuanto a la instalación de paquetes y localización de archivos
de configuración, logs, etc.

El paso previo a la instalación del entorno maestro/réplica es configurar correctamente


el archivo /etc/hosts de forma que podamos usar nombre de máquina en lugar de la IP
a la hora de generar los acuerdos de réplica, esto nos permitirá realizar una
configuración más sencilla permitiendo un cambio de IP sin necesidad de reconfigurar
el entorno.

Para realizar este documento utilizaremos dos máquinas siendo este el nombre y un
ejemplo del contenido del archivo /etc/hosts:

10.0.0.10 maestro maestro.blyx.inet


10.0.0.20 replica replica.blyx.inet

Datos de interés sobre MySQL en RedHat/Fedora:

La localización del archivo de configuración:


/etc/my.cnf

El script de arranque y parada:


/etc/init.d/mysqld {start|stop|restart|status}

Los archivos que componen las diferentes base de datos residen en el directorio:
/var/lib/mysql
El archivo de log:
/var/log/msyqld.log

Instalación:

La instalación de los paquetes necesarios se puede efectuar vía up2date,


conectándonos al canal “extras” o bien a través de los CD de instalación. El paquete
mysql-4.1.*, que contiene el cliente MySQL, se encuentra en el CD1 de instalación
mientras que el paquete mysql-server-4.1.* contiene el servidor de MySQL y está en el
CD 4. Esta tarea se puede hacer con el comando “yum install mysql-server” en
Fedora.

Nota: Mientras no se indique lo contrario, todos los pasos se realizan en las dos
máquinas, es decir, tanto en el Master como en la Réplica. El nombre que utilizaremos
para la base de datos de este ejemplo es MISDATOS.

Para instalar los archivos RPM ejecutamos los siguientes comandos:


# rpm -hiv mysql-4.1.7-4.RHEL4.1.i386.rpm
# rpm -hiv mysql-server-4.1.7-4.RHEL4.1.i386.rpm

Para ver qué y dónde se instalan los paquetes podemos ejecutar el comando `rpm –ql
mysql` o `rpm –ql mysql-server`.

Con la utilidad chkconfig activamos el proceso mysqld en el arranque del sistema, en


nuestro caso usaremos el run level 3.
# chkconfig mysqld on

Una vez instalado y activado en el arranque procedemos a arrancar el servidor:


# /etc/init.d/mysqld start
Initializing MySQL database: [ OK ]
Starting MySQL: [ OK ]

Establecemos la contraseña del root de mysql, superadministrador de la base de


datos:

# mysqladmin password contraseñadelrootdb

Accedemos a la shell de MySQL, creamos la base de datos que replicaremos y


asignamos permisos para acceso desde localhost para el usuario específico
misdatosuser:

# mysql -u root -p
Enter password:
mysql> CREATE DATABASE MISDATOS;
mysql> GRANT ALL PRIVILEGES ON MISDATOS.* TO 'misdatosuser'@'localhost'
IDENTIFIED BY ‘contraseñamisdatosuser’;

Nota específica si ya tenías una base de datos en formato MyISAM en otro servidor:
En este caso, tenía una base de datos en formato MyISAM con una sola tabla llamada
“documentos”.
Este manual está escrito para bases de datos con tablas InnoDB debido al mejor rendimiento
que ofrecen frente a MyISAM. De forma que si ya tienes una BBDD puedes pasarla a InnoDB
exportándola del servidor antiguo (con mysqldump) y modificando el esquema de cada tabla
para que la DB sea InnoDB en lugar de MyISAM:

# cp MISDATOS.sql MISDATOS.sql-InnoDB

Modificamos la última línea de creación de cada tabla por la siguiente:

# vi MISDATOS.sql-InnoDB
) ENGINE=InnoDB;

Una vez modificado insertamos el esquema en la DB correspondiente, este paso solo lo


hacemos en el master:

# mysql -u root -pcontraseñadelrootdb MISDATOS < MISDATOS.sql-InnoDB

Comprobamos que se han insertado correctamente los datos ejecutando una serie de
comandos básicos de SQL:

# mysql -u root -pcontraseñadelrootdb


mysql> show databases;
+----------+
| Database |
+----------+
| MISDATOS |
| mysql |
+----------+
2 rows in set (0.00 sec)

mysql> use MISDATOS;


Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+--------------------+
| Tables_in_MISDATOS |
+--------------------+
| documentos |
+--------------------+
1 row in set (0.00 sec)

mysql> select * from documentos;


+-----------------------------+----------------+------------+------+
| ID | USUARIO | FECHA | ROL |
+-----------------------------+----------------+------------+------+
| 1 | sadf | 0000-00-00 | 234 |
| 1LDQS3ASDFSDFASDFASDFASDFAS | asdfas | 2006-08-25 | NULL |
| 2 | sadf | 0000-00-00 | 234 |
| 3 | sadf | 0000-00-00 | 234 |
| 3I8DNFT90asdfasdfaasQPREBMK | lsosksskskATOS | 2006-08-25 | NULL |
| 68RUV4EI4U9NFeF063BS99MAPA7 | juanitoc | 2006-08-25 | NULL |
| FSHC3MTN3I3T8e48F714CL85BV4 | pepitoas | 2006-08-25 | NULL |
+-----------------------------+----------------+------------+------+
12 rows in set (0.00 sec)
Creamos el directorio donde almacenaremos los datos específicos de la replicación,
en las dos máquinas:

# mkdir /var/log/mysql
# chown mysql:mysql /var/log/mysql

Ahora procedemos a configurar el master, pare ello añadimos las líneas en negrita en
la sección [mysqld] del archivo /etc/my.cnf:

# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
server-id=1
innodb_flush_log_at_trx_commit=1
innodb_safe_binlog
sync-binlog=1
log-bin=/var/log/mysql/master-bin
log-bin-index=/var/log/mysql/master-bin.index

Las líneas anteriores indican el ID del servidor, debe ser único en toda la granja de
servidores, parámetros para optimizar InnoDB y ubicación de los archivos de registro
usados en la réplica.

Una vez hechas estas modificaciones reiniciamos el servicio mysqld en el servidor


master:

# /etc/init.d/mysqld stop
# /etc/init.d/mysqld start

Comprobamos que el servicio está arriba y escuchando en el Puerto 3306/TCP:


# netstat -an|grep -i listen|grep -i 3306

Configuramos la regla que permitirá al usuario slave_user realizar las réplicas entre el
maestro y el esclavo, esto se realiza en el servidor master:
# mysql -u root -p
Enter password:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'replica' IDENTIFIED BY
'contraseña_slave';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 245 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql> exit
Bye
Tomamos nota del archivo master-bin.000001 y la posición (245). Comprobamos que
efectivamente está el log binario, con el comando mysqlbinlog podemos ver el
contenido del mismo:
# mysqlbinlog /var/log/mysql/master-bin.000001

En el servidor esclavo realizamos la siguiente configuración:

# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
read-only
server-id=2
master-host=maestro
master-user=slave_user
master-password=contraseña_slave
master-connect-retry=60
replicate-do-db=MISDATOS
relay-log = /var/log/mysql/slave-relay-bin
relay-log-index = /var/log/mysql/slave-relay-bin.index

Con los parámetros anteriores indicamos que no se pueda escribir en la base de datos
para evitar inconsistencias, el ID único, los datos de conexión a la base de datos
maestra con el TTL (segundos) correspondiente así como la ubicación de los archivos
de registro.

Una vez hechas las modificaciones reiniciamos el servidor réplica para que tengan
efecto los cambios:

# /etc/init.d/mysqld stop
# /etc/init.d/mysqld start

Comprobamos que el servicio está arriba y escuchando en el Puerto 3306/TCP:

# netstat -an|grep -i listen|grep 3306


tcp 0 0 0.0.0.0:3306 0.0.0.0:*
LISTEN

Aún no estamos replicando nada, todavía necesitamos volcar el estado actual de la


DB en el master al servidor esclavo.

Hacemos un volcado (dump) de la db MISDATOS en el master:

# mysqldump –u root -pcontraseñadelrootdb --all-databases > backup.sql

Copiamos el archivo backup.sql a la réplica por ssh y lo insertamos en la db,


previamente debemos crear la db MISDATOS en la réplica:
mysql> create database MISDATOS;
mysql> exit;

# mysql -u root -pcontraseñadelrootdb MISDATOS < backup.sql

En el master ejecutamos el siguiente comando y tomamos nota del File y Position


(como hemos hecho anteriormente):
# mysql -u root -pcontraseñadelrootdb
mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 357 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Una vez extraídos los datos anteriores en la réplica ejecutamos:

mysql> CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000001'


MASTER_LOG_POS=357;
mysql> slave start;

Para ver que ya se está haciendo la réplica hacemos una modificación en la db


MISDATOS del master:

# mysql -u root -pverpins


mysql> use MISDATOS;
mysql> UPDATE `documentos` SET `USUARIO` = 'prueba010' WHERE `ID` =1
LIMIT 1;

En la replica hacemos `search * from documentos;` y debemos ver que ya se ha


hecho la réplica correctamente.

También podemos mirar en la réplica el archivo binario de transacciones y


encontraremos como el master le ha pasado la información a la réplica:

# mysqlbinlog /var/log/mysql/slave-relay-bin.000001
use MISDATOS;
SET TIMESTAMP=1157388190;
UPDATE `documentos` SET `USUARIO` = 'prueba010' WHERE `ID` =1 LIMIT 1;

Backup:

Para no interrumpir el trabajo del la base de datos maestra las tareas de


respaldo/backup las realizamos en la réplica, para ello hemos preparado el siguiente
script:

# vi /root/scripts/auto-mysql-backup.sh
#!/bin/bash

DATE=`date +%Y%m%d`
mysqladmin --user=root --password=contraseñarootdb stop-slave
mysqldump --user=root --password= contraseñarootdb --lock-tables --all-
databases > /root/backup/backup-$DATE.sql
mysqladmin --user=root --password=contraseñarootdb start-slave

Lo hacemos ejecutable:
# chmod 700 /root/scripts/auto-mysql-backup.sh

El script creará un backup en el directorio /root/backup con el nombre backup-


FECHA.sql. Y para que el sistema lo ejecute cada noche a las 4:02AM hacemos un
link simbólico al directorio cron.daily estandar en RedHat:

# ln -s /root/scripts/auto-mysql-backup.sh /etc/cron.daily/auto-mysql-
backup.sh

Comandos de interés:

Chequear y corregir la integridad de la base de datos:


# mysqlcheck -o MISDATOS -u root –pcontraseñadelrootdb

Ver estado del binario de réplica en un servidor sclavo:


# mysqlbinlog /var/log/mysql/slave-relay-bin.000001

También podría gustarte