martes, 30 de noviembre de 2010

Replicación de la base de datos en MySQL

Vamos a describir cómo configurar Replicación de una base de datos en MySQL.


La Replicación en MySQL nos permitirá tener una copia exacta de una base de datos en un servidor maestro (master) en otro servidor esclavo (slave).

Todas las actualizaciones de la base de datos sobre el servidor master son inmediatamente replicadas a la base de datos sobre el servidor slave. De manera que la base de datos en el servidor slave está Sincronizada con la base de datos del servidor master.

Es importante señalar que ésto NO es una Política de Backup, porque un comando DELETE emitido accidentalmente en el master será trasladado a la base de datos slave. Sin embargo, una replicación ayudará a protegernos contra una falla de hardware.


Lo que haremos es replicar la base de datos nombrada moodle1910 ubicada en el servidor master con IP 10.0.0.105 en la base de datos del mismo nombre (moodle1910) pero ubicada en el servidor slave con IP 10.0.0.100

Servidor Master
IP: 10.0.0.105
Base de datos: moodle1910

Servidor Slave
IP: 10.0.0.100
Base de datos: moodle1910


SERVIDOR MASTER

1. Primero realizar un
1.a dump de la base de datos
mysqldump -uroot -p -C -Q -e -a moodle1910 | gzip -9 > dump_moodle1910.sql.gz

1.b y copiarlo al servidor slave
scp -p dump_moodle1910.sql.gz root@10.0.0.100:/root


2. Luego, editar el archivo
vi /etc/my.cnf
==========================
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

log-bin=mysql-bin
binlog-do-db=moodle1910
server-id=1


# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
==========================

3. Reiniciar MySQL
service mysqld restart

4. Configurar el usuario, la base de datos a replicar y anotar algunos datos
mysql -uroot -p

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'tuClaveSLAVE';
mysql> FLUSH PRIVILEGES;
mysql> USE moodle1910;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

+----------------------+------------+------------------+------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+------------+------------------+------------------------+
| mysql-bin.000012 | 6304258 | moodle1910 | |
+----------------------+------------+------------------+------------------------+

mysql> quit;



SERVIDOR SLAVE

1. Primero que nada, crear una base de datos vacía con el mismo nombre de la que se pretende replicar. En este caso, moodle1910 (¿cómo?)

2. Con el archivo dump_moodle1910.sql.gz copiado a este servidor, (ver paso 1b del Servidor Master), ejecutar:

2.a Descomprimir el archivo .gz
gunzip dump_moodle1910.sql.gz

2.b
En caso de habernos logeado al servidor slave por SSH ejecutar:
nohup mysql -uroot -pxxxxx moodle1910 < dump_moodle1910.sql
(Esto permitirá que se complete la ejecución de restore, aún cuando se vea interrumpida la sesión ssh)

3. Editar el archivo
vi /etc/my.cnf
==========================
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

server-id=2
master-host=10.0.0.105
master-user=slave_user
master-password=tuClaveSLAVE
master-connect-retry=60
replicate-do-db=moodle1910

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
==========================

4. Reiniciar MySQL:
service mysqld restart

5. Últimos pasos...

mysql -uroot -p

mysql> STOP SLAVE;

mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.105', MASTER_USER='slave_user', MASTER_PASSWORD='tuClaveSLAVE', MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS= 6304258;

mysql> START SLAVE;
mysql> quit;


AL FIN...
Eso es todo, de ahora en adelante todos los cambios en moodle1910 sobre Master serán replicados en moodle1910 sobre Slave.


Links

jueves, 11 de noviembre de 2010

Cambio de palabras claves en Moodle

En esta oportunidad realizaremos un cambio significativo sobre palabras/frases claves en Moodle.
Cambiaremos en la portada de Moodle, la leyenda "Categorías" por "Unidades Académicas" y también "Subcategoría" por "Departamentos y Áreas".

Para ello, ingresar con un usuario administrador de Moodle y ubicar el panel de Administración.
  • Cambio de palabras clave en Moodle
    • Administración->Idioma->Edición del Idioma
      • Editar palabras o frases
        • es_ar_utf8_local / moodle.php
          • Course categories (categories) -> Unidades Académicas
          • Subcategories and courses (categorycontents) -> Departamentos y Áreas
Link
  • http://moodle.org/mod/forum/discuss.php?d=84275

¿Cómo crear una base de datos vacía para Moodle?

Crearemos una base de datos vacía para Moodle en MySQL que llamaremos moodle1910 (el número 1910 biene en relación a la versión de Moodle que es 1.9.10).
También crearemos un usurio para la base de datos que realizará los backups.

En una terminal ejecutar los siguientes pasos:

mysql -uroot -p

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| moodle199 |
| mysql |
+--------------------+
3 rows in set (0.00 sec)

mysql> CREATE DATABASE moodle1910;
Query OK, 1 row affected (0.04 sec)

mysql> ALTER DATABASE moodle1910 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,
-> DROP,INDEX,ALTER ON moodle1910.*
-> TO moodleuser1910@localhost IDENTIFIED BY 'tuClave';
Query OK, 0 rows affected (0.55 sec)

mysql> GRANT SELECT,LOCK TABLES ON moodle1910.* TO moodlebackup@localhost IDENTIFIED BY 'backupClave';
Query OK, 0 rows affected (0.55 sec)

mysql> quit


Link

lunes, 8 de noviembre de 2010

¿Cómo averiguar el motor de bases de datos utilizada por Moodle?

Comenzaremos por averiguar qué base de datos tenemos configurado en nuestro Moodle. Para ello, debemos ver el archivo config.php (ubicado por ejemplo, /var/www/moodle/config.php) que nos indica el nombre de la base de datos, usuario y clave.

En mi caso, el nombre de la base de datos es moodle199. En primer lugar verifico que exista la base de datos que estoy buscando, y luego del chequeo, realizo una consulta en la tabla mdl_user de la base de datos moodle199. Finalmente, allí se mostrará el motor de la base de datos que en es MyISAM. Para llevar adelante ésto, en una terminal, ejecutar los siguientes comandos

mysql -uroot -p

> SHOW DATABASES;
+--------------------+

| Database |

+--------------------+

| information_schema |

| moodle199 |

| mysql |

| spip20 |

| spip210 |

+--------------------+
6 rows in set (0.00 sec)

> SHOW TABLE STATUS FROM moodle199 LIKE 'mdl_user';
+----------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-----------------+----------+----------------+----------------------------+

| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |

+----------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-----------------+----------+----------------+----------------------------+

| mdl_user | MyISAM | 10 | Dynamic | 16320 | 235 | 3852028 | 281474976710655 | 2606080 | 828 | 17700 | 2010-07-06 12:28:15 | 2010-11-02 00:19:04 | 2010-07-06 12:28:17 | utf8_general_ci | NULL | | One record for each person |

+----------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-----------------+----------+----------------+----------------------------+

1 row in set (0.00 sec)

>quit


Link:
  • http://dev.mysql.com/doc/refman/5.0/en/using-innodb-tables.html