Problemas actualizando Moodle en un sistema con MariaDB

Descripción del problema

Durante la actualización de Moodle se recibe el siguiente error en el momento de verificar el  cumplimiento de los requisitos mínimos: MySQL version 5.5.31 is required and you are running 5.5.5.10.1.33.

Mensaje de error al intentar actualizar Moodle

Análisis de las causas del problema

El problema sucede cuando se intenta actualizar Moodle en un sistema que previamente tenía MySQL como motor de bases de datos pero migró posteriormente a MariaDB generando un conflicto para la revisión de versiones.  Desafortunadamente el mensaje desplegado por Moodle no brinda suficiente información para concluir esto inicialmente.

Solución del problema

Editar el archivo config.php en el directorio principal de Moodle y modificar el tipo de base de datos a MariaDB.

Inicialmente se encuentra configurado con MySQL.

$CFG->dbtype = 'mysqli';

Debe modificarse con MariaDB.

$CFG->dbtype = 'mariadb';

Recursos

  1. MDL-51080 – upgrading on OS where mysql changed to mariadb does not give useful advice
    https://tracker.moodle.org/browse/MDL-51080

Modificar la contraseña del usuario root de MySQL 5

Introducción.

El procedimiento que se describe a continuación permite modificar la contraseña del usuario administrador (root)  de MySQL 5.  Es útil para los casos en que esta se olvida y por lo tanto ya no es posible acceder a sus funciones de administración.

Procedimiento.

Detener el servicio si se está ejecutando actualmente.

# service mysql5 stop

Iniciar el servicio con el modificador de skip-grant-tables.

# mysqld_safe –skip-grant-tables &

Realizar una conexión al motor de base de datos a través de la herramienta de línea de comando.

# mysql -u root

Realizar la actualización de la contraseña.  Téngase en cuenta que se deberá modificar la palabra NUEVO_PASSWORD por la nueva contarseña que se desee asignar al usuario root.

mysql> use mysql;
mysql> update user set password=PASSWORD(“NUEVO_PASSWORD”) where User=’root’;
mysql> flush privileges;
mysql> quit

Detener el servicio

# service mysql5 stop

Iniciarlo normalmente.

# service mysql5 start

Crear un tunel SSH para la conexión a un servidor MySQL detrás de un firewall con Windows utilizando Putty

Introducción.

De manera análoga a como se realizó el tunel SSH utilizando Linux, también es posible implementarlo en Windows gracias al uso de herramientas de terceros como Putty.

Para la verificación de la conexión a la base de datos en lugar de la herramienta básica de línea de comando (que también debe funcionar normalmente) se utilizará MySQL Workbench que es la herramienta de administración gráfica que provee el motor de bases de datos.

Implementación de la solución.

Crear la especificación del tunel en Putty.

Este paso sólo es necesario realizarlo una única vez mientras se configura el perfil en Putty, en ocasiones posteriores sólo será necesario invocarlo.

Ejecute Putty.exe.

Session en Putty.exe
Session en Putty.exe

En la Session (lado izquierdo) especifique la siguiente información.

1. Nombre del servidor SSH.  desarrollo.com para este ejemplo.

2. Puerto del servicio SSH.  Es el puerto 22 por defecto.  Elija además el tipo de conexión (Connection type) SSH.

3. Especifique un nombre para almacenar la sesión (Saved Sessions).  MiTunel para este ejemplo.

4. Presione el botón guardar (Save) para almacenar la configuración recién especificada.

Connection > SSH en Putty.exe
Connection > SSH en Putty.exe

En las opciones de Connection > SSH elija la casilla de verificación Don’t start a shell para evitar que se cree una consola de comandos interactiva ya que sólo se desea crear el tunel.

Connection > SSH > Tunnels en Putty.exe
Connection > SSH > Tunnels en Putty.exe

Determine la información relacionada con los lados del tunel.

5. Especifique el puerto local desde el cual se iniciará el tunel.  3307 en este caso.

6. Especifique el destino y su puerto donde terminará el tunel.  localhost:3306 para este ejemplo.

Presione el botón agregar (Add) para almacenar los extremos del tunel.

Finalmente almacena la configuración establecida regresando a la sección de Session y presionando el botón de guardar (Save).

Establecer un tunel previamente especificado.

Esto se puede hacer de dos maneras, una desde la interfaz gráfica de Putty seleccionando MiTunel en la lista de las sesiones guardadas (Saved Sessions), presionando el botón cargar (Load) y abriendo la sesión presionando el botón (Open).

Una segunda alternativa es desde la línea de comando ejecutando la siguiente instrucción.

C:rutaaputty.exe -load MiTunel

En ambos casos el resultado es el mismo, aparecerá una ventana de login para realizar la autenticación con el servidor remoto (6).

Autenticación de usuario con SSH.
Autenticación de usuario con SSH.

Realizar la conexión a MySQL a través del tunel SSH.

Como se mencionó inicialmente para la verificación de la conexión se utilizará MySQL Workbench.

Connect to database
Connect to database

Debe tenerse muy en cuenta que gracias al tunel recién creado, la aplicación cliente de la base de datos interpretará que el motor de base de datos se encuentra ubicado localmente (9) y que su puerto es el 3307 (10) -ver 5 y 6-.

Crear un tunel SSH para la conexión a un servidor MySQL detrás de un firewall con Linux Debian 5

Introducción.

Este es el panorama del esquema de red de la oficina del grupo de desarrollo.

Esquema de la red
Esquema de la red

Un servidor (centro) alberga los proyectos web (Apache) de los cuales el grupo de desarrollo manipula sus archivos (SSH + Samba), así como sus bases de datos (MySQL).  El servidor cuenta con dos interfaces de red las cuales separan físicamente el acceso de la red privada (eth1) de la red pública o Internet (eth0).

Los desarrolladores utilizan los clientes desde la red privada para la cual no hay ningún tipo de filtro en el servidor y pueden acceder a la totalidad de sus servicios.  Desde el exterior, el servidor implementa un firewall que sólo permite la consulta web de los proyectos y el acceso al SSH.  Como fácilmente se concluye, el firewall de la interfaz pública (eth0) filtra explícitamente el acceso a los servicios de MySQL y Samba que son considerados como inseguros.

El problema.

Se requiere ahora que los desarrolladores puedan acceder al servidor desde sus clientes a través de Internet.

El problema se divide en dos aproximaciones.

  1. Manipular el software, el código y los datos remotamente.
  2. Manipular el software y el código localmente, y los datos remotamente.

La solución.

Manipular el software, el código y los datos remotamente (1).

Este es el caso mas simple.  Como los aplicativos son web se acceden a través de un navegador, su código es manipulado a través de SSHFS (ver instrucciones para Linux y Windows) y sus datos son manipulados a través de la web con PHPMyAdmin.

Manipular el software y el código localmente y los datos remotamente (2).

Este caso es mas elaborado que el anterior ya que el software y el código reside localmente porque lo es muy fácil de manipular, sin embargo los datos (la base de datos MySQL) de los proyectos continúan viviendo en el servidor de desarrollo.

Dado que el puerto de acceso a MySQL se encuentra filtrado para el exterior por razones de seguridad es inicialmente imposible conectarse a la base de datos desde el cliente a través de Internet.  La solución es crear un tunel SSH desde el cliente remoto hasta el servidor a través del medio inseguro (Internet) y desde allí, ahora un lugar seguro, realizar la conexión con el puerto de la base de datos que en este caso reside en el mismo servidor.

Implementación de la solución (2).

Por razones que serán obvias, es necesario que los usuarios remotos cuenten con cuentas (nombre de usuario/contraseña) en el sistema operativo del servidor de desarrollo y que estas estén habilitadas para acceder al mismo a través de SSH.

Las siguientes acciones se realizan desde el cliente remoto.

Establecer el tunel SSH entre el cliente remoto y el servidor de desarrollo.

$ ssh desarrollador@desarrollo.com -L 3307:localhost:3306 -N -f

