Instances MySQL « jetables »

 

Quand on veut faire des tests sur un service, il est intéressant d'avoir des procédures d'installation rapide pour pouvoir faire des tests, tout casser, tout réinstaller et recommencer. On peut se créer des machines virtuelles VirtualBox (ou autres systèmes de virtualisation) et redéployer sans cesse des copies.

Cependant pour MySQL il existe une solution encore plus simple : MySQL Sandbox qui permet de déployer des instances multiples de MySQL sur un serveur.

Installation

Récupération des sources (Sandbox et différentes versions de MySQL) :

# cd /usr/src
# wget http://launchpad.net/mysql-sandbox/mysql-sandbox-3/mysql-sandbox-3/+download/MySQL-Sandbox-
3.0.17.tar.gz
# wget ftp://mirrors.ircam.fr/pub/mysql/Downloads/MySQL-5.0/mysql-5.0.89-linux-x86_64-glibc23.tar.gz
# wget ftp://mirrors.ircam.fr/pub/mysql/Downloads/MySQL-5.1/mysql-5.1.53-linux-x86_64-glibc23.tar.gz
# wget ftp://mirrors.ircam.fr/pub/mysql/Downloads/MySQL-5.5/mysql-5.5.8-linux2.6-x86_64.tar.gz

Installation SandBox :

# apt-get install build-essential
# tar xvzf MySQL-Sandbox-3.0.17.tar.gz
# cd MySQL-Sandbox
# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for MySQL::Sandbox
# make
# make install

 

Création d'une instance MySQL

# make_sandbox /usr/src/mysql-5.0.89-linux-x86_64-glibc23.tar.gz
MySQL Sandbox should not run as root

If you know what you are doing and want to
run as root nonetheless, please set the environment
variable 'SANDBOX_AS_ROOT' to a nonzero value

# export SANDBOX_AS_ROOT='1'
unpacking /usr/src/mysql-5.0.89-linux-x86_64-glibc23.tar.gz
Executing low_level_make_sandbox --basedir=/usr/src/5.0.89 
        --sandbox_directory=msb_5_0_89 
        --install_version=5.0 
        --sandbox_port=5089 
        --no_ver_after_name 
        --my_clause=log-error=msandbox.err
    The MySQL Sandbox,  version 3.0.17
    (C) 2006-2010 Giuseppe Maxia
installing with the following parameters:
upper_directory                = /root/sandboxes
sandbox_directory              = msb_5_0_89
sandbox_port                   = 5089
check_port                     =
no_check_port                  =
datadir_from                   = script
install_version                = 5.0
basedir                        = /usr/src/5.0.89
tmpdir                         =
my_file                        =
operating_system_user          = root
db_user                        = msandbox
remote_access                  = 127.%
ro_user                        = msandbox_ro
rw_user                        = msandbox_rw
repl_user                      = rsandbox
db_password                    = msandbox
repl_password                  = rsandbox
my_clause                      = log-error=msandbox.err
prompt_prefix                  = mysql
prompt_body                    =  [h] {u} (d) >
force                          =
no_ver_after_name              = 1
verbose                        =
load_grants                    = 1
no_load_grants                 =
no_run                         =
no_show                        =
do you agree? ([Y],n) y
loading grants
. sandbox server started
Your sandbox server was installed in $HOME/sandboxes/msb_5_0_89

On se retrouve donc avec un nouveau serveur mysql :

# netstat -tpnl | grep mysql
tcp        0      0 0.0.0.0:5089            0.0.0.0:*               LISTEN      3498/mysqld

 

Pour y accéder

# /root/sandboxes/msb_5_0_89/use

Pour stopper l'instance

# /root/sandboxes/msb_5_0_89/stop

Pour la démarrer

# /root/sandboxes/msb_5_0_89/start

Pour la configurer :

# vi /root/sandboxes/msb_5_0_89/my.sandbox.cnf

Les data

# ls /root/sandboxes/msb_5_0_89/data/

 

Installer une seconde instance

# make_sandbox /usr/src/mysql-5.1.53-linux-x86_64-glibc23.tar.gz

# netstat -tpnl | grep mysql
tcp        0      0 0.0.0.0:5153            0.0.0.0:*               LISTEN      3743/mysqld
tcp        0      0 0.0.0.0:5089            0.0.0.0:*               LISTEN      3584/mysqld

 

Importer un fichier SQL dans une instance

# cd /root/sandboxes/msb_5_0_89/
# ./use -e 'create database world character set utf8;'
# ./use world < tmp/world.sql

Supprimer une instance

# cd /root/sandboxes/msb_5_0_89/
# ./stop
# cd ..
# rm -rf msb_5_0_89/

 

Mettre en place une architecture de replication maitre > esclaves

# make_replication_sandbox /usr/src/mysql-5.5.8-linux2.6-x86_64.tar.gz
installing and starting master
installing slave 1
installing slave 2
starting slave 1
.. sandbox server started
starting slave 2
... sandbox server started
initializing slave 1
initializing slave 2
replication directory installed in $HOME/sandboxes/rsandbox_5_5_8

Ce qui crée une architecture 1 maître / 2 esclaves (node1 et node2)

 

Conclusion

Voici donc une bonne "boîte à outils" pour tester de multiples configurations de serveurs MySQL.

Pour une documentation plus complète :

http://search.cpan.org/~gmax/MySQL-Sandbox-3.0.17/lib/MySQL/Sandbox/Recipes.pm