Instalacja

Z MySQL Integra

Spis treści

Opis pomysłu i maszyny

Poniższy skrypt zawiera kroki konieczne do instalacji badanych przez nas serwerów "obok siebie" aby z sobą nie konfliktowały. Nasza maszyna docelowa ma 6 dysków, połączone w 1 LVM, te dyski będziemy spinać w różne konfiguracje RAID sprawdzając wpływ tych konfiguracji na ogólną wydajność systemu.

Dla celów sprawdzania rozwiązań przed wrzuceniem ich na serwer, skorzystam z VirtualBoxa z instalacją CentOS 5.3 (ten sam system co na naszym serwerze). Dla wygody zachęcam zamiast instalować system od zera w VirtualBoxie, pobrać poniższy obraz VDI: [1]

Obraz pochodzi z kolekcji obrazów systemów operacyjnych budowanych w ramach projektu: [2] Polecam :-)

Pre-instalacja

Przed instalacją możemy sobie troszkę przygotować środowisko. Przydadzą się nam dodatkowe repozytoria i narzędzia. Koniecznie aktualizujemy sytstem przed instalowaniem czegokolwiek innego, aby uniknąć konfliktów zależności.

#================================================================================
#Multiple MySQLs on one server HOWTO
#================================================================================
 
#repos and keys
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
 
yum update -y
yum install htop bash-completion -y

MySQL w Sandboxie

MySQL, "zwyczajny", zainstalujemy go z paczki z binariami (nie RPM) aby nie kolidował z np. MariaDB. Tworzymy go w ten sposób, aby wygodnie jako "główny" postawić MariaDB - lokalizacja bazy danych w systemie nie ma dla nas żadnego znaczenia (np. ze względu na wydajność), siedzimy i tak na jednym wielkim LVM pod którym możemy się bawić RAIDami - jest to rozwiązanie na cele naszych testów dość rozsądne, pozwoli zabawę różnymi konfiguracjami RAID.

#================================================================================
#Clean MySQL
#================================================================================
 
groupadd mysql
useradd -g mysql mysql
 
#create a place for mysql to live in
mkdir -p /opt/mysql
cd /opt/mysql
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.43-linux-i686-glibc23.tar.gz/from/http://mysql.easynet.be/
tar xzvf mysql-5.1.43-linux-i686-glibc23.tar.gz
mv mysql-5.1.43-linux-i686-glibc23.tar.gz 5.1.43
 
#go on with the installation
cd 5.1.43
./scripts/mysql_install_db --user=mysql
 
#test it
./bin/mysqld_safe --user=mysql &
 
#note that we MUST use the /opt/mysql/5.1.43/bin/mysql binary! NOT the global (that will be maria) one
./bin/mysql
mysql> SHOW engines;
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment                                                        | Transactions | XA   | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB     | YES     | Supports transactions, row-level locking, AND FOREIGN KEYS     | YES          | YES  | YES        |
| MRG_MYISAM | YES     | Collection of identical MyISAM TABLES                          | NO           | NO   | NO         |
| BLACKHOLE  | YES     | /dev/NULL storage engine (anything you WRITE TO it disappears) | NO           | NO   | NO         |
| CSV        | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY     | YES     | Hash based, stored IN memory, useful FOR TEMPORARY TABLES      | NO           | NO   | NO         |
| FEDERATED  | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| ARCHIVE    | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| MyISAM     | DEFAULT | DEFAULT engine AS of MySQL 3.23 WITH great performance         | NO           | NO   | NO         |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
8 rows IN SET (0.00 sec)
 
mysql> USE mysql;
mysql> UPDATE user SET password=password("qwerty12345") WHERE user="root";
mysql> FLUSH privileges;
#if problems come up, try on mysql folders (data etc)
chown -R mysql.mysql *

MariaDB

Marię zainstalujemy "najzwyczajniej" - w głównych folderach systemu plików. Instalację z RPM tej bazy wybrałem z powodu łatwości instalacji pozostałych innymi metodami - infini na przykład bardzo ładnie zainstaluje się w /usr/local/Calpont/... MariaDB zawiera kilka interesujących nas silników:

  • PBXT
  • XtraDB - pokazywany jako InnoDB
  • Maria
#===============================================================================
#MariaDB "normal instalation" - includes: Maria, XtraDB, 
#===============================================================================
#wget http://askmonty.org/downloads/r/http://mariadb.cdn.cacheboy.net/download/mariadb-5.1.42/mariadb-5.1.42-Linux-x86_64.tar.gz
 
rpm --import http://master.ourdelta.org/deb/ourdelta.gpg
rpm -Uvh http://mirror.ourdelta.org/yum/CentOS/OurDelta-release-0.0.4-1.noarch.rpm
yum install MariaDB-server MariaDB-client MariaDB-shared -y
 
[root@localhost ~]# mysqld --version
mysqld  Ver 5.1.39-maria-beta-ourdelta67 for pc-linux-gnu on i686 ((OurDelta - http://ourdelta.org/))

Sprawdźmy jakie silniki udostępnia nam Maria:

mysql
#Welcome to the MariaDB monitor.  Commands end with ; or \g.
#Your MariaDB connection id is 1
#Server version: 5.1.39-maria-beta-ourdelta67 (OurDelta - http://ourdelta.org/)
#
#Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#
#MariaDB [(none)]> show engines;
#+------------+---------+----------------------------------------------------------------+--------------+------+------------+
#| Engine     | Support | Comment                                                        | Transactions | XA   | Savepoints |
#+------------+---------+----------------------------------------------------------------+--------------+------+------------+
#| BLACKHOLE  | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
#| MRG_MYISAM | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
#| FEDERATED  | YES     | FederatedX pluggable storage engine                            | YES          | NO   | YES        |
#| MARIA      | YES     | Crash-safe tables with MyISAM heritage                         | YES          | NO   | NO         |
#| CSV        | YES     | CSV storage engine                                             | NO           | NO   | NO         |
#| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
#| ARCHIVE    | YES     | Archive storage engine                                         | NO           | NO   | NO         |
#| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         | NO           | NO   | NO         |
#| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
#| PBXT       | YES     | High performance, multi-versioning transactional engine        | YES          | NO   | NO         |
#+------------+---------+----------------------------------------------------------------+--------------+------+------------+
#10 rows in set (0.01 sec)

Uważnie przeglądając listę silników, można się zdziwić: "gdzie podział się XtraDB?". Odpowiedź jest zaskakująco przyjemna. XtraDB zastępuje InnoDB - jednak występuje pod jego nazwą. Ma to na celu umożliwienie następującego scenariusza: Tworzymy backup danych na serwerze korzystającym z InnoDB, wgrywamy je na naszym korzystającym z XtraDB i... gotowe. Nie musimy nawet zmieniać w definicjach tabel wykorzystywanego silnika. Jest to z pewnością wygodne przy migrowaniu danych na MariaDB z MySQL, ale troszkę może zaskoczyć... źródło: [3]

PS: Nie jest możliwe zainstalowanie z RPMów MariaDB obok MySQL, Maria perfidnie udaje, i korzysta z nazwy mysql - nawet sam demon serwera tak się nazywa... Szkoda, że "Monty" nie zdecydował się na mniej agresywne wobec MySQL podejście...

InfiniDB

Będzie to osobny serwer - niestety jest to konieczne, nie możliwe jest (potwierdził to członek zespołu infini) skorzystanie z tego silnika wewnątrz zwyczajnego MySQL jako plugin. Na szczęście instalacja jest bardzo przyjemna:

#===============================================================================
#InfiniDB, seperate instalation
#===============================================================================
#Uprzedzając pytania: nie da się zainstalować go jako plugin... :-|
#http://www.infinidb.org/community/forums/6-installation/67-possible-to-install-as-plugin
###binary release###
wget http://infinidb.org/downloads/doc_download/117-102-final-32-bit-rpms
version=1.0.2-1
 
tar xzvf calpont-infinidb-$version.i686.rpm.tar.gz
rpm -Uvh calpont-$version.i686.rpm
#mysql first - it's a dependency
rpm -Uvh calpont-mysqld-$version.i686.rpm
rpm -Uvh calpont-mysql-$version.i686.rpm
 
#setup service/chkconfig
cd /usr/local/Calpont/
killall mysqld 
./bin/install-infinidb.sh
 
chkconfig --add infinidb
#dont autostart
chkconfig infinidb off
 
#setup aliases
alias calpontOAMconsole='/usr/local/Calpont/bin/calpontConsole'
echo 'alias calpontOAMconsole= /usr/local/Calpont/bin/calpontConsole' >> ~/.bashrc
 
alias idbmysql='/usr/local/Calpont/mysql/bin/mysql --defaults-file=/usr/local/Calpont/mysql/my.cnf -u root'
echo 'alias idbmysql= /usr/local/Calpont/mysql/bin/mysql --defaults-file=/usr/local/Calpont/mysql/my.cnf -u root' >> ~/.bashrc
 
alias cc='/usr/local/Calpont/bin/calpontConsole'
echo 'alias cc=/usr/local/Calpont/bin/calpontConsole' >> ~/.bashrc
 
alias cmconsole='/usr/local/Calpont/bin/calpontConsole'
echo 'alias cmconsole=/usr/local/Calpont/bin/calpontConsole' >> ~/.bashrc
 
curl ip.appspot.com
#222.222.222.222
 
#insert: bind-address = 222.222.222.222 into the configuration file
#vim mysql/my.cnf 
 
service infinidb restart
 
idbmysql
#add users...

Możemy teraz zmienić tutaj port na którym będzie słuchał nasz infinidb, zmiany należy dokonać w: /usr/local/Calpont/mysql/my.cnf

#it takes some time for it to start, as its using it's "Database Platform" etc.
#first startup will take quite long, since it will build it's datastructure
service infinidb start
#Starting Calpont InfiniDB Database Plaform: ...... done.
#creating system catalog (be patient): ................. done.
#Starting Calpont InfiniDB Mysqld: 
#Starting MySQL.                                            [  OK  ]
service infinidb stop

Rzućmy okiem jakie silniki udostępnia nam ta baza danych:

[root@localhost ~]# idbmysql 
#Welcome to the MySQL monitor.  Commands end with ; or \g.
#Your MySQL connection id is 1
#Server version: 5.1.39 MySQL Community / InfiniDB Community Edition 1.0.2-1 Final (GPL)
#
#Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#
#mysql> show engines;
#+------------+---------+-----------------------------------------------------------+--------------+------+------------+
#| Engine     | Support | Comment                                                   | Transactions | XA   | Savepoints |
#+------------+---------+-----------------------------------------------------------+--------------+------+------------+
#| CSV        | YES     | CSV storage engine                                        | NO           | NO   | NO         |
#| InfiniDB   | YES     | Calpont InfiniDB storage engine                           | YES          | NO   | NO         |
#| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables | NO           | NO   | NO         |
#| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance    | NO           | NO   | NO         |
#| MRG_MYISAM | YES     | Collection of identical MyISAM tables                     | NO           | NO   | NO         |
#+------------+---------+-----------------------------------------------------------+--------------+------+------------+
#5 rows in set (0.00 sec)

TokuDB

Instalacja jest niezbyt przyjemna... Konieczne jest ręczne pobranie 3 osobnych archiwów z strony producenta - zmodyfikowanego MySQL, binarnej dystrybucji drzewa fraktalnego oraz łącznika mysql<->toku. Konieczna jest rejestracja (w nie zawsze działającym formularzu) oraz akceptacja 2 umów licencyjnych... Gdy już zdobędziemy pliki:

  • mysql-5.1.36-tokutek-3.0.2-16948-src.tar.gz
  • tokufractaltreeindex-3.0.2-16948-linux-x86 64.tar.gz
  • tokumysql-3.0.2-16948-src.tar.gz

możemy przystąpić do instalacji:

!Nie skończone! coś nie idzie to tak jak powinno... jestem w trakcie sprawdzanie przyczyn problemu !Nie skończone!

#===============================================================================
# TOKUDB 3.0 BETA
#===============================================================================
cd
#get the file
#sinceyou have to agree to lots of licence stuff... get it by hand...
echo 'GET ME: mysql-5.1.36-tokutek-3.0.2-beta-16948-src.tar.gz'
echo 'done?'
read okey
tar xzvf mysql-5.1.36-tokutek-3.0.2-beta-16948-src.tar.gz
cd mysql-5.1.36-tokutek-3.0.2-beta-16948-src
pushd mysql-5.1.36
bash scripts/tokutek.build.bash --mysqlversion=mysql-5.1.36-tokudb-3.0.2-16948
bash -x
popd
 
cd ..
tar xzvf tokufractaltreeindex-3.0.2-beta-16948-linux-x86_64.tar.gz 
cd tokufractaltreeindex-3.0.2-beta-16948-linux-x86_64
vim README
mkdir /opt/toku;
cp * /opt/mysql/toku
############################################################################
##################IN PROGRESSSSSSSSSSSSSSSSSSSSSSSS#########################
############################################################################

Post-instalacja

Kilka rzeczy które potencjalnie będziemy chcieli pozmieniać po instalacji wszystkiego.

#===============================================================================
#POST INSTALATION STUFF
#===============================================================================
yum install httpd phpMyAdmin links nmap netstat -y
 
echo "allow access to phpmyadmin from remote?"
vim /etc/httpd/conf.d/phpMyAdmin.conf
 
service httpd start
links http://127.0.0.1/phpmyadmin