Con la instrucción anterior estamos creando un tunel entre el cliente remoto y el servidor desarrollo.com con el usuario desarrollador y utilizando al protocolo SSH.  Se le está indicando además que el tunel se deberá establecer entre el puerto 3307 local y el puerto 3306 del servidor remoto, en este caso el mismo localhost.  Es muy importante tener en cuenta que la referencia de este último servidor remoto se realiza previa conexión a desarrollo.com, es decir que su acceso se hace desde este y no directamente desde el cliente que inicia la conexión del tunel ejecutando el comando.

Otro aspecto interesante a tener en cuenta es que los puertos utilizados no necesariamente deben ser diferentes ya que uno es local (3307 en este ejemplo) y el otro es remoto (3306 el estándar de MySQL), sin embargo en el caso de que ya se cuente con una instalación local de MySQL (utilizando el puerto 3306) será entonces necesario utilizarlos diferentes como se ha planeado en este artículo.

Realizar la conexión a MySQL a través del tunel SSH.

Después de establecido el tunel entre cliente y servidor la conexión se realiza directamente con el puerto local (3307) del cliente remoto como si el servicio se estuviera ejecutando en la misma máquina cliente, el tunel se encarga de transmitir la información encriptada y realizar las conversiones necesarias a cada uno de los lados.

$ mysql -h 127.0.0.1 -u bd_usuario -p -P 3307 bd_nombre

Tenga en cuenta que el inicio de conexión (connect) a una base de datos toma cierto tiempo ya que el motor de bases de datos realiza una carga previa de los nombres de las tablas y de los campos de estas.  Si desea evitar esta precarga de información puede utilizar el parámetro -A en la invocación al cliente de MySQL (mysql).

Scripts de conexión.

A pesar de que el procedimiento es -extremadamente- simple, he creado un par de scripts para facilitar y automatizar el proceso de creación del puente SSH y de conexión a la base de datos a través de línea de comando.

Los scripts pueden ser descargados de aqui y configurados utilizando cualquier editor de texto.  tunssh_connection se encarga de establecer la conexión del túnel SSH mientras que tunssh_mysql realiza la conexión a la base de datos MySQL remota a través del túnel SSH.

Enlaces.

Instalación de Apache, PHP y MySQL en Linux Debian 5

El método rápido.

La instalación de estos paquetes se puede realizar de dos maneras.  Utilizando Tasksel, que yo he llamado el método rápido, o instalando -casi- individualmente los paquetes que se deseen.  En mi opinión personal prefiero el segundo método ya que controlo directamente que se está instalando en el servidor.

Tasksel es una herramientas de Debian que se incluye en la mayoría de las distribuciones hijas (como Ubuntu) y permite instalar en bloque muchos paquetes según agrupaciones predefinidas, entre ellas la instalacion de un LAMP Server.

Instalación de Apache.

Instalación del servidor HTTP.

# apt-get install apache2

# apt-get install wwwconfig-common

Modificar la ubicación del DOCUMENT_ROOT.

Por defecto el árbol de directorios que se publica a través del servidor web se ubica en /var/www, si se desea modificar esta ubicación es necesario realizar los siguientes pasos.

Crear el directorio donde se almacenarán los documentos web.

# mkdir -p /home/www/public

Modificar la configuración de Apache para incluír a este nuevo directorio.

# vi /etc/apache2/sites-enabled/000-default

Reemplazar las ocurrencias de /var/www por la ruta deseada, es decir, los valores de DocumentRoot y su correspondiente Directory.

DocumentRoot /home/www/public/
# …
<Directory /home/www/public/>
# …

Reiniciar el servicio para tener en cuenta los cambios recién realizados.

# /etc/init.d/apache2 restart

Instalación de PHP.

Instalación de lenguaje de programación y varios de sus módulos.

# apt-get install php5 php5-cli php5-gd php5-mcrypt php5-curl php5-imagick php5-mhash php5-sqlite php5-xsl

Instalación del módulo dinámico (DSO) de Apache.

