Estoy en la tarea de migrar a la última versión del servidor MySQL. Por ahora las webs apuntan  a la versión 3.23 instalada por defecto. Me interesa montar un MySQL 5.0.18 pero manteniendo de momento las dos bases de datos por si tengo que volver atrás… y por supuesto todo encima del mismo box.

La instalación es sencilla…

./configure –prefix=/opt/mysql
make
make install

Editaremos /opt/mysql/my.cnf con las siguientes opciones:

port            = 3316
socket          = /opt/mysql/var/mysql.sock

[mysqld]
port            = 3316
socket          = /opt/mysql/var/mysql.sock
pid-file        = /opt/mysql/var/mysql.pid
datadir         = /opt/mysql/var

Ahora ejecutaremos el script de inicialización de la base de datos: 

/opt/mysql/bin/mysql_install_db –defaults-file=/opt/mysql/my.cnf –user=mysql –port=3316

Y crearemos el script /etc/init.d/mysqld2, que debe contener la linia de arranque: 

/opt/mysql/bin/mysqld_safe  –defaults-file=/opt/mysql/my.cnf –user=mysql –port=3316 

El script entero, para una RedHat, podría ser pues:

#!/bin/bash
#
# mysqld        This shell script takes care of starting and stopping
#               the MySQL subsystem (mysqld).
#
# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

datadir=”/opt/mysql/var”

start(){
        chown -R mysql.mysql $datadir
        chmod 0755 $datadir
        /opt/mysql/bin/mysqld_safe  –defaults-file=/opt/mysql/my.cnf –user=mysql –port=3316 >/dev/null 2>&1 &
        ret=$?
        if [ $ret -eq 0 ]; then
            action $”Starting $prog: ” /bin/true
        else
            action $”Starting $prog: ” /bin/false
        fi
        return $ret
}

stop(){
        /bin/kill `cat /opt/mysql/var/mysql.pid 2> /dev/null ` > /dev/null 2>&1
        ret=$?
        if [ $ret -eq 0 ]; then
            action $”Stopping $prog: ” /bin/true
        else
            action $”Stopping $prog: ” /bin/false
        fi
        return $ret
}

restart(){
    stop
    start
}

# See how we were called.
case “$1″ in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  *)
    echo $”Usage: $0 {start|stop|restart}”
    exit 1
esac

exit $?

Ahora se trata de ir jugando con el segundo servidor, pasando datos del primero y probando que las aplicaciones/webs funcionan correctamente.

Comento que, para ello, he montado  un segundo PHPMyAdmin para el nuevo servidor de bases de datos. Y cuando he reseteado via CLI la password de root, me ha dado el error Client does not support authentication protocol requested by server; consider upgrading MySQL client. Esta situación se describe en el manual de MySQL 5. Yo he optado por cambiar la password del usuario root al sistema antiguo.

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD(‘hola’) WHERE Host = ‘localhost’ AND User = ‘root’;
Query OK, 0 rows affected (0,01 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0,00 sec)

Con eso he arreglado el problema. De todas formas, es importante tener en cuenta que los clientes MySQL antiguos no usan el nuevo formato HASH de passwords. A partir de MySQL 4.1.1 ya está este nuevo sistema, y que para mantener la comptibilidad debemos usar OLD_PASSWORD para generar passwords a la antigua usanza. Así que en un futuro tocará recompilar Apache+PHP para que usen las librerias de MySQL 5 y no las de la 3.