En los sistemas GNU/Linux, para mejorar el rendimiento y eficiencia (y exprimir al máximo las características del CPU) se recomienda compilar todos los servicios, especialmente aquellos críticos, en lugar de instalar los binarios disponibles en los repositorios. En este artículo voy a explicar cómo compilar e instalar el servidor de bases de datos MySQL desde su código fuente. Es bastante sencillo, pero hay que prestar especial atención a algunos detalles.

Dependiendo de la aplicación a la que se le dará soporte, puede que se requieran versiones específicas de MySQL. En general se recomienda instalar las versiones más recientes posible, para evitar vulnerabilidades de seguridad. En este momento aún poseen soporte las ramas 5.1, 5.5 y 5.6. No recomiendo instalar nada por debajo de la versión 5.1 , ya que estarán expuestos a muchas vulnerabilidades de seguridad.

Desde el sitio de descargas oficial de MySQL, descagar la edición de la comunidad ("Community"): Download MySQL Community Server.

Seleccionar la versión que se necesite instalar, y especificar la plataforma "Source Code". Descargar el archivo "Generic Linux (Architecture Independent), Compressed TAR". En el siguiente paso no es necesario registrarse en el sitio para obtener el link, sino que basta acceder al enlace "No thanks, just start my download".

Si el servidor tiene acceso a Internet, copiar el enlace y descargar el paquete con wget. Por ejemplo:

wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.19.tar.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.38.tar.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.73.tar.gz

Descomprimir el paquete en el directorio /usr/local/src/:

cd /usr/local/src/
tar xvf ~/mysql-5.5.38.tar.gz
cd mysql-5.5.38

El archivo INSTALL-SOURCE posee las instrucciones de instalación (en inglés). Es un documento demasiado extenso que posee instrucciones generales y específicas para cada plataforma. Dirigirse directamente a la sección "2.9 Installing MySQL from Source", la cual explica detalladamente los pasos para compilar MySQL desde el código fuente:

less INSTALL-SOURCE

El archivo BUILD-CMAKE posee información especifica acerca de cmake:

less BUILD-CMAKE

NOTA: presionar 'Q' para cerrar less.

Antes de comenzar es necesario instalar ciertas herramientas necesarias para compilar (cmake, bison y flex). En CentOS ejecutar yum install cmake bison flex, en Debian y derivados apt-get install cmake bison flex.

El demonio MySQL requiere un usuario y grupo para su ejecución y configuración de permisos en las instancias:

groupadd mysql
useradd -r -g mysql mysql

Las versiones recientes de MySQL utilizan CMake para generar la configuración del código fuente antes de compilar. Es posible listar todos los parámetros de configuración junto con una breve ayuda, ejecutando:

cmake -LAH

A modo de ejemplo, configurar MySQL con readline, SSL, y utilizando el directorio de instalación /usr/local/mysql-5.5.38:

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.5.38 -DWITH_READLINE=ON -DWITH_SSL=yes

Compilar e instalar:

make
make install

Utilizo el directorio /usr/local/mysql-5.5.38 en vez de simplemente /usr/local/mysql, por si en el futuro es necesario actualizar a una nueva versión. De esta forma, /usr/local/mysql es un link simbólico al directorio de instalación:

cd /usr/local/
ln -s mysql-5.5.38/ mysql

Ajustar los permisos en el directorio de instalación para que el dueño y grupo sea "mysql", y denegar la ejecución para el resto de los usuarios:

chown -R mysql:mysql mysql-5.5.38
chmod -R o-rwx mysql-5.5.38/

A continuación, es necesario crear el archivo de configuración del servidor MySQL. Para ello, crear el directorio "etc" dentro del directorio de instalación:

cd mysql-5.5.38/
mkdir etc

Junto con el código fuente, se incluyen diferentes plantillas de archivos de configuración de MySQL, para diferentes tipos y tamaño de sistemas. Estos archivos de configuración de ejemplo se encuentran dentro del directorio "support-files":

cd /usr/local/src/mysql-5.5.38/support-files/

Analizar las diferentes alternativas y escoger la que mejor se adapte al sistema:

less my-small.cnf
less my-medium.cnf
less my-large.cnf
less my-huge.cnf

Copiar el archivo de configuración elegido al directorio "etc" creado en el paso anterior, con el nombre "my.cnf":

cp my-medium.cnf /usr/local/mysql/etc/my.cnf

Ajustar los permisos adecuadamente, tanto para el directorio "etc", como para el archivo de configuración:

cd /usr/local/mysql
chown -R mysql:mysql etc
chmod o-rwx etc

Configuración del servidor MySQL:

cd etc/
nano my.cnf

La configuración del demonio dependerá de cada instalación en particular. Si se requiere utilizar una partición grande para almacenar las instancias, se debe modificar el directorio de datos que utiliza MySQL por defecto (/usr/local/mysql/data/). Configurar el directorio de datos para las instancias de bases de datos utilizando la variable "datadir" (en este ejemplo /data/inst1).

La sección principal de configuración del demonio mysqld es similar a la siguiente:

[mysqld]
datadir = /data/inst1
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16M
### ||||||||||||||||||||||||||||||||||
### Máximo tamaño de paquete permitido
### vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
max_allowed_packet = 16M
table_open_cache = 128
sort_buffer_size = 512K
net_buffer_length = 32K
read_buffer_size = 512K
read_rnd_buffer_size = 1024K
myisam_sort_buffer_size = 24M

Revisar cuidadosamente los límites de tamaño para paquetes y buffers.

Si se utilizan tablas InnoDB, es necesario configurar las siguientes variables:

innodb_data_home_dir = /data/inst1
### |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
### Reservar porciones de espacio en disco de a 512 Mb para las tablas InnoDB
### vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
innodb_data_file_path = ibdata1:512M:autoextend
innodb_log_group_home_dir = /data/inst1
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

En este ejemplo se ha configurado el motor de almacenamiento InnoDB para reservar porciones de espacio en disco en incrementos de 512 Mb.

Si el directorio que se ha definido para las intancias no existe, es necesario crearlo:

mkdir /data/inst1
chown mysql:mysql /data/inst1

Habiendo configurado MySQL correctamente, es posible crear las bases de datos de sistema. Para ello ejecutar:

cd /usr/local/mysql/
./scripts/mysql_install_db --user=mysql --datadir=/data/inst1

Luego, establecer la contraseña del usuario "root" de MySQL (administrador). Se debe especificar el nombre de host (en el ejemplo, "db54.pepe.org") y la contraseña (en el ejemplo, "1234"):

./bin/mysqladmin -u root password -h db54.pepe.org '1234'

Finalmente, instalar el script de control del servicio:

cp /usr/local/src/mysql-5.5.38/support-files/mysql.server /etc/init.d/

Iniciar el demonio mysqld ejecutando:

service mysql.server start

Verificar que el proceso mysqld haya iniciado y esté escuchando peticiones en el puerto 3306:

ps aux         
[root@db54.pepe.org ~]# netstat -tulpn | grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1861/mysqld         


Tal vez pueda interesarte


Compartí este artículo