# apt-get install libapache2-mod-php5

Instalación de MySQL.

Instalación del motor de base de datos.

# apt-get install mysql-server

Instalación del modulo de PHP asociado a este motor de base de datos.

# apt-get install php5-mysql

Instalación de PHPMyAdmin para la administración de la base de datos a través de web.

# apt-get install phpmyadmin

El acceso se realiza a través de la URL http://localhost/phpmyadmin/.

Instalación de Apache, MySQL y PHP en Linux Ubuntu

Estos son los pasos que se siguieron para instalar los paquetes de [L]AMP: Apache, MySQL y PHP en mi equipo de desarrollo ahora que estoy estrenando Ubuntu Intrepid (8.10) -nuevamente-.

Apache.

$ sudo apt-get install apache2 libapache-mod-suphp

MySQL.

$ sudo apt-get install mysql-admin mysql-client mysql-navigator mysql-server phpmyadmin

PHP.

$ sudo apt-get install php5 php5-cli php5-dbg php5-gd php5-interbase php5-mcrypt php5-mysql php5-sqlite php5-suhosin php5-xdebug php-soap

Mover el repositorio de archivos de MySQL 5.x en FreeBSD 7

La instalación ubica por defecto al repositorio de archivos del motor de base de datos en /var/db/mysql. Esta ubicación no es necesariamente la idónea, para nuestro caso no disponemos del espacio suficiente en esa partición y es por eso que es necesario moverla.

Los ajustes siguientes son los necesarios para transladar el repositorio de archivos de MySQL a /home/datos_mysql.

# /usr/local/etc/rc.d/mysql-server stop
# mv /var/db/mysql /home/datos_mysql
# vi /etc/rc.conf
mysql_dbdir=”/home/datos_mysql”

Instalación de MySQL 5.x en FreeBSD 7

Obtiene los paquetes necesarios de Internet, los compila e instala.

# cd /usr/ports/mysql50-server/
# make install clean

Establece el directorio de datos inicial y le asigna los permisos apropiados.

# /usr/local/bin/mysql_install_db

Establece un archivo de configuración inicial basado en los archivos de demostración.

# cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf

Existen varios archivos base de configuración en la ruta /usr/local/share/mysql para elegir según la configuración de hardware del servidor y su finalidad.

my-small.cnf Para sistemas de bajos recursos con 64MB de RAM o menos.
my-medium.cnf Para sistemas hasta con 128MB de RAM, ideal para servidor web
my-large.cnf Para sistemas con 512MB de RAM, ideal para servidor MySQL dedicados
my-huge.cnf Para sistemas con 1GB o 2GB de RAM, ideal para datacenters.

Actualiza el usuario y grupo propietario de los archivos.

# chown -R mysql:mysql /var/db/mysql

Se inicia manualmente el motor de base de datos para verificar que todo esté funcionando correctamente.

# /usr/local/bin/mysqld_safe --user=mysql &

Se modifica la contraseña del usuario administrador (root). Modifique la cadena rootpassword por el valor que considere apropiado.

# /usr/local/bin/mysqladmin -u root password 'rootpassword'

Habilita el inicio automático del motor de base de datos al inicio del servidor.

# vi /etc/rc.conf

    mysql_enable=”YES”

Si se desea desactivar el acceso externo al servidor de bases de datos se deberá realizar la siguiente modificación. Esto es útil cuando sólo nos interesa permitir conexiones desde el servidor de páginas que se encuentra ubicado en el mismo equipo y no desde el exterior.

# vi /var/db/mysql/my.cnf

(quitar el comentario)

skip-networking

Reiniciar el servicio de MySQL.

# /usr/local/etc/rc.d/mysql-server restart

Revise el archivo de registro por mensajes de error o de advertencia que le permitan depurar cualquier problema existente en el motor de base de datos.  El archivo de registro se encuentra ubicado en /var/db/mysql y su nombre corresponde al siguiente formato: hostname.domainname.err, para este artículo será entonces: webserver.mydomain.com.err.