Ya sea dentro de un Cluster o directamente en un servidor estándar, podemos necesitar tener más de una instancia diferenciada de un servicio, en este caso MySQL. Vamos a ver el proceso de instalación y configuración de dos instancias/servidores MySQL dentro de un único servidor.
Lo primero que hacemos es la instalación propiamente dicha de MySQL, ya sea por rpm, yum, apt o compilando. Nosotros bajamos el rpm de MySQL 5.5 y lo instalamos:
# wget http://mysql.mirrors.ovh.net/ftp.mysql.com/Downloads/MySQL-5.5/MySQL-5.5.20-1.linux2.6.x86_64.tar # tar -xvf MySQL-5.5.20-1.linux2.6.x86_64.tar # rpm -ivh MySQL-server-5.5.20-1.linux2.6.x86_64.rpm MySQL-client-5.5.20-1.linux2.6.x86_64.rpm
Una vez instalado vamos ver como estructurar el sistema:
- Todas las instancias compartirán los binarios y librerías, ubicados en /usr/bin/mysql /usr/lib64/mysql
- Cada instancia tendrá su filesystem o directorio en el que almacenar sus ficheros propios de configuración, bases de datos y logs. Si es un cluster se encontrará en una NAS y servido por iSCSI o FC.
/mysql1 /mysql1/etc /mysql1/data /mysql1/data/logs /mysql2 /mysql2/etc /mysql2/data /mysql2/data/logs ... ...
- Cada instancia tendrá su propio script de arranque:
/etc/init.d/mysql1 /etc/init.d/mysql2 ... ...
El punto 1 está hecho ya que tenemos MySQL instalado. Para el punto 2, creamos la estructura de directorios indicada y copiamos en /mysqlX/etc/ el fichero de configuración por defecto de MySQL my.cnf ubicado en /etc:
# cp -p /etc/my.cnf /mysql1/etc/
Para diferenciar cada instancia debemos hacer lo siguiente:
- Cada instancia escuchará por una IP distinta. Si comparten IP tendrán que escuchar por puertos distintos.
- Cada instancia usará un socket distinto.
- Cada instancia tendrá un PID file distinto.
- Cada instancia tendrá un datadir distinto.
Así pues, editamos dichos valores en cada my.cnf de cada instancia según requerimientos:
[mysqld] # Ruta al datadir de cada instancia: datadir=/mysql1/data # Puerto de escucha, si las instancias comparten IP # debe ser distinto en cada una port=3306 # IP de escucha, si se quiere mantener el mismo puerto TCP # para todas debe ser única en cada una: bind-address=10.0.0.110 # Ruta al socket (único por instancia) socket=/var/tmp/mysql1.sock
Una vez configurados los my.cnf de todas las instancias podemos inicializar e instalar las bases de datos por defecto:
# mysql_install_db --datadir=/mysql1/
# mysql_install_db --datadir=/mysql2/
Ya podríamos arrancar las dos instancias manualmente, únicamente debemos especificar el fichero de configuración:
# /usr/bin/mysqld_safe --defaults-file=/mysql1/etc/my.cnf & # /usr/bin/mysqld_safe --defaults-file=/mysql2/etc/my.cnf &
Si queremos usar los scripts de arranque en init.d deberemos cambiar los siguientes parámetros:
# If you change base dir, you must also change datadir. These may get # overwritten by settings in the MySQL configuration files. # Únicamente si no se especifican en el my.cnf basedir= datadir=
Ruta al PID file de cada instancia:
mysqld_pid_file_path=/mysql1/data/mysql1.pid
En el case de arranque añadir el fichero de configuración:
case "$mode" in 'start') # Start daemon # Safeguard (relative paths, core dumps..) cd $basedir echo $echo_n "Starting MySQL" if test -x $bindir/mysqld_safe then # Give extra arguments to mysqld with the my.cnf file. This script # may be overwritten at next upgrade. mysqld_safe --defaults-file=/mysql1/etc/my.cnf --pid-file="$mysqld_pid_file_path" >/dev/null 2>&1 &
Hola que tal!. La verdad que muy bueno….
Podrian hacer uno pero bajo Windows 7… Ya que difiere mucho uno de otro…
Excelente trabajo!
Gracias!
Muy buen trabajo. Muchas gracias.