MySQL Sandbox, uno o más servidores MySQL aislados en una máquina

MySQL SandboxMySQL Sandbox es una herramienta de gran utilidad para probar nuevas versiones de MySQL en servidores de desarrollo y pruebas. Te permite, de una forma extremadamente sencilla instalar uno o más servidores MySQL en un servidor en escasos segundos. Estos servidores MySQL están completamente aislados de cualquier otro servidor MySQL que haya instalado en el servidor, algo muy útil para probar versiones distintas de MySQL sin afectar al servidor en producción.

Por defecto, la herramienta trae opciones preestablecidas para la creación de varios servidores MySQL independientes con una única orden, creación de sistemas de replicación, creación a partir de código fuente, binarios, etc.

La instalación de MySQL Sandbox es sencilla, podemos descargarnos el tarball y seguir los pasos de la instalación o descargarlo directamente desde CPAN como módulo de Perl:

# cpan

cpan shell -- CPAN exploration and modules installation (v1.9205)
ReadLine support available (maybe install Bundle::CPAN or Bundle::CPANxxl?)

cpan> install MySQL::Sandbox

Una vez instalado, hemos de revisar las opciones de creación:

$ sandbox
The MySQL Sandbox,  version 3.0.04
(C) 2006,2007,2008,2009 Giuseppe Maxia
available applications:
make_sandbox                  : the easiest way of creating a sandbox
low_level_make_sandbox        : create a single sandbox, with fine tuning options (don't use directly)
make_replication_sandbox      : creates a sandbox with replicated master and slaves or circular
make_multiple_sandbox         : creates a group of sandboxes with the same version
make_multiple_custom_sandbox  : create a group of sandboxes with different versions
make_sandbox_from_source      : create a sandbox from a build directory
make_sandbox_from_installed   : create a sandbox from already installed binaries
sbtool                        : performs auxiliary actions with existing sandboxes

Para crear una instancia de servidor MySQL básica, simplemente tenemos que descargarnos la versión que queramos de MySQL. Vamos a crear por ejemplo una sandbox de la versión 5.4.1:

wget http://dev.mysql.com/get/Downloads/MySQL-5.4/mysql-5.4.1-beta-linux-i686-glibc23.tar.gz/from/http://mysql.rediris.es/

Una vez descargado, la forma más sencilla de crear la sandbox con MySQL 5.4.1 es la siguiente:

$ make_sandbox mysql-5.4.1-beta-linux-i686-glibc23.tar.gz
unpacking /home/alex/mysql-5.4.1-beta-linux-i686-glibc23.tar.gz
Executing low_level_make_sandbox --basedir=/home/alex/5.4.1 \
	--sandbox_directory=msb_5_4_1 \
	--install_version=5.4 \
	--sandbox_port=5410 \
	--no_ver_after_name \
	--my_clause=log-error=msandbox.err
    The MySQL Sandbox,  version 3.0.04
    (C) 2006,2007,2008,2009 Giuseppe Maxia
installing with the following parameters:
upper_directory                = /home/alex/sandboxes
sandbox_directory              = msb_5_4_1
sandbox_port                   = 5410
check_port                     = 0
no_check_port                  = 0
datadir_from                   = script
install_version                = 5.4
basedir                        = /home/alex/5.4.1
my_file                        = 
operating_system_user          = alex
db_user                        = msandbox
db_password                    = msandbox
my_clause                      = log-error=msandbox.err
prompt_prefix                  = mysql
prompt_body                    =  [\h] {\u} (\d) > '
force                          = 0
no_ver_after_name              = 1
verbose                        = 0
load_grants                    = 1
no_load_grants                 = 0
no_show                        = 0
do you agree? ([Y],n) Y
090716 19:46:44 [Warning] Forcing shutdown of 2 plugins
090716 19:46:44 [Warning] Forcing shutdown of 2 plugins
loading grants
.................. sandbox server started
Your sandbox server was installed in $HOME/sandboxes/msb_5_4_1

Simplemente hay que ejecutar la orden que queramos seguida del fichero tarball que contiene la versión MySQL a instalar (podríamos hacer una sandbox sencilla como este caso, o crear replicaciones, etc). Como véis, antes de instalarla y arrancarla nos pide confirmación e informa del lugar en el que instala todas las sandboxes, la carpeta en la que se alojará la versión que estamos instalando, etc.

Dentro de la carpeta “sandboxes”, encontraréis todos los scripts necesarios para arrancar, parar y realizar acciones con las sandboxes, además de las carpetas que contienen cada una de ellas:

rwxr-xr-x 1 alex alex 2,1K 2009-07-16 19:46 sandbox_action
-rwxr-xr-x 1 alex alex   57 2009-07-16 19:46 use_all
-rwxr-xr-x 1 alex alex   58 2009-07-16 19:46 stop_all
-rwxr-xr-x 1 alex alex   59 2009-07-16 19:46 start_all
-rwxr-xr-x 1 alex alex   63 2009-07-16 19:46 send_kill_all
-rwxr-xr-x 1 alex alex   61 2009-07-16 19:46 restart_all
-rwxr-xr-x 1 alex alex   59 2009-07-16 19:46 clear_all
drwxr-xr-x 3 alex alex 4,0K 2009-07-16 19:46 msb_5_4_1

Dentro de las carpetas de cada sandbox, podéis hacer las mismas acciones pero únicamente para dicha sandbox:

:~/sandboxes/msb_5_4_1$ l
total 60K
-rwxr-xr-x 1 alex alex 1,5K 2009-07-16 19:46 stop
-rwxr-xr-x 1 alex alex 1,8K 2009-07-16 19:46 start
-rwxr-xr-x 1 alex alex 1,4K 2009-07-16 19:46 send_kill
-rwxr-xr-x 1 alex alex  881 2009-07-16 19:46 restart
-rw-r--r-- 1 alex alex 1,6K 2009-07-16 19:46 my.sandbox.cnf
-rwxr-xr-x 1 alex alex  917 2009-07-16 19:46 load_grants
-rwxr-xr-x 1 alex alex 1,7K 2009-07-16 19:46 clear
-rw-r--r-- 1 alex alex   51 2009-07-16 19:46 USING
-rwxr-xr-x 1 alex alex 1,3K 2009-07-16 19:46 use
-rwxr-xr-x 1 alex alex  923 2009-07-16 19:46 proxy_start
-rwxr-xr-x 1 alex alex 1,8K 2009-07-16 19:46 my
-rw-r--r-- 1 alex alex  187 2009-07-16 19:46 grants.mysql
-rwxr-xr-x 1 alex alex 1,5K 2009-07-16 19:46 change_ports
-rwxr-xr-x 1 alex alex 1,7K 2009-07-16 19:46 change_paths
drwx------ 4 alex alex 4,0K 2009-07-16 19:47 data

con el comando “use” podemos acceder al cliente MySQL para gestionar la sandbox:

~/sandboxes/msb_5_4_1$ ./use 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.4.1-beta MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql [localhost] {msandbox} ((none)) > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
| test               | 
+--------------------+
3 rows in set (0.00 sec)

mysql [localhost] {msandbox} ((none)) > 

Bien, esto es lo más básico para comenzar a utilizar esta genial herramienta, mención especial merece también el comando sbtool, que permite realizar acciones extras con las sandboxes, podéis verlas a continuación:

$ sbtool --help
usage: /usr/local/bin/sbtool [options] 
	-o     --operation       (s) <> - what task to perform
		 'info'     returns configuration options from a Sandbox
		 'tree'     creates a replication tree
		 'move'     moves a Sandbox to a different location
		 'unpreserve' makes a sandbox NOT permanent
		 'range'    finds N consecutive ports not yet used by the Sandbox
		 'port'     Changes a Sandbox port
		 'copy'     copies data from one Sandbox to another
		 'ports'    lists ports used by the Sandbox
		 'delete'   removes a sandbox completely
		 'preserve' makes a sandbox permanent
	-s     --source_dir      (s) <> - source directory for move, copy, delete
	-d     --dest_dir        (s) <> - destination directory for move,copy
	-n     --new_port        (s) <> - new port while moving a sandbox
	-u     --only_used       (-) <> - for "ports" operation, shows only the used ones
	-i     --min_range       (i) <5000> - minimum port when searching for available ranges
	-x     --max_range       (i) <64000> - maximum port when searching for available ranges
	-z     --range_size      (i) <10> - size of range when searching for available port range
	-f     --format          (s)  - format for "ports" and "info"
		 'perl'     fully structured information in Perl code
		 'text'     plain text dump of requested information
	-p     --search_path     (s)  - search path for ports and info
	-a     --all_info        (-) <> - print more info for "ports" operation
	       --master_node     (i) <1> - which node should be master (default: 1)
	       --tree_nodes      (s) <> - description of the tree (x-x x x-x x|x x x|x x)
	       --mid_nodes       (s) <> - description of the middle nodes (x x x)
	       --leaf_nodes      (s) <> - description of the leaf nodes (x x|x x x|x x)
	       --tree_dir        (s) <> - which directory contains the tree nodes
	-v     --verbose         (-) <> - prints more info on some operations
	-h     --help            (-) <1> - this screen

3 comentarios en “MySQL Sandbox, uno o más servidores MySQL aislados en una máquina

  1. Pingback: Bitacoras.com
  2. Hola Juan,

    No entiendo muy bien que necesitas. ¿Compilar en una misma máquina dos versiones de php ( 4 & 5 )?

    O lo que quieres es trabajar con cualquier versión de php y con la sandbox de MySQL

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *