Translate

четвер, 25 квітня 2013 р.

MySQL Sandbox (декілька MySQL-демонів різних версій на одному хості)



Продовжуємо розгляд установки декількох mysql-демонів на одному хості. Цього разу мова піде про Mysql Sandbox.

Mysql Sandbox - це набір скриптів на Perl для автоматизації та швидкого розвертання інстансів MySQL: за допомогою нього можна лиш однією командою підняти одночасно декілька mysql-демонів різних версій,  налаштувати реплікацію різних типів тощо. Причому установка додаткових інстансів не зачіпає директорій оригінального mysql, якщо він присутній на сервері. Насправді дуже корисно мати такий інструмент для тестування нових фіч чи для перевірки поведінки реплікації при певних діях.

Для початку завантажимо tar-архів mysql необхідної версії:


# wget -O mysql-5.6.11-linux-glibc2.5-x86_64.tar.gz http://www.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.11-linux-glibc2.5-x86_64.tar.gz/from/http://cdn.mysql.com/

Тепер переходимо до самого завантаження Mysql Sandbox:

# wget https://launchpad.net/mysql-sandbox/mysql-sandbox-3/mysql-sandbox-3/+download/MySQL-Sandbox-3.0.33.tar.gz

Розпаковуємо і переходимо в директорію:

# tar xvfz MySQL-Sandbox-3.0.33.tar.gz
# cd MySQL-Sandbox-3.0.33

І тепер власне потрібно визначитись з користувачем від якого будуть працювати mysql-інстанси. Це може бути рут чи звичайний користувач (на ваш вибір). Для рута виконуємо наступне:

# export SANDBOX_AS_ROOT=1

# perl Makefile.PL
Writing Makefile for MySQL::Sandbox
Writing MYMETA.yml

# make
Skip blib/lib/MySQL/Sandbox/Scripts.pm (unchanged)
Skip blib/lib/MySQL/Sandbox/Recipes.pm (unchanged)
Skip blib/lib/MySQL/Sandbox.pm (unchanged)
cp bin/deploy_to_remote_sandboxes.sh blib/script/deploy_to_remote_sandboxes.sh
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/deploy_to_remote_sandboxes.sh

cp bin/msandbox blib/script/msandbox
...
cp bin/make_sandbox_from_source 

blib/script/make_sandbox_from_source
/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/make_sandbox_from_source
Manifying blib/man3/MySQL::Sandbox::Scripts.3pm
Manifying blib/man3/MySQL::Sandbox::Recipes.3pm
Manifying blib/man3/MySQL::Sandbox.3pm


# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/01_modules.t ...................... ok
t/02_test_binaries.t ................ ok
t/03_test_sandbox.t ................. ok
t/04_test_sbtool.t .................. ok
t/05_test_smoke.t ................... ok
t/06_test_user_defined.t ............ ok
t/07_test_user_defined.t ............ ok
t/08_test_single_port_checking.t .... ok
t/09_test_multiple_port_checking.t .. ok
t/10_check_start_restart.t .......... ok
t/11_replication_parameters.t ....... ok
t/12_custom_user_pwd.t .............. ok
t/13_innodb_plugin_install.t ........ ok
t/14_semi_synch_plugin_install.t .... ok
t/15_user_privileges.t .............. ok
t/16_replication_options.t .......... ok
All tests successful.
Files=16, Tests=53, 1 wallclock secs ( 0.08 usr 0.02 sys + 1.00 cusr 0.15 csys = 1.25 CPU)
Result: PASS

# make install
Installing /usr/local/share/perl/5.14.2/MySQL/Sandbox.pm
Installing /usr/local/share/perl/5.14.2/MySQL/Sandbox/Scripts.pm
Installing /usr/local/share/perl/5.14.2/MySQL/Sandbox/Recipes.pm
Installing /usr/local/man/man3/MySQL::Sandbox::Recipes.3pm
Installing /usr/local/man/man3/MySQL::Sandbox.3pm
Installing /usr/local/man/man3/MySQL::Sandbox::Scripts.3pm
Installing /usr/local/bin/make_sandbox_from_source
Installing /usr/local/bin/sbtool
Installing /usr/local/bin/make_replication_sandbox
Installing /usr/local/bin/make_multiple_custom_sandbox
Installing /usr/local/bin/deploy_to_remote_sandboxes.sh
Installing /usr/local/bin/msandbox
Installing /usr/local/bin/make_sandbox
Installing /usr/local/bin/test_sandbox
Installing /usr/local/bin/make_multiple_sandbox
Installing /usr/local/bin/make_sandbox_from_installed
Installing /usr/local/bin/sb
Installing /usr/local/bin/low_level_make_sandbox
Appending installation info to /usr/local/lib/perl/5.14.2/perllocal.pod

Для звичайного користувача необхідно експортувати інші змінні:

# export PATH=$HOME/usr/local/bin:$PATH
# export PERL5LIB=$HOME/usr/local/lib/perl5/site_perl/5.8.8

# perl Makefile.PL PREFIX=$HOME/usr/local
# make
# make test
# make install


Створюємо пісочницю:

# make_sandbox mysql-5.6.11-linux-glibc2.5-x86_64.tar.gz
unpacking /home/ipeacocks/sandbox/mysql-5.6.11-linux-glibc2.5-x86_64.tar.gz
Executing low_level_make_sandbox --basedir=/home/ipeacocks/sandbox/5.6.11 \
--sandbox_directory=msb_5_6_11 \
--install_version=5.6 \
--sandbox_port=5611 \
--no_ver_after_name \
--my_clause=log-error=msandbox.err
The MySQL Sandbox, version 3.0.33

(C) 2006-2013 Giuseppe Maxia
installing with the following parameters:
upper_directory                = /root/sandboxes

sandbox_directory              = msb_5_6_11
sandbox_port                   = 5611


check_port                     = 

no_check_port                  = 

datadir_from                   = script

install_version                = 5.6

basedir                        = /home/ipeacocks/sandbox/5.6.11

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
master                         = 
slaveof                        = 
high_performance               = 
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_6_11

Порт, на якому працюватиме mysql, по замовчуванню буде взято згідно номера версії завантаженого mysql. Отже, зараз до бази даних можна підключитись як root чи msandbox з паролями вказаними вище:

# mysql -P5611 --protocol=tcp -p

Так як базу було запущено від користувача root - всі системні файли будуть знаходитись в /root/sandboxes/версія_mysql (власне це також помітно в попередньому системному виводі). Також у цій же директорії лежать скрипти для зупинки/старту/тощо інстанса:

:~/sandboxes/msb_5_6_11# ls
change_paths  change_ports  clear  data  grants.mysql  load_grants  msb  my  my.sandbox.cnf  proxy_start  rescue_mysql_dump.sql  restart  send_kill  start  status  stop  tmp  use  USING

Кожний наступну копію mysql запускають аналогічним чином (з указанням порту ключем --sandbox_port=xxxx ). Звісно, якщо версію потрібно іншу - то варто також скачати tar-архів mysql необхідної версії. 

Так можна запустити багато копій mysql однієї версії:

# make_multiple_sandbox /path/to/tarball.tar.gz --how_many_nodes = number

Чи запустити копії mysql одразу із налаштованою реплікацією ( буде піднято один master і два slave ):

# make_replication_sandbox /path/to/tarball.tar.gz

Надіюсь ця стаття буде корисною для вас і зекономить багато часу.

Корисні посилання:
http://mysqlsandbox.net/

Немає коментарів:

Дописати коментар